#ifndef _SIMPLYGON_H_
#define _SIMPLYGON_H_

#ifndef SIMPLYGON_DONT_INCLUDE_WINDOWS_H
#ifndef _WINDOWS_
#ifndef WIN32_LEAN_AND_MEAN
#define WIN32_LEAN_AND_MEAN
#endif//WIN32_LEAN_AND_MEAN
#include <windows.h>
#endif//_WINDOWS_
#endif//SIMPLYGON_DONT_INCLUDE_WINDOWS_H

#include <string.h>
#include <stdint.h>

/// The version of this header, as a macro definition, for conditional builds.
/// Use GetHeaderVersion() to get full version including 
/// build number, and use GetInterfaceVersionHash() to get the hash of the interface.
#define Simplygon_VERSION 0x0902

#ifdef SGDEPRECATED
#undef SGDEPRECATED
#endif
#ifdef _WIN32
#pragma warning( push )
#pragma warning( disable : 4996 )
#endif

#if defined(SGSDK) || defined(WITH_SIMPLYGON_DLL) || defined(SGDEPRECATED_OFF)
// internal Simplygon, Unreal Engine, or deprecation warning disabled
#define SGDEPRECATED
#else
#ifdef _WIN32 // Microsoft compiler
#if (_MSC_VER >= 1300) // 7.1
#define SGDEPRECATED __declspec(deprecated)
#else
#define SGDEPRECATED
#endif
#else
#define SGDEPRECATED
#endif
#endif
	
namespace Simplygon
{

	/// BaseTypes are ids of the base types used by data containers (arrays etc.) within Simplygon.
	enum class EBaseTypes
	{
		TYPES_ID_BOOL = 1,
		TYPES_ID_CHAR = 2,
		TYPES_ID_UCHAR = 3,
		TYPES_ID_SHORT = 4,
		TYPES_ID_USHORT = 5,
		TYPES_ID_INT = 6,
		TYPES_ID_UINT = 7,
		TYPES_ID_LONG = 8,
		TYPES_ID_ULONG = 9,
		TYPES_ID_FLOAT = 10,
		TYPES_ID_DOUBLE = 11,
		TYPES_ID_REAL = 12,
		TYPES_ID_RID = 13,
		TYPES_ID_RCHAR = 14, // note: TYPES_ID_RCHAR is deprecated and not used anymore
		TYPES_ID_RHANDLE = 15,
		TYPES_ID_STRING = 16,
		TYPES_ID_OBJECT = 17
	};

	/// Error codes that are returned on initialization/finalization of the library
	enum class EErrorCodes
	{
		/// no error
		NoError = 0,

		/// no license was found (or licence expired)
		NoLicense = -1,

		/// the SDK is not initialized, or no process object has been loaded/created
		NotInitialized = -2,

		/// the SDK is already initialized
		AlreadyInitialized = -3,

		/// the specified file was not found. This might also mean that a .dll cannot be loaded because there is a missing dependency, such as the runtime environment.
		DLLOrDependenciesNotFound = -4,

		/// an invalid parameter was passed to the method
		InvalidInputParam = -5,

		/// the reduction failed post-testing
		FailedTesting = -6,

		/// the Simplygon DLL and header file interface versions do not match
		DLLAndHeaderFileIsNotMatching = -7,

		/// the Simplygon DLL failed loading, probably because of a missing dependency
		DLLFailedToLoad = -8,

		/// the license is not made for this application of Simplygon
		LicenseNotForThisApplication = -9,

		/// the license is not made for this platform of Simplygon
		LicenseNotForThisPlatform = -10,

		/// the license is not made for this version of Simplygon
		LicenseNotForThisVersion = -11,

		/// failed to create pipeline serializer
		FailedToCreatePipelineSerializer = -12,

		/// failed to run pipeline
		FailedToRunPipeline = -13,

		/// an unhandled exception was encountered
		UnhandledException = -14,

		/// failed to upload free license asset
		FailedToUploadFreeLicenseAsset = -50,

		/// cannot reach the licensing server, cant look up server, check DNS
		FailedToResolveLicenseServerHostName = -10001,

		/// cannot contact the licensing server, check firewall/proxy server
		FailedToConnectToLicenseServer = -10002,

		/// Failed to connect to the license server. Please check that your internet connection is working and outgoing connections to license.simplygon.com port 443 are not blocked by a firewall or proxy.
		FailedToConnectToLicenseServerAndSendData = -10003,

		/// cannot receive data from the licensing server, check firewall/proxy server
		FailedToConnectToLicenseServerAndReceiveData = -10004,

		/// data from licensing server is corrupted, try again, check connection
		DataFromLicenseServerIsCorrupt = -10005,

		/// the license has expired
		LicenseHasExpired = -10006,

		/// the license data is corrupted, please reinstall the license key
		LicenseIsInvalid = -10007,

		/// the license is not for this product, please contact licensing, and replace license key
		LicenseNotForThisProduct = -10008,

		/// no network card was found on the machine
		NoNetworkCardFound = -10009,

		/// could not decode license, it is corrupted
		LicenseDecodeFailed = -10010,

		/// the license is locked to another machine
		LicenseLockNotMatchingMachine = -10011,

		/// Connection to license server lost
		ConnectionToLicenseServerLost = -10012,

		/// could not decode license, it is corrupted
		LicenseHashDataCorrupt = -10013,

		/// the license is invalid, please contact licensing
		LicenseExpired = -10014,

		/// the license is locked to another machine
		LicenseNotLockedForThisMachine = -10020,

		/// your license requires latest Windows 10 version
		YourLicenseRequiresLatestWindows10 = -10024,

		/// Bad license request. Please reach out to SimplygonSupport[at]microsoft.com for support
		LicenseServerReturnedBadRequest = -10400,

		/// You are using an unknown license key. Please verify so you typed in the license key correctly and try again
		UnknownLicenseKey = -10404,

		/// You are using an inactive license key. Please reach out to SimplygonSales[at]microsoft.com for support
		LicenseIsNotActive = -10410,

		/// You have reached the maximum number of nodes for your license. After 48 hours of not using Simplygon on a machine the license will be released and can be installed on another machine
		MaxNodesReachForThisLicense = -10409,

		/// The license key you are using requires you to update to the latest version before you can use Simplygon
		YourLicenseRequiresLatestSimplygon = -10426,

		/// Bad license request. Please reach out to SimplygonSupport[at]microsoft.com for support
		LicenseServerReturnServerError = -10501
	};

	/// Status values returned from processing objects and pipelines.
	enum class EProcessStatus
	{
		/// The process finished with no error
		Finished = 0x00000000,

		/// The process was skipped, in most cases because of a missing or invalid object, or that there was nothing to process. See the log for details.
		Skipped = 0x00000001
	};

	/// GeometryValidationCodes are used by the Geometry Validation system to report errors in a setup geometry.
	enum class EGeometryValidationCodes
	{
		/// no error
		NoError = 0x00000000,

		/// a float is not a number
		NanFloat = 0x00000001,

		/// the triangle count is illegal (probably 0)
		IllegalTriangleCount = 0x00000002,

		/// the vertex count is illegal (probably 0)
		IllegalVertexCount = 0x00000004,

		/// the vertex indices are illegal
		IllegalIndices = 0x00000008,

		/// a found triangle has illegal index setup
		IllegalTriangle = 0x00000010,

		/// a field has illegal number of items
		IllegalFieldItemCount = 0x00000020,

		/// a field has illegal number of tuples
		IllegalFieldTupleCount = 0x00000040,

		/// a field has illegal size of tuples
		IllegalFieldTupleSize = 0x00000080,

		/// a field has illegal values (probably an index out of bounds)
		IllegalFieldItemValue = 0x00000100,

		/// a found triangle has no area
		ZeroAreaTriangle = 0x00000200,

		/// the skinning field has illegal values (probably an index out of bounds)
		IllegalBoneTupleSize = 0x00000400,

		/// there is a missing object in the scene/geometry that should never be missing
		MissingObject = 0x00000800,

		/// a found bone is illegal within the scene
		IllegalBone = 0x00001000,

		/// a normal has zero length
		ZeroLengthNormal = 0x00002000,

		/// a float is too large for reliable arithmetic
		LargeFloat = 0x00004000,

		/// a float is too small and denormal
		DenormalFloat = 0x00008000,

		/// a node has an illegal GUID
		IllegalSceneNodeGuid = 0x00010000
	};

	/// StopCondition determines if the processing will stop when any or all of the set targets have been hit.
	enum class EStopCondition
	{
		/// Simplygon will stop as soon as one of the reduction targets has been fulfilled.
		Any = 0x00000000,

		/// Simplygon will continue processing until all of the reduction targets have been fulfilled.
		All = 0x00000001
	};

	/// ReductionHeuristics decides how precise calculations Simplygon will do during the optimization of the Scene.
	enum class EReductionHeuristics
	{
		/// Faster but with less precise calculations.
		Fast = 0x00000000,

		/// Slower but more accurate.
		Consistent = 0x00000001
	};

	/// DataCreationPreferences specifies how big freedom Simplygon has when it comes to altering vertex/triangle data. Allowing more altered data means it will be easier to create good looking LODs, but without altered data it will be easier to keep the memory-usage in the LOD-chain more optimized.
	enum class EDataCreationPreferences
	{
		/// Vertex and Corner data such as coordinates and normals will be completely re-used from the original Scene.
		OnlyUseOriginalData = 0x00000000,

		/// Vertex coordinates will remaining as they were in the original Scene, but corner normals might be changed if Simplygon decided it will look better.
		PreferOriginalData = 0x00000001,

		/// Both vertex coordinates and corner normals will be altered to make the optimized Scene look as good as possible.
		PreferOptimizedResult = 0x00000002
	};

	/// This is used when fetching data from the original Scene to the Remeshed scene, for data such as textures, vertex colors and skinning.
	enum class ESurfaceTransferMode
	{
		/// Faster but with less precise calculations.
		Fast = 0x00000000,

		/// Slower and more accurate.
		Accurate = 0x00000001
	};

	/// The fill mode determines what to do with the pixels that remain unfilled after both the casting and dilation has been performed.
	enum class EAtlasFillMode
	{
		/// linearly interpolate the closest samples
		Interpolate = 0x00000000,

		/// use the closest available pixel value without interpolation
		NearestNeighbor = 0x00000001,

		/// Do not fill remaining pixels
		NoFill = 0x00000002
	};

	/// DitherPatterns are used to set the dithering type to use when generating images.
	enum class EDitherPatterns
	{
		/// Use no dithering
		NoDither = 0x00000000,

		/// Use Floyd-Steinberg dithering
		FloydSteinberg = 0x00000001,

		/// Use Jarvis, Judice, and Ninke dithering
		JarvisJudiceNinke = 0x00000002,

		/// Use Sierra-3 (three row) dithering
		Sierra = 0x00000003
	};

	/// This decides whether an occlusion mesh generated with the corresponding setting is larger or smaller than the input mesh.
	enum class EOcclusionMode
	{
		/// The output mesh will be an occluder, ie. always smaller than the input mesh.
		Occluder = 0x00000000,

		/// The output mesh will be an occludee, ie. always larger than the input mesh.
		Occludee = 0x00000001,

		/// The output mesh will be the same size as the input, ie. appropriate for things like off-screen shadows.
		Standard = 0x00000002
	};

	/// TangentSpaceMethod is used to specify which tangent space method is used to generate tangent spaces when processing. Use OrthonormalLeftHanded to generate tangents that are D3D compatible (left-handed coordinate system).
	enum class ETangentSpaceMethod
	{
		/// Standard method, creates an orthonormal tangent space (right-handed)
		OrthonormalRightHanded = 0x00000000,

		/// 3dsMax compatible method, creates tangent space that is compatible with the 3dsMax renderer
		Autodesk3dsMax = 0x00000001,

		/// Creates an orthonormal tangent space (left-handed, D3D compatible)
		OrthonormalLeftHanded = 0x00000002,

		/// Creates a tangent space using the MikkTSpace tangent space generation algorithm.
		MikkTSpace = 0x00000003
	};

	/// Validation level is used to specify how often validation is done on geometries when debugging integrations.
	enum class EValidationFrequency
	{
		/// Normal level, validation will hardly be noticeable at all
		Normal = 0x00000000,

		/// Core debugging level, validation will be carried out before each processing step, and increase processing times significantly
		Core = 0x00000001,

		/// Ultra level, validation will be carried out very often, multiple times per processing step. This will increase processing times with orders of magnitudes.
		Ultra = 0x00000002
	};

	/// TextureBlendType specifies which type of blend function to use to blend textures. The blend type function will be used while casting channels during material casting.
	enum class ETextureBlendType
	{
		/// 
		Replace = 0x00000000,

		/// 
		Add = 0x00000001,

		/// 
		Subtract = 0x00000002,

		/// 
		Multiply = 0x00000003,

		/// 
		Alpha = 0x00000004,

		/// 
		PreMultipliedAlpha = 0x00000005,

		/// 
		Over = 0x00000006,

		/// 
		In = 0x00000007,

		/// 
		Out = 0x00000008,

		/// 
		AddWAlpha = 0x00000009,

		/// 
		SubtractWAlpha = 0x0000000A,

		/// 
		MultiplyWAlpha = 0x0000000B
	};

	/// TextureWrapMode specifies which wrap mode will be used for the texture sampling in a specific texture node when casting.
	enum class ETextureWrapMode
	{
		/// 
		Wrap = 0x00000000,

		/// 
		Clamp = 0x00000001,

		/// 
		Mirror = 0x00000002
	};

	/// MaterialBlendMode specifies which type of blend function to use to blend materials. The blend mode function will be used while blending layers during material casting.
	enum class EMaterialBlendMode
	{
		/// Treat the material as fully opaque. Any opacity channel will be ignored.
		Opaque = 0x00000000,

		/// Use the opacity channel as a mask. Opacity values equal or greater than the opacity cutoff will yield opaque pixels, and opacity values less than the opacity cutoff will yield fully transparent pixels.
		Mask = 0x00000001,

		/// Opacity values will be used to perform an alpha blend, final_color = (source_color * alpha) + (destination_color * (1 - alpha)).
		Blend = 0x00000002
	};

	/// EImageInputFormat specifies input image file formats
	enum class EImageInputFormat
	{
		/// and unknown or unsupported file format
		Unsupported = -1,

		/// 
		BMP = 0,

		/// 
		DDS = 1,

		/// 
		GIF = 2,

		/// 
		JPEG = 3,

		/// 
		PNG = 4,

		/// 
		TGA = 5,

		/// 
		TIFF = 6,

		/// 
		PSD = 7
	};

	/// EImageOutputFormat specifies output image file formats
	enum class EImageOutputFormat
	{
		/// 
		BMP = 0,

		/// 
		DDS = 1,

		/// 
		JPEG = 2,

		/// 
		PNG = 3,

		/// 
		TGA = 4,

		/// 
		TIFF = 5
	};

	/// DDSCompressionType specifies compression types for DDS image files
	enum class EDDSCompressionType
	{
		/// 
		NoCompression = -1,

		/// 
		BC1 = 0,

		/// 
		BC2 = 1,

		/// 
		BC3 = 2,

		/// 
		BC4 = 3,

		/// 
		BC5 = 4
	};

	/// TexcoordGeneratorType specifies which method generates the texture coords
	enum class ETexcoordGeneratorType
	{
		/// Texture coordinates are generated from scratch based on the geometry.
		Parameterizer = 0x00000000,

		/// Texture coordinates are generated based on the original texture coordinates.
		ChartAggregator = 0x00000001
	};

	/// ChartAggregatorMode specifies in which manner the output UV chart size will depend on the input.
	enum class EChartAggregatorMode
	{
		/// Aggregated UV charts will be scaled to keep their relative pixel density relative to all other UV charts. The user can still set the size of the output texture maps.
		TextureSizeProportions = 0x00000000,

		/// Aggregated UV charts will have their size set based on its actual geometrical size.
		SurfaceArea = 0x00000001,

		/// The combined atlas will be resized to fit each chart so that all charts retain the same amount of pixels as they originally had. This will override any manually set texture size.
		OriginalPixelDensity = 0x00000002,

		/// Aggregated UV charts will have their size set based on its original UV size, disregarding the size of the texture they are used in.
		UVSizeProportions = 0x00000003
	};

	/// If multiple UV charts overlap and have the same material, SurfaceAreaScale specifies which of those instances determines the the output scale. It is only valid when the ChartAggregatorMode is SurfaceArea and SeparateOverlappingCharts is false.
	enum class ESurfaceAreaScale
	{
		/// If multiple UV charts overlap and have the same material, the largest instance determines the output scale. It is only valid when the ChartAggregatorMode is SurfaceArea and SeparateOverlappingCharts is false.
		LargestInstance = 0x00000000,

		/// If multiple UV charts overlap and have the same material, the smallest instance determines the output scale. It is only valid when the ChartAggregatorMode is SurfaceArea and SeparateOverlappingCharts is false.
		SmallestInstance = 0x00000001,

		/// If multiple UV charts overlap and have the same material, the average of all the instances determine the output scale. It is only valid when the ChartAggregatorMode is SurfaceArea and SeparateOverlappingCharts is false.
		Average = 0x00000002
	};

	/// FlipFacesAndNormals specifies how faces and normals should be flipped.
	enum class EFlipFacesAndNormals
	{
		/// Don't flip.
		NoFlip = 0x00000000,

		/// Automatically detect and fix backfaces per part.
		Automatic = 0x00000001,

		/// Append inverted winded triangles with inverted normals to the geometry.
		MakeDoubleSided = 0x00000002,

		/// Invert the winding of the triangles.
		InvertFaces = 0x00000003,

		/// Invert the vertex normals.
		InvertNormals = 0x00000004,

		/// Invert winding of all triangles and vertex normals.
		InvertFacesAndNormals = 0x00000005
	};

	/// CameraType specifies the camera used when rendering/computing visibility.
	enum class ECameraType
	{
		/// Perspective cameras have a field of view.
		Perspective = 0x00000000,

		/// Orthographic cameras have a size.
		Orthographic = 0x00000001,

		/// Omnidirectional cameras view all directions.
		Omnidirectional = 0x00000002
	};

	/// ComputeVisibilityMode specifies which type of renderer to use when computing visibility.
	enum class EComputeVisibilityMode
	{
		/// Use DirectX when computing visibility.
		DirectX = 0x00000000,

		/// Use a software renderer when computing visibility.
		Software = 0x00000001
	};

	/// MaterialType specifies the type of material. Certain materials might use specialized shaders.
	enum class EMaterialType
	{
		/// Use the standard shader.
		Standard = 0x00000000,

		/// Use the flipbook shader.
		Flipbook = 0x00000001,

		/// Use the billboard cloud shader.
		BillboardCloud = 0x00000002
	};

	/// SettingValueType is used to denote which data type a setting expects.
	enum class ESettingValueType
	{
		/// Invalid settings value type.
		Invalid = 0x00000000,

		/// Bool settings type.
		Bool = 0x00000001,

		/// Int settings type.
		Int = 0x00000002,

		/// Unsigned int settings type.
		Uint = 0x00000003,

		/// Double floating point settings type.
		Double = 0x00000004,

		/// String settings type.
		String = 0x00000005,

		/// EPipelineRunMode settings type.
		EPipelineRunMode = 0x00000006,

		/// EChartAggregatorMode settings type.
		EChartAggregatorMode = 0x00000008,

		/// ETexcoordGeneratorType settings type.
		ETexcoordGeneratorType = 0x00000009,

		/// EOcclusionMode settings type.
		EOcclusionMode = 0x0000000A,

		/// EStopCondition settings type.
		EStopCondition = 0x0000000B,

		/// EDataCreationPreferences settings type.
		EDataCreationPreferences = 0x0000000C,

		/// EReductionHeuristics settings type.
		EReductionHeuristics = 0x0000000D,

		/// EWeightsFromColorMode settings type.
		EWeightsFromColorMode = 0x0000000E,

		/// ESurfaceTransferMode settings type.
		ESurfaceTransferMode = 0x0000000F,

		/// ERemeshingMode settings type.
		ERemeshingMode = 0x00000010,

		/// ETangentSpaceMethod settings type.
		ETangentSpaceMethod = 0x00000011,

		/// EGeometryDataFieldType settings type.
		EGeometryDataFieldType = 0x00000012,

		/// EAtlasFillMode settings type.
		EAtlasFillMode = 0x00000013,

		/// EDitherPatterns settings type.
		EDitherPatterns = 0x00000014,

		/// EComputeVisibilityMode settings type.
		EComputeVisibilityMode = 0x00000015,

		/// ESurfaceAreaScale settings type.
		ESurfaceAreaScale = 0x00000016,

		/// EImpostorType settings type.
		EImpostorType = 0x00000017,

		/// ESymmetryAxis settings type.
		ESymmetryAxis = 0x00000018,

		/// EPixelFormat settings type.
		EPixelFormat = 0x00000019,

		/// EColorComponent settings type.
		EColorComponent = 0x0000001A,

		/// EHoleFilling settings type.
		EHoleFilling = 0x0000001B,

		/// EImageInputFormat settings type.
		EImageInputFormat = 0x0000001C,

		/// EImageOutputFormat settings type.
		EImageOutputFormat = 0x0000001D,

		/// EDDSCompressionType settings type.
		EDDSCompressionType = 0x0000001E,

		/// EBillboardMode settings type.
		EBillboardMode = 0x0000001F,

		/// EOpacityType settings type.
		EOpacityType = 0x00000020,

		/// EInputSceneValidationActionType settings type.
		EInputSceneValidationActionType = 0x00000021
	};

	/// Run modes for pipelines
	enum class EPipelineRunMode
	{
		/// Run the pipeline in this process
		RunInThisProcess = 0,

		/// Run the pipeline in a new process using the batch executor tool
		RunInNewProcess = 1,

		/// Run the pipeline distributed using SimplygonGrid
		RunDistributedUsingSimplygonGrid = 2,

		/// Run the pipeline distributed using IncrediBuild
		RunDistributedUsingIncredibuild = 3,

		/// Run the pipeline distributed using Fastbuild
		RunDistributedUsingFastbuild = 4
	};

	/// Defines the field types in GeometryData, and in the GeometryDataCaster for casting fields into textures.
	enum class EGeometryDataFieldType
	{
		/// Per-vertex coordinate data, xyz values (3 items per tuple)
		Coords = 0,

		/// Per-corner texture coords data, uv values (2 items per tuple)
		TexCoords = 1,

		/// Per-corner vertex normals data, xyz values (3 items per tuple)
		Normals = 2,

		/// Per-corner vertex tangent data, xyz values (3 items per tuple)
		Tangents = 3,

		/// Per-corner vertex bitangent data, xyz values (3 items per tuple)
		Bitangents = 4,

		/// Per-corner vertex color data, rgba values (4 items per tuple)
		Colors = 5,

		/// Per-triangle triangle ids, id values, not interpolated. (1 item per tuple)
		TriangleIds = 6,

		/// Per-triangle material ids, id values, not interpolated. (1 item per tuple)
		MaterialIds = 7
	};

	/// WeightsFromColorMode defines how to map vertex colors to vertex weights
	enum class EWeightsFromColorMode
	{
		/// Maps color intensity [0-1] to vertex weight [1/Multiplier - Multiplier]
		Standard = 0,

		/// Maps color intensity [0-1] to vertex weight [1 - Multiplier]
		High = 1,

		/// Maps color intensity [0-1] to vertex weight [1/Multiplier - 1]
		Low = 2
	};

	/// RemeshingMode defines if the remeshing processor remeshes the outside or the inside of the input geometry. MergeDistance / MergeBoldness only works with the RemeshingMode: Outside
	enum class ERemeshingMode
	{
		/// Automatically remeshes the outside of the geometry.
		Outside = 0,

		/// Automatically remeshes the largest inside space of the geometry
		Inside = 1,

		/// User defines a position in space that will be considered as outside for the purposes of the remeshing. Position is set with RemeshingModeManualPosition
		Manual = 2
	};

	/// HoleFilling defines how aggressively the remesher will fill holes and cavities.
	enum class EHoleFilling
	{
		/// No hole filling.
		Disabled = 0,

		/// Minor hole filling.
		Low = 1,

		/// Moderate amounts of hole filling.
		Medium = 2,

		/// Aggressive hole filling.
		High = 3
	};

	/// ImpostorType specifies which type of impostor should be generated by the ImpostorProcessor.
	enum class EImpostorType
	{
		/// Generates a set of billboards that represents the scene.
		BillboardCloud = 0x00000000,

		/// Renders the scene from a number of views and generates an atlas with the images.
		Flipbook = 0x00000001,

		/// Generates an impostor from a single view.
		FromSingleView = 0x00000003
	};

	/// SymmetryAxis specifies axis used for symmetry calculations in the ReductionProcessor.
	enum class ESymmetryAxis
	{
		/// X axis.
		X = 0x00000000,

		/// Z axis.
		Y = 0x00000001,

		/// Z axis.
		Z = 0x00000002
	};

	/// Pixel format used for material casting.
	enum class EPixelFormat
	{
		/// RGBA color channels with 8 bit depth per color channel
		R8G8B8A8 = 0x00000000,

		/// RGB color channels with 8 bit depth per color channel
		R8G8B8 = 0x00000001,

		/// R color channel with 8 bit depth per color channel
		R8 = 0x00000002,

		/// RGBA color channels with 16 bit depth per color channel
		R16G16B16A16 = 0x00000003,

		/// RGB color channels with 16 bit depth per color channel
		R16G16B16 = 0x00000004,

		/// R color channel with 16 bit depth per color channel
		R16 = 0x00000005,

		/// RGBA color channels with 32 bit depth floating point per color channel
		R32G32B32A32F = 0x00000006
	};

	/// Color component.
	enum class EColorComponent
	{
		/// Red color component
		Red = 0x00000000,

		/// Green color component
		Green = 0x00000001,

		/// Blue color component
		Blue = 0x00000002,

		/// Alpha color component
		Alpha = 0x00000003
	};

	/// Shader language used in shading network generation.
	enum class EShaderLanguage
	{
		/// HLSL 4.0
		HLSL_4_0 = 0,

		/// GLSL 4.0
		GLSL_4_0 = 1
	};

	/// 
	enum class EBillboardMode
	{
		/// Prioritize fitting the impostors to the exterior hull of the scene. Better for solid/opaque meshes like buildings/vehicles.
		OuterShell = 0x00000000,

		/// The impostors fit to the entire volume of the scene. Better for chaotic meshes that has lots of geometry within its volume, like vegetation.
		Foliage = 0x00000001
	};

	/// 
	enum class EOpacityType
	{
		/// The level of transparency is defined from 0.0->1.0, where 0.0 is fully transparent and 1.0 is fully opaque.
		Opacity = 0,

		/// The level of transparency is defined from 1.0->0.0, where 1.0 is fully transparent and 0.0 is fully opaque.
		Transparency = 1
	};

	/// Bit mask for additional information to add when writing to the log
	enum class ELogDecoration
	{
		/// Show no decorations in log
		NoDecorations = 0x00000000,

		/// Show timestamp decoration in log
		Timestamp = 0x00000001,

		/// Show thread id decoration in log
		Thread = 0x00000002,

		/// Show category decoration in log
		Category = 0x00000004,

		/// Show all decorations in log
		AllDecorations = 0x00000007
	};
	inline unsigned int operator| (ELogDecoration a, ELogDecoration b) noexcept
	{
		return static_cast<unsigned int>(a) | static_cast<unsigned int>(b);
	}
	inline unsigned int operator| (unsigned int a, ELogDecoration b) noexcept
	{
		return a | static_cast<unsigned int>(b);
	}

	/// How verbose the log should be. The higher level, the more verbose log.
	enum class ELogLevel
	{
		/// Only log fatal errors
		Fatal = 0,

		/// Log all errors
		Error = 10,

		/// Warning log level
		Warning = 20,

		/// Info log level
		Info = 30,

		/// Debug log level
		Debug = 40
	};

	/// Enumeration on how Simplygon should handle invalid input scenes in processors, exporters and pipelines.
	enum class EInputSceneValidationActionType
	{
		/// Ignore any error in the input scene and assumes the scene is valid. This might give a performance boost, but will cause crashes if the input scene is invalid.
		Ignore = 0,

		/// Logs all fatal errors in the input scene. This will not fix any issues in the scene, but will log the issues with suggestions on how to fix them.
		LogOnlyFatal = 1,

		/// Logs all found errors in the input scene. This will not fix any issues in the scene, but will log the issues with suggestions on how to fix them.
		LogAll = 2,

		/// Logs all found errors in the input scene. Skips the process if the input scene is invalid, and returns without processing. This allows the executing process to continue with other scenes.
		Skip = 3,

		/// Logs all found errors in the input scene, and returns an error if the scene is invalid. This is akin to "Treat warning as error", and is the safest way to process.
		RaiseError = 4
	};

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_AMBIENT = "Ambient";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_DIFFUSE = "Diffuse";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_SPECULAR = "Specular";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_SHININESS = "Shininess";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_OPACITY = "Opacity";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_EMISSIVE = "Emissive";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_NORMALS = "Normals";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_GROUPIDS = "GroupIds";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_DISPLACEMENT = "Displacement";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_BASECOLOR = "Basecolor";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_ROUGHNESS = "Roughness";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_METALNESS = "Metalness";

	/// The SG_MATERIAL_CHANNEL_[...] defines the default names of standard material textures in Simplygon.
	static const char * SG_MATERIAL_CHANNEL_OCCLUSION = "Occlusion";

	/// The SG_IMAGEDATA_FORMAT_[...] defines the default names of standard image formats in Simplygon. L is a grayscale light
	static const char * SG_IMAGEDATA_FORMAT_L = "L";

	/// The SG_IMAGEDATA_FORMAT_[...] defines the default names of standard image formats in Simplygon. RGB is 3-component red, green, blue
	static const char * SG_IMAGEDATA_FORMAT_RGB = "RGB";

	/// The SG_IMAGEDATA_FORMAT_[...] defines the default names of standard image formats in Simplygon. RGBA is 4-component red, green, blue, alpha
	static const char * SG_IMAGEDATA_FORMAT_RGBA = "RGBA";

	/// The maximum number of texture channels supported within Simplygon.
	static const unsigned int SG_NUM_SUPPORTED_TEXTURE_CHANNELS = 256;

	/// The maximum number of color channels supported within Simplygon.
	static const unsigned int SG_NUM_SUPPORTED_COLOR_CHANNELS = 256;

	/// The maximum number of bones that can be references by one vertex within Simplygon.
	static const unsigned int SG_NUM_SUPPORTED_BONES_PER_VERTEX = 16;

	/// The maximum number of mapping layers that are supported internally by Simplygon
	static const unsigned int SG_NUM_SUPPORTED_MAPPING_LAYERS = 32;

	/// The maximum number of inputs that can be connected to any custom node within Simplygon
	static const unsigned int SG_NUM_SUPPORTED_CUSTOM_NODE_INPUTS = 16;

	/// The maximum size of shader output that can be generated by a custom node within Simplygon
	static const unsigned int SG_SUPPORTED_CUSTOM_NODE_SHADER_CODE_SIZE = 2048;

	/// The maximum value allowed for any of the reduction importance multipliers/values
	static const float SG_MAXIMUM_IMPORTANCE_VALUE = (float)10;

	/// The maximum number of input materials that the mapping image caster supports
	static const unsigned int SG_MAXIMUM_MAPPING_IMAGE_INPUT_MATERIAL_COUNT = 1024;

	/// The maximum number of output materials that the mapping image caster supports
	static const unsigned int SG_MAXIMUM_MAPPING_IMAGE_OUTPUT_MATERIAL_COUNT = 1024;

	/// The maximum number of output materials that the parameterizer supports
	static const unsigned int SG_MAXIMUM_PARAMETERIZER_OUTPUT_MATERIAL_COUNT = 1024;

	/// The maximum number of output materials that the chart aggregator supports
	static const unsigned int SG_MAXIMUM_CHART_AGGREGATOR_OUTPUT_MATERIAL_COUNT = 1024;



	// forward declarations
    class ISimplygon;
    class IObject; 
    class Observer;
    class ErrorHandler;
	class APIInterfacePtrs;

	/** 
	 * rhandle, hIntf and hRMem are used to represent opaque handles returned from and used by the API
	 */
	typedef void* rhandle;
    typedef void* hIntf;
    typedef void* hRMem;

	/** 
     * Empty is an empty value that any of the sp-interfaces can be set to to clear the interface to empty
	 */
#ifndef SWIG
	static const struct _NilStruct { void* bval = nullptr; } NullPtr;
#endif//SWIG

	/** 
	 * rid represents ids within the API
	 */
	typedef int rid;

	/**
	 * real represents generic floating point values, depending on API floating point
	 * precision version, reals are either typedef:ed as floats or doubles
	 */
	typedef float real;
	const real REAL_MIN = 1.175494351e-38F;
	const real REAL_MAX = 3.402823466e+38F;

	struct ColorStruct
	{
		real r;	
		real g;	
		real b;	
		real a;	
	};





#ifndef SWIG

	class APIAccessor
	{
	private:
		const APIInterfacePtrs* sgapi = nullptr;
		hIntf sghandle = nullptr;

	public:
		~APIAccessor();

		void AddRef();
		void Release();
		void ReplaceAccessor( const APIInterfacePtrs *_sgapi , hIntf _sghandle );

		const APIInterfacePtrs* GetAPI() const { return this->sgapi; };
		hIntf GetHandle() const { return this->sghandle; }
	};

#endif//SWIG

	class ObserverBase
	{
		public:
		virtual ~ObserverBase() {}

#ifndef SWIG
		enum EventCode
		{
			Progress = 1,
			ProcessStarted = 2,
			ShadingCustomNodeEvaluate = 3,
			ShadingCustomNodeGenerateShaderCode = 4
		};
	
		struct ProgressData
		{
			real Progress;
			bool ContinueRunning;
		};
	
		struct ProcessStartedData
		{
			const char* Name; 
		};
	
		struct ShadingCustomNodeEvaluateData
		{
			ColorStruct Color;
		};

		struct ShadingCustomNodeGenerateShaderCodeData
		{
			EShaderLanguage ShaderLanguage;
			bool WasGenerated;
		};

		virtual bool HandleEventBase( EventCode event , hIntf subject , void *data ) = 0;
#endif//SWIG
	};		

	class ErrorHandlerBase
	{
		public:
		virtual ~ErrorHandlerBase() {}

#ifndef SWIG
		virtual void HandleErrorBase( hIntf object , const char *interfaceName , const char *methodName , rid errorType , const char *errorText ) = 0;
#endif//SWIG
	};		

	// function pointer defines for interface: ReturnData
	typedef void ( __stdcall *FP_ReturnData_AddRef)( hRMem _retmemptr );
	typedef void ( __stdcall *FP_ReturnData_Release)( hRMem _retmemptr );
	typedef unsigned int ( __stdcall *FP_ReturnData_GetByteSize)( hRMem _retmemptr );
	typedef void * ( __stdcall *FP_ReturnData_GetRawPointer)( hRMem _retmemptr );

	// function pointer defines for interface: Object
	typedef hRMem ( __stdcall *FP_Object_GetClass)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_Object_IsA)( hIntf _interfaceptr , const char *type );
	typedef void ( __stdcall *FP_Object_PrintInfo)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Object_AddRef)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Object_Release)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Object_SetName)( hIntf _interfaceptr , const char *name );
	typedef hRMem ( __stdcall *FP_Object_GetName)( hIntf _interfaceptr );
	typedef rid ( __stdcall *FP_Object_AddObserver)( hIntf _interfaceptr , Observer *observer );
	typedef void ( __stdcall *FP_Object_RemoveObserver)( hIntf _interfaceptr , rid observerId );
	typedef void * ( __stdcall *FP_Object_GetUserComponentArea)( hIntf _interfaceptr , rid userid );
	typedef void ( __stdcall *FP_Object_SetUserData)( hIntf _interfaceptr , const char* name, const void* data, unsigned int size );
	typedef void * ( __stdcall *FP_Object_GetUserData)( hIntf _interfaceptr , const char* name );

	typedef void * ( __stdcall *FP_Simplygon_RegisterAccessor)( APIAccessor *accessor );
	typedef void * ( __stdcall *FP_Simplygon_UnregisterAccessor)( APIAccessor *accessor );
	typedef hIntf ( __stdcall *FP_Array_NewCopy)( hIntf _interfaceptr , bool copy_data );
	typedef hIntf ( __stdcall *FP_Array_NewPackedCopy)( hIntf _interfaceptr , hIntf index_array );
	typedef void ( __stdcall *FP_Array_DeepCopy)( hIntf _interfaceptr , hIntf source );
	typedef void ( __stdcall *FP_Array_IndexedCopy)( hIntf _interfaceptr , hIntf source , hIntf idtable , rid startId );
	typedef void ( __stdcall *FP_Array_SetTupleSize)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Array_GetTupleSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Array_SetItemCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Array_GetItemCount)( hIntf _interfaceptr );
	typedef rid ( __stdcall *FP_Array_GetMaxItemId)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Array_Clear)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_Array_IsEmpty)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Array_SetTupleCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Array_GetTupleCount)( hIntf _interfaceptr );
	typedef rid ( __stdcall *FP_Array_GetMaxTupleId)( hIntf _interfaceptr );
	typedef EBaseTypes ( __stdcall *FP_Array_GetBaseType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Array_AppendArray)( hIntf _interfaceptr , hIntf source );
	typedef void ( __stdcall *FP_Array_ExtractTuples)( hIntf _interfaceptr , hIntf dest , rid start , unsigned int count );
	typedef void ( __stdcall *FP_Array_CopyTuple)( hIntf _interfaceptr , hIntf sourceArray , rid dest_id , rid src_id );
	typedef int ( __stdcall *FP_Array_CompareTuples)( hIntf _interfaceptr , hIntf otherArray , rid tuple_id , rid other_tuple_id );
	typedef void ( __stdcall *FP_Array_CopyRange)( hIntf _interfaceptr , hIntf source_array , rid start_dest_id , rid start_src_id , unsigned int count );
	typedef void ( __stdcall *FP_Array_SetAlternativeName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_Array_GetAlternativeName)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_ValueArray_SetRealItem)( hIntf _interfaceptr , rid id , real value );
	typedef real ( __stdcall *FP_ValueArray_GetRealItem)( hIntf _interfaceptr , rid id );

	// function pointer defines for interface: BoolArray
	typedef hIntf ( __stdcall *FP_CreateBoolArray)();
	typedef void ( __stdcall *FP_BoolArray_AddItem)( hIntf _interfaceptr , bool value );
	typedef void ( __stdcall *FP_BoolArray_SetItem)( hIntf _interfaceptr , rid id , bool value );
	typedef bool ( __stdcall *FP_BoolArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_BoolArray_AddTuple)( hIntf _interfaceptr , const bool *tuple );
	typedef void ( __stdcall *FP_BoolArray_SetTuple)( hIntf _interfaceptr , rid id , const bool *tuple );
	typedef hRMem ( __stdcall *FP_BoolArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_BoolArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_BoolArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_BoolArray_SetData)( hIntf _interfaceptr , const bool *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_BoolArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const bool *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_BoolArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: CharArray
	typedef hIntf ( __stdcall *FP_CreateCharArray)();
	typedef void ( __stdcall *FP_CharArray_AddItem)( hIntf _interfaceptr , char value );
	typedef void ( __stdcall *FP_CharArray_SetItem)( hIntf _interfaceptr , rid id , char value );
	typedef char ( __stdcall *FP_CharArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_CharArray_AddTuple)( hIntf _interfaceptr , const char *tuple );
	typedef void ( __stdcall *FP_CharArray_SetTuple)( hIntf _interfaceptr , rid id , const char *tuple );
	typedef hRMem ( __stdcall *FP_CharArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_CharArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_CharArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_CharArray_SetData)( hIntf _interfaceptr , const char *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_CharArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const char *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_CharArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: DoubleArray
	typedef hIntf ( __stdcall *FP_CreateDoubleArray)();
	typedef void ( __stdcall *FP_DoubleArray_AddItem)( hIntf _interfaceptr , double value );
	typedef void ( __stdcall *FP_DoubleArray_SetItem)( hIntf _interfaceptr , rid id , double value );
	typedef double ( __stdcall *FP_DoubleArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_DoubleArray_AddTuple)( hIntf _interfaceptr , const double *tuple );
	typedef void ( __stdcall *FP_DoubleArray_SetTuple)( hIntf _interfaceptr , rid id , const double *tuple );
	typedef hRMem ( __stdcall *FP_DoubleArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_DoubleArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_DoubleArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_DoubleArray_SetData)( hIntf _interfaceptr , const double *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_DoubleArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const double *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_DoubleArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: FloatArray
	typedef hIntf ( __stdcall *FP_CreateFloatArray)();
	typedef void ( __stdcall *FP_FloatArray_AddItem)( hIntf _interfaceptr , float value );
	typedef void ( __stdcall *FP_FloatArray_SetItem)( hIntf _interfaceptr , rid id , float value );
	typedef float ( __stdcall *FP_FloatArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_FloatArray_AddTuple)( hIntf _interfaceptr , const float *tuple );
	typedef void ( __stdcall *FP_FloatArray_SetTuple)( hIntf _interfaceptr , rid id , const float *tuple );
	typedef hRMem ( __stdcall *FP_FloatArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_FloatArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_FloatArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_FloatArray_SetData)( hIntf _interfaceptr , const float *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_FloatArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const float *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_FloatArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: IntArray
	typedef hIntf ( __stdcall *FP_CreateIntArray)();
	typedef void ( __stdcall *FP_IntArray_AddItem)( hIntf _interfaceptr , int value );
	typedef void ( __stdcall *FP_IntArray_SetItem)( hIntf _interfaceptr , rid id , int value );
	typedef int ( __stdcall *FP_IntArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_IntArray_AddTuple)( hIntf _interfaceptr , const int *tuple );
	typedef void ( __stdcall *FP_IntArray_SetTuple)( hIntf _interfaceptr , rid id , const int *tuple );
	typedef hRMem ( __stdcall *FP_IntArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_IntArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_IntArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_IntArray_SetData)( hIntf _interfaceptr , const int *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_IntArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const int *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_IntArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: LongArray
	typedef hIntf ( __stdcall *FP_CreateLongArray)();
	typedef void ( __stdcall *FP_LongArray_AddItem)( hIntf _interfaceptr , long value );
	typedef void ( __stdcall *FP_LongArray_SetItem)( hIntf _interfaceptr , rid id , long value );
	typedef long ( __stdcall *FP_LongArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_LongArray_AddTuple)( hIntf _interfaceptr , const long *tuple );
	typedef void ( __stdcall *FP_LongArray_SetTuple)( hIntf _interfaceptr , rid id , const long *tuple );
	typedef hRMem ( __stdcall *FP_LongArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_LongArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_LongArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_LongArray_SetData)( hIntf _interfaceptr , const long *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_LongArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const long *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_LongArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: RealArray
	typedef hIntf ( __stdcall *FP_CreateRealArray)();
	typedef void ( __stdcall *FP_RealArray_AddItem)( hIntf _interfaceptr , real value );
	typedef void ( __stdcall *FP_RealArray_SetItem)( hIntf _interfaceptr , rid id , real value );
	typedef real ( __stdcall *FP_RealArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_RealArray_AddTuple)( hIntf _interfaceptr , const real *tuple );
	typedef void ( __stdcall *FP_RealArray_SetTuple)( hIntf _interfaceptr , rid id , const real *tuple );
	typedef hRMem ( __stdcall *FP_RealArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_RealArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_RealArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_RealArray_SetData)( hIntf _interfaceptr , const real *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_RealArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const real *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_RealArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: RidArray
	typedef hIntf ( __stdcall *FP_CreateRidArray)();
	typedef void ( __stdcall *FP_RidArray_AddItem)( hIntf _interfaceptr , rid value );
	typedef void ( __stdcall *FP_RidArray_SetItem)( hIntf _interfaceptr , rid id , rid value );
	typedef rid ( __stdcall *FP_RidArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_RidArray_AddTuple)( hIntf _interfaceptr , const rid *tuple );
	typedef void ( __stdcall *FP_RidArray_SetTuple)( hIntf _interfaceptr , rid id , const rid *tuple );
	typedef hRMem ( __stdcall *FP_RidArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_RidArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_RidArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_RidArray_SetData)( hIntf _interfaceptr , const rid *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_RidArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const rid *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_RidArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: ShortArray
	typedef hIntf ( __stdcall *FP_CreateShortArray)();
	typedef void ( __stdcall *FP_ShortArray_AddItem)( hIntf _interfaceptr , short value );
	typedef void ( __stdcall *FP_ShortArray_SetItem)( hIntf _interfaceptr , rid id , short value );
	typedef short ( __stdcall *FP_ShortArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_ShortArray_AddTuple)( hIntf _interfaceptr , const short *tuple );
	typedef void ( __stdcall *FP_ShortArray_SetTuple)( hIntf _interfaceptr , rid id , const short *tuple );
	typedef hRMem ( __stdcall *FP_ShortArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_ShortArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_ShortArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_ShortArray_SetData)( hIntf _interfaceptr , const short *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_ShortArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const short *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_ShortArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: UnsignedCharArray
	typedef hIntf ( __stdcall *FP_CreateUnsignedCharArray)();
	typedef void ( __stdcall *FP_UnsignedCharArray_AddItem)( hIntf _interfaceptr , unsigned char value );
	typedef void ( __stdcall *FP_UnsignedCharArray_SetItem)( hIntf _interfaceptr , rid id , unsigned char value );
	typedef unsigned char ( __stdcall *FP_UnsignedCharArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_UnsignedCharArray_AddTuple)( hIntf _interfaceptr , const unsigned char *tuple );
	typedef void ( __stdcall *FP_UnsignedCharArray_SetTuple)( hIntf _interfaceptr , rid id , const unsigned char *tuple );
	typedef hRMem ( __stdcall *FP_UnsignedCharArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_UnsignedCharArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_UnsignedCharArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_UnsignedCharArray_SetData)( hIntf _interfaceptr , const unsigned char *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_UnsignedCharArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const unsigned char *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_UnsignedCharArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: UnsignedIntArray
	typedef hIntf ( __stdcall *FP_CreateUnsignedIntArray)();
	typedef void ( __stdcall *FP_UnsignedIntArray_AddItem)( hIntf _interfaceptr , unsigned int value );
	typedef void ( __stdcall *FP_UnsignedIntArray_SetItem)( hIntf _interfaceptr , rid id , unsigned int value );
	typedef unsigned int ( __stdcall *FP_UnsignedIntArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_UnsignedIntArray_AddTuple)( hIntf _interfaceptr , const unsigned int *tuple );
	typedef void ( __stdcall *FP_UnsignedIntArray_SetTuple)( hIntf _interfaceptr , rid id , const unsigned int *tuple );
	typedef hRMem ( __stdcall *FP_UnsignedIntArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_UnsignedIntArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_UnsignedIntArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_UnsignedIntArray_SetData)( hIntf _interfaceptr , const unsigned int *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_UnsignedIntArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const unsigned int *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_UnsignedIntArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: UnsignedLongArray
	typedef hIntf ( __stdcall *FP_CreateUnsignedLongArray)();
	typedef void ( __stdcall *FP_UnsignedLongArray_AddItem)( hIntf _interfaceptr , unsigned long value );
	typedef void ( __stdcall *FP_UnsignedLongArray_SetItem)( hIntf _interfaceptr , rid id , unsigned long value );
	typedef unsigned long ( __stdcall *FP_UnsignedLongArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_UnsignedLongArray_AddTuple)( hIntf _interfaceptr , const unsigned long *tuple );
	typedef void ( __stdcall *FP_UnsignedLongArray_SetTuple)( hIntf _interfaceptr , rid id , const unsigned long *tuple );
	typedef hRMem ( __stdcall *FP_UnsignedLongArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_UnsignedLongArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_UnsignedLongArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_UnsignedLongArray_SetData)( hIntf _interfaceptr , const unsigned long *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_UnsignedLongArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const unsigned long *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_UnsignedLongArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	// function pointer defines for interface: UnsignedShortArray
	typedef hIntf ( __stdcall *FP_CreateUnsignedShortArray)();
	typedef void ( __stdcall *FP_UnsignedShortArray_AddItem)( hIntf _interfaceptr , unsigned short value );
	typedef void ( __stdcall *FP_UnsignedShortArray_SetItem)( hIntf _interfaceptr , rid id , unsigned short value );
	typedef unsigned short ( __stdcall *FP_UnsignedShortArray_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_UnsignedShortArray_AddTuple)( hIntf _interfaceptr , const unsigned short *tuple );
	typedef void ( __stdcall *FP_UnsignedShortArray_SetTuple)( hIntf _interfaceptr , rid id , const unsigned short *tuple );
	typedef hRMem ( __stdcall *FP_UnsignedShortArray_GetTuple)( hIntf _interfaceptr , rid id );
	typedef hRMem ( __stdcall *FP_UnsignedShortArray_GetData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_UnsignedShortArray_GetDataRange)( hIntf _interfaceptr , rid start_tuple_id , unsigned int tuple_count );
	typedef void ( __stdcall *FP_UnsignedShortArray_SetData)( hIntf _interfaceptr , const unsigned short *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_UnsignedShortArray_SetDataRange)( hIntf _interfaceptr , rid start_tuple_id , const unsigned short *source_items , unsigned int source_item_count );
	typedef void ( __stdcall *FP_UnsignedShortArray_SetDataFromMemoryPtr)( hIntf _interfaceptr , void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride );

	typedef hIntf ( __stdcall *FP_ChunkedImageData_NewCopy)( hIntf _interfaceptr , bool copy_data );
	typedef void ( __stdcall *FP_ChunkedImageData_DeepCopy)( hIntf _interfaceptr , hIntf source , bool copy_data );
	typedef void ( __stdcall *FP_ChunkedImageData_SetTemplateImage)( hIntf _interfaceptr , hIntf _template );
	typedef unsigned int ( __stdcall *FP_ChunkedImageData_GetTemplateXSize)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ChunkedImageData_GetTemplateYSize)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ChunkedImageData_GetTemplateZSize)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ChunkedImageData_GetXSize)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ChunkedImageData_GetYSize)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ChunkedImageData_GetZSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChunkedImageData_Set1DSize)( hIntf _interfaceptr , unsigned int _xs );
	typedef void ( __stdcall *FP_ChunkedImageData_Set2DSize)( hIntf _interfaceptr , unsigned int _xs , unsigned int _ys );
	typedef void ( __stdcall *FP_ChunkedImageData_Set3DSize)( hIntf _interfaceptr , unsigned int _xs , unsigned int _ys , unsigned int _zs );
	typedef unsigned int ( __stdcall *FP_ChunkedImageData_GetTotalXSize)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ChunkedImageData_GetTotalYSize)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ChunkedImageData_GetTotalZSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChunkedImageData_Reset)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ChunkedImageData_LockChunk1D)( hIntf _interfaceptr , rid x );
	typedef hIntf ( __stdcall *FP_ChunkedImageData_LockChunk2D)( hIntf _interfaceptr , rid x , rid y );
	typedef hIntf ( __stdcall *FP_ChunkedImageData_LockChunk3D)( hIntf _interfaceptr , rid x , rid y , rid z );
	typedef bool ( __stdcall *FP_ChunkedImageData_IsChunkLocked1D)( hIntf _interfaceptr , rid x );
	typedef bool ( __stdcall *FP_ChunkedImageData_IsChunkLocked2D)( hIntf _interfaceptr , rid x , rid y );
	typedef bool ( __stdcall *FP_ChunkedImageData_IsChunkLocked3D)( hIntf _interfaceptr , rid x , rid y , rid z );
	typedef void ( __stdcall *FP_ChunkedImageData_UnlockChunk1D)( hIntf _interfaceptr , rid x );
	typedef void ( __stdcall *FP_ChunkedImageData_UnlockChunk2D)( hIntf _interfaceptr , rid x , rid y );
	typedef void ( __stdcall *FP_ChunkedImageData_UnlockChunk3D)( hIntf _interfaceptr , rid x , rid y , rid z );

	// function pointer defines for interface: DirectXRenderer
	typedef hIntf ( __stdcall *FP_CreateDirectXRenderer)();
	typedef bool ( __stdcall *FP_DirectXRenderer_CreatePreviewer)( hIntf _interfaceptr , int _width , int _height );
	typedef void ( __stdcall *FP_DirectXRenderer_RenderAlongCameraPathAndStorePics)( hIntf _interfaceptr , int cameraSelectionSetID , const char * file_name_base , const char * format );
	typedef void ( __stdcall *FP_DirectXRenderer_SetRenderWireFrameMode)( hIntf _interfaceptr , bool flag );
	typedef void ( __stdcall *FP_DirectXRenderer_SetBackgroundColor)( hIntf _interfaceptr , real r , real g , real b , real a );
	typedef hRMem ( __stdcall *FP_DirectXRenderer_GetBackgroundColor)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_DirectXRenderer_SetUseInMemoryShaderGeneration)( hIntf _interfaceptr , bool flag );
	typedef bool ( __stdcall *FP_DirectXRenderer_GetUseInMemoryShaderGeneration)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_DirectXRenderer_LoadGeometryData)( hIntf _interfaceptr , hIntf geom , hIntf materials );
	typedef bool ( __stdcall *FP_DirectXRenderer_LoadGeometryDataWithMaterialShadingNetwork)( hIntf _interfaceptr , hIntf _scene );
	typedef void ( __stdcall *FP_DirectXRenderer_SetScene)( hIntf _interfaceptr , hIntf _scene );
	typedef bool ( __stdcall *FP_DirectXRenderer_InitializeSceneRenderData)( hIntf _interfaceptr );

	typedef hIntf ( __stdcall *FP_FieldData_NewCopy)( hIntf _interfaceptr , bool copy_data );
	typedef hIntf ( __stdcall *FP_FieldData_NewPackedCopy)( hIntf _interfaceptr , hIntf index_array );
	typedef void ( __stdcall *FP_FieldData_DeepCopy)( hIntf _interfaceptr , hIntf source , bool copy_data );
	typedef bool ( __stdcall *FP_FieldData_IsSetupIdenticalTo)( hIntf _interfaceptr , hIntf other );
	typedef void ( __stdcall *FP_FieldData_IndexedCopy)( hIntf _interfaceptr , hIntf source , hIntf idtable , rid startId );
	typedef void ( __stdcall *FP_FieldData_IndexedCombine)( hIntf _interfaceptr , hIntf source , hIntf idtable , hIntf blendtable , rid startId );
	typedef void ( __stdcall *FP_FieldData_IndexedCombine3)( hIntf _interfaceptr , hIntf source , hIntf idtable , hIntf blendtable , rid startId );
	typedef void ( __stdcall *FP_FieldData_Clear)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FieldData_RemoveAllFields)( hIntf _interfaceptr );
	typedef int ( __stdcall *FP_FieldData_IsEmpty)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FieldData_AppendTuples)( hIntf _interfaceptr , hIntf other , bool add_missing_fields );
	typedef void ( __stdcall *FP_FieldData_ExtractTuples)( hIntf _interfaceptr , hIntf dest , rid start , unsigned int count );
	typedef void ( __stdcall *FP_FieldData_AddField)( hIntf _interfaceptr , hIntf field );
	typedef hIntf ( __stdcall *FP_FieldData_AddBaseTypeField)( hIntf _interfaceptr , EBaseTypes base_type , unsigned int tuple_size , const char * name );
	typedef hIntf ( __stdcall *FP_FieldData_GetField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_FieldData_GetFieldWithId)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_FieldData_RemoveField)( hIntf _interfaceptr , const char * name );
	typedef void ( __stdcall *FP_FieldData_SafeRemoveField)( hIntf _interfaceptr , const char * name );
	typedef unsigned int ( __stdcall *FP_FieldData_GetFieldCount)( hIntf _interfaceptr );
	typedef rid ( __stdcall *FP_FieldData_GetMaxFieldId)( hIntf _interfaceptr );
	typedef rhandle ( __stdcall *FP_FieldData_GetFirstFieldHandle)( hIntf _interfaceptr );
	typedef rhandle ( __stdcall *FP_FieldData_GetNextFieldHandle)( hIntf _interfaceptr , rhandle hand );
	typedef hIntf ( __stdcall *FP_FieldData_GetFieldWithHandle)( hIntf _interfaceptr , rhandle hand );
	typedef void ( __stdcall *FP_FieldData_SetTupleCount)( hIntf _interfaceptr , unsigned int tuplecount );
	typedef unsigned int ( __stdcall *FP_FieldData_GetTupleCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FieldData_AddTupleCount)( hIntf _interfaceptr , unsigned int tuplecount );
	typedef rid ( __stdcall *FP_FieldData_GetMaxTupleId)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FieldData_CopyTuple)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id );
	typedef void ( __stdcall *FP_FieldData_CopyCombineTuples)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha );
	typedef void ( __stdcall *FP_FieldData_CopyCombine3Tuples)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 );
	typedef void ( __stdcall *FP_FieldData_CopyRange)( hIntf _interfaceptr , hIntf source , rid start_dest_id , rid start_src_id , unsigned int count );

	// function pointer defines for interface: GeometryData
	typedef hIntf ( __stdcall *FP_CreateGeometryData)();
	typedef hIntf ( __stdcall *FP_GeometryData_NewCopy)( hIntf _interfaceptr , bool copy_data );
	typedef hIntf ( __stdcall *FP_GeometryData_NewPackedCopy)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_DeepCopy)( hIntf _interfaceptr , hIntf source , bool copy_data );
	typedef void ( __stdcall *FP_GeometryData_SetVertexCount)( hIntf _interfaceptr , unsigned int count );
	typedef unsigned int ( __stdcall *FP_GeometryData_GetVertexCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddVertices)( hIntf _interfaceptr , unsigned int count );
	typedef void ( __stdcall *FP_GeometryData_SetTriangleCount)( hIntf _interfaceptr , unsigned int count );
	typedef unsigned int ( __stdcall *FP_GeometryData_GetTriangleCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddTriangles)( hIntf _interfaceptr , unsigned int count );
	typedef void ( __stdcall *FP_GeometryData_FindEdgeIdsFromVertexPairs)( hIntf _interfaceptr , hIntf vertex_pairs , hIntf edge_ids );
	typedef hIntf ( __stdcall *FP_GeometryData_GetCoords)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddVertexLocks)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_RemoveVertexLocks)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_GeometryData_GetVertexLocks)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddBoneWeights)( hIntf _interfaceptr , unsigned int tuplesize );
	typedef void ( __stdcall *FP_GeometryData_RemoveBoneWeights)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_GeometryData_GetBoneWeights)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_GeometryData_GetBoneIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddVertexWeights)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_RemoveVertexWeights)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_GeometryData_GetVertexWeights)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddUserVertexField)( hIntf _interfaceptr , hIntf field );
	typedef void ( __stdcall *FP_GeometryData_RemoveUserVertexField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_GeometryData_GetUserVertexField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_GeometryData_AddBaseTypeUserVertexField)( hIntf _interfaceptr , EBaseTypes base_type , const char * name , unsigned int tuple_size );
	typedef void ( __stdcall *FP_GeometryData_CopyVertex)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id );
	typedef void ( __stdcall *FP_GeometryData_CopyCombineVertices)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha );
	typedef void ( __stdcall *FP_GeometryData_CopyCombine3Vertices)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 );
	typedef hIntf ( __stdcall *FP_GeometryData_GetVertices)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_GeometryData_GetVertexIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddTexCoords)( hIntf _interfaceptr , rid level );
	typedef rid ( __stdcall *FP_GeometryData_AddNamedTexCoords)( hIntf _interfaceptr , const char * alternative_name );
	typedef void ( __stdcall *FP_GeometryData_RemoveTexCoords)( hIntf _interfaceptr , rid level );
	typedef bool ( __stdcall *FP_GeometryData_RemoveNamedTexCoords)( hIntf _interfaceptr , const char * alternative_name );
	typedef hIntf ( __stdcall *FP_GeometryData_GetTexCoords)( hIntf _interfaceptr , rid level );
	typedef hIntf ( __stdcall *FP_GeometryData_GetNamedTexCoords)( hIntf _interfaceptr , const char * alternative_name );
	typedef void ( __stdcall *FP_GeometryData_AddTangents)( hIntf _interfaceptr , rid level );
	typedef void ( __stdcall *FP_GeometryData_RemoveTangents)( hIntf _interfaceptr , rid level );
	typedef hIntf ( __stdcall *FP_GeometryData_GetTangents)( hIntf _interfaceptr , rid level );
	typedef hIntf ( __stdcall *FP_GeometryData_GetBitangents)( hIntf _interfaceptr , rid level );
	typedef void ( __stdcall *FP_GeometryData_AddNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_RemoveNormals)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_GeometryData_GetNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddColors)( hIntf _interfaceptr , rid channel );
	typedef rid ( __stdcall *FP_GeometryData_AddNamedColors)( hIntf _interfaceptr , const char * alternative_name );
	typedef void ( __stdcall *FP_GeometryData_RemoveColors)( hIntf _interfaceptr , rid level );
	typedef bool ( __stdcall *FP_GeometryData_RemoveNamedColors)( hIntf _interfaceptr , const char * alternative_name );
	typedef hIntf ( __stdcall *FP_GeometryData_GetColors)( hIntf _interfaceptr , rid level );
	typedef hIntf ( __stdcall *FP_GeometryData_GetNamedColors)( hIntf _interfaceptr , const char * alternative_name );
	typedef void ( __stdcall *FP_GeometryData_AddUserCornerField)( hIntf _interfaceptr , hIntf field );
	typedef void ( __stdcall *FP_GeometryData_RemoveUserCornerField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_GeometryData_GetUserCornerField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_GeometryData_AddBaseTypeUserCornerField)( hIntf _interfaceptr , EBaseTypes base_type , const char * name , unsigned int tuple_size );
	typedef void ( __stdcall *FP_GeometryData_CopyCorner)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id );
	typedef void ( __stdcall *FP_GeometryData_CopyCombineCorners)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha );
	typedef void ( __stdcall *FP_GeometryData_CopyCombine3Corners)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 );
	typedef hIntf ( __stdcall *FP_GeometryData_GetCorners)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddMaterialIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_RemoveMaterialIds)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_GeometryData_GetMaterialIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddGroupIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_RemoveGroupIds)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_GeometryData_GetGroupIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddUserTriangleField)( hIntf _interfaceptr , hIntf field );
	typedef void ( __stdcall *FP_GeometryData_RemoveUserTriangleField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_GeometryData_GetUserTriangleField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_GeometryData_AddBaseTypeUserTriangleField)( hIntf _interfaceptr , EBaseTypes base_type , const char * name , unsigned int tuple_size );
	typedef void ( __stdcall *FP_GeometryData_CopyTriangle)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id );
	typedef void ( __stdcall *FP_GeometryData_CopyCombineTriangles)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha );
	typedef void ( __stdcall *FP_GeometryData_CopyCombine3Triangles)( hIntf _interfaceptr , hIntf source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 );
	typedef hIntf ( __stdcall *FP_GeometryData_GetTriangles)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_AddCustomField)( hIntf _interfaceptr , hIntf field );
	typedef void ( __stdcall *FP_GeometryData_RemoveCustomField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_GeometryData_GetCustomField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_GeometryData_AddBaseTypeCustomField)( hIntf _interfaceptr , EBaseTypes base_type , const char * name , unsigned int tuple_size );
	typedef void ( __stdcall *FP_GeometryData_CleanupNanValues)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_CleanupInvalidTriangles)( hIntf _interfaceptr );
	typedef rid ( __stdcall *FP_GeometryData_FindNamedTexCoordsIndex)( hIntf _interfaceptr , const char * field_name );
	typedef rid ( __stdcall *FP_GeometryData_FindNamedColorsIndex)( hIntf _interfaceptr , const char * field_name );
	typedef hIntf ( __stdcall *FP_GeometryData_CreateAABB)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_ExpandVertices)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_ExtractRange)( hIntf _interfaceptr , hIntf dest , rid start_tri_id , unsigned int count );
	typedef void ( __stdcall *FP_GeometryData_ExtractTriangles)( hIntf _interfaceptr , hIntf dest , hIntf triangle_ids );
	typedef void ( __stdcall *FP_GeometryData_AppendGeometry)( hIntf _interfaceptr , hIntf source );
	typedef void ( __stdcall *FP_GeometryData_Compact)( hIntf _interfaceptr , bool only_compact_triangles );
	typedef void ( __stdcall *FP_GeometryData_Weld)( hIntf _interfaceptr , real threshold );
	typedef hRMem ( __stdcall *FP_GeometryData_GetInf)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_SetInf)( hIntf _interfaceptr , const real *vec );
	typedef hRMem ( __stdcall *FP_GeometryData_GetSup)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_SetSup)( hIntf _interfaceptr , const real *vec );
	typedef void ( __stdcall *FP_GeometryData_CalculateExtents)( hIntf _interfaceptr , bool only_triangles );
	typedef bool ( __stdcall *FP_GeometryData_ExtentsContainCoords)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_Transform)( hIntf _interfaceptr , hIntf transformation );
	typedef void ( __stdcall *FP_GeometryData_DetectEdgeNeighbours)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_ConvertHandedness)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryData_ChangeWinding)( hIntf _interfaceptr );

	// function pointer defines for interface: PackedGeometryData
	typedef hIntf ( __stdcall *FP_CreatePackedGeometryData)();
	typedef hIntf ( __stdcall *FP_PackedGeometryData_NewCopy)( hIntf _interfaceptr , bool copy_data );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_NewUnpackedCopy)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_DeepCopy)( hIntf _interfaceptr , hIntf source , bool copy_data );
	typedef int ( __stdcall *FP_PackedGeometryData_AppendPackedGeometry)( hIntf _interfaceptr , hIntf source , hIntf NewVertexIds , bool collapseToOriginalVertices );
	typedef void ( __stdcall *FP_PackedGeometryData_SetVertexCount)( hIntf _interfaceptr , unsigned int count );
	typedef unsigned int ( __stdcall *FP_PackedGeometryData_GetVertexCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddVertices)( hIntf _interfaceptr , unsigned int count );
	typedef void ( __stdcall *FP_PackedGeometryData_SetTriangleCount)( hIntf _interfaceptr , unsigned int count );
	typedef unsigned int ( __stdcall *FP_PackedGeometryData_GetTriangleCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddTriangles)( hIntf _interfaceptr , unsigned int count );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetCoords)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddVertexLocks)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveVertexLocks)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetVertexLocks)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddBoneWeights)( hIntf _interfaceptr , unsigned int tuplesize );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveBoneWeights)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetBoneWeights)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetBoneIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddVertexWeighting)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveVertexWeighting)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetVertexWeighting)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddVertexWeights)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveVertexWeights)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetVertexWeights)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddTexCoords)( hIntf _interfaceptr , rid level );
	typedef rid ( __stdcall *FP_PackedGeometryData_AddNamedTexCoords)( hIntf _interfaceptr , const char * alternative_name );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveTexCoords)( hIntf _interfaceptr , rid level );
	typedef bool ( __stdcall *FP_PackedGeometryData_RemoveNamedTexCoords)( hIntf _interfaceptr , const char * alternative_name );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetTexCoords)( hIntf _interfaceptr , rid level );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetNamedTexCoords)( hIntf _interfaceptr , const char * alternative_name );
	typedef void ( __stdcall *FP_PackedGeometryData_AddTangents)( hIntf _interfaceptr , rid level );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveTangents)( hIntf _interfaceptr , rid level );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetTangents)( hIntf _interfaceptr , rid level );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetBitangents)( hIntf _interfaceptr , rid level );
	typedef void ( __stdcall *FP_PackedGeometryData_AddNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveNormals)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddColors)( hIntf _interfaceptr , rid level );
	typedef rid ( __stdcall *FP_PackedGeometryData_AddNamedColors)( hIntf _interfaceptr , const char * alternative_name );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveColors)( hIntf _interfaceptr , rid level );
	typedef bool ( __stdcall *FP_PackedGeometryData_RemoveNamedColors)( hIntf _interfaceptr , const char * alternative_name );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetColors)( hIntf _interfaceptr , rid level );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetNamedColors)( hIntf _interfaceptr , const char * alternative_name );
	typedef void ( __stdcall *FP_PackedGeometryData_AddUserVertexField)( hIntf _interfaceptr , hIntf field );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveUserVertexField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetUserVertexField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_AddBaseTypeUserVertexField)( hIntf _interfaceptr , EBaseTypes base_type , const char * name , unsigned int tuple_size );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetVertices)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetVertexIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddMaterialIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveMaterialIds)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetMaterialIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddGroupIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveGroupIds)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetGroupIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_AddUserTriangleField)( hIntf _interfaceptr , hIntf field );
	typedef void ( __stdcall *FP_PackedGeometryData_RemoveUserTriangleField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetUserTriangleField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_AddBaseTypeUserTriangleField)( hIntf _interfaceptr , EBaseTypes base_type , const char * name , unsigned int tuple_size );
	typedef hIntf ( __stdcall *FP_PackedGeometryData_GetTriangles)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_PackedGeometryData_GetInf)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_SetInf)( hIntf _interfaceptr , const real *vec );
	typedef hRMem ( __stdcall *FP_PackedGeometryData_GetSup)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PackedGeometryData_SetSup)( hIntf _interfaceptr , const real *vec );

	// function pointer defines for interface: ImageData
	typedef hIntf ( __stdcall *FP_CreateImageData)();
	typedef hIntf ( __stdcall *FP_ImageData_NewCopy)( hIntf _interfaceptr , bool copy_data );
	typedef void ( __stdcall *FP_ImageData_DeepCopy)( hIntf _interfaceptr , hIntf source , bool copy_data );
	typedef void ( __stdcall *FP_ImageData_AddColors)( hIntf _interfaceptr , EBaseTypes valuetype , const char * format );
	typedef void ( __stdcall *FP_ImageData_RemoveColors)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImageData_GetColors)( hIntf _interfaceptr );
	typedef EBaseTypes ( __stdcall *FP_ImageData_GetColorsValueType)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_ImageData_HasColors)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_ImageData_GetColorsFormat)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageData_AddField)( hIntf _interfaceptr , const char * name , EBaseTypes valuetype , unsigned int tuplesize );
	typedef void ( __stdcall *FP_ImageData_RemoveField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_ImageData_GetField)( hIntf _interfaceptr , const char * name );
	typedef EBaseTypes ( __stdcall *FP_ImageData_GetFieldValueType)( hIntf _interfaceptr , const char * name );
	typedef bool ( __stdcall *FP_ImageData_HasField)( hIntf _interfaceptr , const char * name );
	typedef unsigned int ( __stdcall *FP_ImageData_GetType)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ImageData_GetXSize)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ImageData_GetYSize)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ImageData_GetZSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageData_Set1DSize)( hIntf _interfaceptr , unsigned int _xs );
	typedef void ( __stdcall *FP_ImageData_Set2DSize)( hIntf _interfaceptr , unsigned int _xs , unsigned int _ys );
	typedef void ( __stdcall *FP_ImageData_Set3DSize)( hIntf _interfaceptr , unsigned int _xs , unsigned int _ys , unsigned int _zs );
	typedef void ( __stdcall *FP_ImageData_SetCubeSize)( hIntf _interfaceptr , unsigned int _xs , unsigned int _ys );
	typedef void ( __stdcall *FP_ImageData_Reset)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImageData_GetImageFields)( hIntf _interfaceptr );

	// function pointer defines for interface: Table
	typedef hIntf ( __stdcall *FP_CreateTable)();
	typedef rid ( __stdcall *FP_Table_AddItem)( hIntf _interfaceptr , hIntf item );
	typedef void ( __stdcall *FP_Table_SetItem)( hIntf _interfaceptr , rid id , hIntf item );
	typedef hIntf ( __stdcall *FP_Table_FindItem)( hIntf _interfaceptr , const char * name );
	typedef rid ( __stdcall *FP_Table_FindItemId)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_Table_GetItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_Table_RemoveItem)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_Table_Clear)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_Table_GetItemsCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Table_Copy)( hIntf _interfaceptr , hIntf src );

	// function pointer defines for interface: Material
	typedef hIntf ( __stdcall *FP_CreateMaterial)();
	typedef unsigned int ( __stdcall *FP_Material_GetMaterialChannelCount)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_Material_GetMaterialChannelFromIndex)( hIntf _interfaceptr , rid index );
	typedef void ( __stdcall *FP_Material_AddMaterialChannel)( hIntf _interfaceptr , const char * channel_name );
	typedef void ( __stdcall *FP_Material_RemoveMaterialChannel)( hIntf _interfaceptr , const char * channel_name );
	typedef bool ( __stdcall *FP_Material_HasMaterialChannel)( hIntf _interfaceptr , const char * channel_name );
	typedef void ( __stdcall *FP_Material_SetShadingNetwork)( hIntf _interfaceptr , const char * channel_name , hIntf node );
	typedef hIntf ( __stdcall *FP_Material_GetShadingNetwork)( hIntf _interfaceptr , const char * channel_name );
	typedef void ( __stdcall *FP_Material_LoadShadingNetworkFromXML)( hIntf _interfaceptr , const char * channel_name , const char * in_xml );
	typedef hRMem ( __stdcall *FP_Material_SaveShadingNetworkToXML)( hIntf _interfaceptr , const char * channel_name );
	typedef void ( __stdcall *FP_Material_SetUseTangentSpaceNormals)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Material_GetUseTangentSpaceNormals)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_Material_IsIdenticalTo)( hIntf _interfaceptr , hIntf mat );
	typedef bool ( __stdcall *FP_Material_IsTransparent)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Material_SetMaterialGUID)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_Material_GetMaterialGUID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Material_SetMaterialType)( hIntf _interfaceptr , EMaterialType value );
	typedef EMaterialType ( __stdcall *FP_Material_GetMaterialType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Material_SetOpacityType)( hIntf _interfaceptr , EOpacityType value );
	typedef EOpacityType ( __stdcall *FP_Material_GetOpacityType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Material_SetOpacityChannel)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_Material_GetOpacityChannel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Material_SetBlendMode)( hIntf _interfaceptr , EMaterialBlendMode value );
	typedef EMaterialBlendMode ( __stdcall *FP_Material_GetBlendMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Material_SetOpacityCutoff)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_Material_GetOpacityCutoff)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Material_ChangeTexturePrefixPath)( hIntf _interfaceptr , const char * current_path_prefix , const char * new_path_prefix );
	typedef void ( __stdcall *FP_Material_SetOpacityFromDiffuseAlpha)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Material_ConvertHandedness)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Material_GetMaterialChannels)( hIntf _interfaceptr , hIntf channels );
	typedef void ( __stdcall *FP_Material_GetMaterialChannelsWithTextureInputs)( hIntf _interfaceptr , hIntf channels );

	// function pointer defines for interface: MaterialTable
	typedef hIntf ( __stdcall *FP_CreateMaterialTable)();
	typedef rid ( __stdcall *FP_MaterialTable_AddMaterial)( hIntf _interfaceptr , hIntf material );
	typedef hIntf ( __stdcall *FP_MaterialTable_FindMaterial)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_MaterialTable_FindIdenticalMaterial)( hIntf _interfaceptr , hIntf mat );
	typedef rid ( __stdcall *FP_MaterialTable_FindMaterialId)( hIntf _interfaceptr , const char * name );
	typedef rid ( __stdcall *FP_MaterialTable_FindIdenticalMaterialId)( hIntf _interfaceptr , hIntf mat );
	typedef hIntf ( __stdcall *FP_MaterialTable_FindIdenticalMaterialIds)( hIntf _interfaceptr , hIntf mat );
	typedef void ( __stdcall *FP_MaterialTable_SetMaterial)( hIntf _interfaceptr , rid id , hIntf material );
	typedef hIntf ( __stdcall *FP_MaterialTable_GetMaterial)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_MaterialTable_RemoveMaterial)( hIntf _interfaceptr , rid id );
	typedef unsigned int ( __stdcall *FP_MaterialTable_GetMaterialsCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialTable_ChangeTexturePrefixPath)( hIntf _interfaceptr , const char * current_path_prefix , const char * new_path_prefix );
	typedef void ( __stdcall *FP_MaterialTable_GetMaterialChannels)( hIntf _interfaceptr , hIntf channels );
	typedef void ( __stdcall *FP_MaterialTable_GetMaterialChannelsWithTextureInputs)( hIntf _interfaceptr , hIntf channels );

	// function pointer defines for interface: Matrix4x4
	typedef hIntf ( __stdcall *FP_CreateMatrix4x4)();
	typedef void ( __stdcall *FP_Matrix4x4_DeepCopy)( hIntf _interfaceptr , hIntf mtxin );
	typedef void ( __stdcall *FP_Matrix4x4_Zero)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Matrix4x4_Identity)( hIntf _interfaceptr );
	typedef real ( __stdcall *FP_Matrix4x4_GetElement)( hIntf _interfaceptr , unsigned int column , unsigned int row );
	typedef void ( __stdcall *FP_Matrix4x4_SetElement)( hIntf _interfaceptr , unsigned int column , unsigned int row , real value );
	typedef hRMem ( __stdcall *FP_Matrix4x4_GetElements)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Matrix4x4_SetToTranspose)( hIntf _interfaceptr , hIntf mtxin );
	typedef void ( __stdcall *FP_Matrix4x4_Transpose)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Matrix4x4_SetToInvert)( hIntf _interfaceptr , hIntf mtxin );
	typedef void ( __stdcall *FP_Matrix4x4_Invert)( hIntf _interfaceptr );
	typedef real ( __stdcall *FP_Matrix4x4_Determinant3x3)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Matrix4x4_Point3ArrayMultiply)( hIntf _interfaceptr , hIntf vecarray );
	typedef void ( __stdcall *FP_Matrix4x4_Direction3ArrayMultiply)( hIntf _interfaceptr , hIntf vecarray );
	typedef void ( __stdcall *FP_Matrix4x4_Vector4ArrayMultiply)( hIntf _interfaceptr , hIntf vecarray );
	typedef void ( __stdcall *FP_Matrix4x4_SetToRotationTransform)( hIntf _interfaceptr , real angle , real ax , real ay , real az );
	typedef void ( __stdcall *FP_Matrix4x4_SetToScalingTransform)( hIntf _interfaceptr , real sx , real sy , real sz );
	typedef void ( __stdcall *FP_Matrix4x4_SetToTranslationTransform)( hIntf _interfaceptr , real tx , real ty , real tz );

	// function pointer defines for interface: Transform3
	typedef hIntf ( __stdcall *FP_CreateTransform3)();
	typedef void ( __stdcall *FP_Transform3_Clear)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Transform3_GetMatrix)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Transform3_GetStack)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Transform3_PostMultiply)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Transform3_PreMultiply)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_Transform3_IsPostMultiply)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_Transform3_IsPreMultiply)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Transform3_AddRotation)( hIntf _interfaceptr , real angle , real rx , real ry , real rz );
	typedef void ( __stdcall *FP_Transform3_AddScaling)( hIntf _interfaceptr , real sx , real sy , real sz );
	typedef void ( __stdcall *FP_Transform3_AddTranslation)( hIntf _interfaceptr , real tx , real ty , real tz );
	typedef void ( __stdcall *FP_Transform3_AddTransformation)( hIntf _interfaceptr , hIntf transform );
	typedef void ( __stdcall *FP_Transform3_Push)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Transform3_Pop)( hIntf _interfaceptr );

	typedef hIntf ( __stdcall *FP_MappingImage_NewQuartersizeCopy)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_MappingImage_GetWidth)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_MappingImage_GetHeight)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_MappingImage_GetLayerCount)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_MappingImage_GetMultisamplingWidth)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_MappingImage_GetMultisamplingHeight)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_MappingImage_GetImageData)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_MappingImage_GetMappingMeshData)( hIntf _interfaceptr );

	typedef EProcessStatus ( __stdcall *FP_ProcessingObject_RunProcessing)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ProcessingObject_Clear)( hIntf _interfaceptr );
	typedef real ( __stdcall *FP_ProcessingObject_GetPercentDone)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_ProcessingObject_ToJSON)( hIntf _interfaceptr );

	// function pointer defines for interface: Parameterizer
	typedef hIntf ( __stdcall *FP_CreateParameterizer)();
	typedef bool ( __stdcall *FP_Parameterizer_Parameterize)( hIntf _interfaceptr , hIntf geom , hIntf arr );
	typedef void ( __stdcall *FP_Parameterizer_SetMaxStretch)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_Parameterizer_GetMaxStretch)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetLargeChartsImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_Parameterizer_GetLargeChartsImportance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetInputMaterialCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Parameterizer_GetInputMaterialCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetOutputMaterialCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Parameterizer_GetOutputMaterialCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetInputOutputMaterialMapping)( hIntf _interfaceptr , unsigned int InMaterialId , int OutMaterialId );
	typedef int ( __stdcall *FP_Parameterizer_GetInputOutputMaterialMapping)( hIntf _interfaceptr , unsigned int InMaterialId );
	typedef void ( __stdcall *FP_Parameterizer_SetTextureWidth)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Parameterizer_GetTextureWidth)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetTextureWidthForImageIndex)( hIntf _interfaceptr , unsigned int id , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Parameterizer_GetTextureWidthForImageIndex)( hIntf _interfaceptr , unsigned int id );
	typedef void ( __stdcall *FP_Parameterizer_SetTextureHeight)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Parameterizer_GetTextureHeight)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetTextureHeightForImageIndex)( hIntf _interfaceptr , unsigned int id , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Parameterizer_GetTextureHeightForImageIndex)( hIntf _interfaceptr , unsigned int id );
	typedef void ( __stdcall *FP_Parameterizer_SetGutterSpace)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Parameterizer_GetGutterSpace)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetGutterSpaceForImageIndex)( hIntf _interfaceptr , unsigned int id , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Parameterizer_GetGutterSpaceForImageIndex)( hIntf _interfaceptr , unsigned int id );
	typedef void ( __stdcall *FP_Parameterizer_SetFeatureFlagsMask)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Parameterizer_GetFeatureFlagsMask)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetUseAutomaticTextureSize)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Parameterizer_GetUseAutomaticTextureSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetAutomaticTextureSizeMultiplier)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_Parameterizer_GetAutomaticTextureSizeMultiplier)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetForcePower2Texture)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Parameterizer_GetForcePower2Texture)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetUseVertexWeights)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Parameterizer_GetUseVertexWeights)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Parameterizer_SetUseVisibilityWeights)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Parameterizer_GetUseVisibilityWeights)( hIntf _interfaceptr );

	// function pointer defines for interface: ObjectCollection
	typedef hIntf ( __stdcall *FP_CreateObjectCollection)();
	typedef rhandle ( __stdcall *FP_ObjectCollection_AddObject)( hIntf _interfaceptr , hIntf obj );
	typedef rhandle ( __stdcall *FP_ObjectCollection_AddObjectSorted)( hIntf _interfaceptr , hIntf obj , bool ascending );
	typedef rhandle ( __stdcall *FP_ObjectCollection_GetFirstItem)( hIntf _interfaceptr );
	typedef rhandle ( __stdcall *FP_ObjectCollection_GetNextItem)( hIntf _interfaceptr , rhandle objhandle );
	typedef hIntf ( __stdcall *FP_ObjectCollection_GetItemsObject)( hIntf _interfaceptr , rhandle objhandle );
	typedef rhandle ( __stdcall *FP_ObjectCollection_RemoveItem)( hIntf _interfaceptr , rhandle objhandle );
	typedef void ( __stdcall *FP_ObjectCollection_RemoveObject)( hIntf _interfaceptr , hIntf pobj );
	typedef void ( __stdcall *FP_ObjectCollection_RemoveAllItems)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ObjectCollection_GetItemCount)( hIntf _interfaceptr );
	typedef rhandle ( __stdcall *FP_ObjectCollection_GetItem)( hIntf _interfaceptr , unsigned int index );
	typedef hIntf ( __stdcall *FP_ObjectCollection_GetItemAsObject)( hIntf _interfaceptr , unsigned int index );
	typedef bool ( __stdcall *FP_ObjectCollection_IsObjectInCollection)( hIntf _interfaceptr , hIntf pobj );
	typedef bool ( __stdcall *FP_ObjectCollection_IsItemInCollection)( hIntf _interfaceptr , rhandle objhandle );
	typedef hIntf ( __stdcall *FP_ObjectCollection_FindObject)( hIntf _interfaceptr , const char * name );

	// function pointer defines for interface: GeometryDataCollection
	typedef hIntf ( __stdcall *FP_CreateGeometryDataCollection)();
	typedef rhandle ( __stdcall *FP_GeometryDataCollection_AddGeometryData)( hIntf _interfaceptr , hIntf obj );
	typedef hIntf ( __stdcall *FP_GeometryDataCollection_GetGeometryData)( hIntf _interfaceptr , rhandle objhandle );
	typedef void ( __stdcall *FP_GeometryDataCollection_RemoveGeometryData)( hIntf _interfaceptr , hIntf pobj );
	typedef hIntf ( __stdcall *FP_GeometryDataCollection_FindGeometryData)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_GeometryDataCollection_GetNextItemAsGeometryData)( hIntf _interfaceptr , rhandle *phandle );
	typedef bool ( __stdcall *FP_GeometryDataCollection_IsGeometryDataInCollection)( hIntf _interfaceptr , hIntf pobj );

	typedef void ( __stdcall *FP_GraphicsImporter_SetImportFilePath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_GraphicsImporter_GetImportFilePath)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_GraphicsImporter_RunImport)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GraphicsImporter_Clear)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_GraphicsImporter_GetScene)( hIntf _interfaceptr );

	// function pointer defines for interface: WavefrontImporter
	typedef hIntf ( __stdcall *FP_CreateWavefrontImporter)();
	typedef void ( __stdcall *FP_WavefrontImporter_SetMaterialFilePath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_WavefrontImporter_GetMaterialFilePath)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_WavefrontImporter_SetExtractGroups)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_WavefrontImporter_GetExtractGroups)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_WavefrontImporter_SetUseAlphaAsOpacity)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_WavefrontImporter_GetUseAlphaAsOpacity)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_WavefrontImporter_SetUseFallbackDiffuse)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_WavefrontImporter_GetUseFallbackDiffuse)( hIntf _interfaceptr );

	// function pointer defines for interface: GLTFImporter
	typedef hIntf ( __stdcall *FP_CreateGLTFImporter)();

	// function pointer defines for interface: FBXImporter
	typedef hIntf ( __stdcall *FP_CreateFBXImporter)();

	typedef void ( __stdcall *FP_GraphicsExporter_SetExportFilePath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_GraphicsExporter_GetExportFilePath)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GraphicsExporter_SetScene)( hIntf _interfaceptr , hIntf scene );
	typedef void ( __stdcall *FP_GraphicsExporter_SetSelectionSet)( hIntf _interfaceptr , int exportSelectionSetID );
	typedef bool ( __stdcall *FP_GraphicsExporter_RunExport)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GraphicsExporter_SetPrimaryTexCoordName)( hIntf _interfaceptr , const char * name );
	typedef hRMem ( __stdcall *FP_GraphicsExporter_GetPrimaryTexCoordName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GraphicsExporter_SetExportCascadedScenes)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_GraphicsExporter_GetExportCascadedScenes)( hIntf _interfaceptr );

	// function pointer defines for interface: WavefrontExporter
	typedef hIntf ( __stdcall *FP_CreateWavefrontExporter)();
	typedef void ( __stdcall *FP_WavefrontExporter_SetMaterialFilePath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_WavefrontExporter_GetMaterialFilePath)( hIntf _interfaceptr );

	// function pointer defines for interface: FBXExporter
	typedef hIntf ( __stdcall *FP_CreateFBXExporter)();
	typedef void ( __stdcall *FP_FBXExporter_SetEmbedReferences)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_FBXExporter_GetEmbedReferences)( hIntf _interfaceptr );

	// function pointer defines for interface: GLTFExporter
	typedef hIntf ( __stdcall *FP_CreateGLTFExporter)();
	typedef void ( __stdcall *FP_GLTFExporter_SetEmbedReferences)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_GLTFExporter_GetEmbedReferences)( hIntf _interfaceptr );

	// function pointer defines for interface: BinaryImporter
	typedef hIntf ( __stdcall *FP_CreateBinaryImporter)();

	// function pointer defines for interface: BinaryExporter
	typedef hIntf ( __stdcall *FP_CreateBinaryExporter)();

	// function pointer defines for interface: GeometryValidator
	typedef hIntf ( __stdcall *FP_CreateGeometryValidator)();
	typedef bool ( __stdcall *FP_GeometryValidator_ValidateGeometry)( hIntf _interfaceptr , hIntf geom );
	typedef unsigned int ( __stdcall *FP_GeometryValidator_GetErrorValue)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_GeometryValidator_GetErrorString)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryValidator_SetCheckDegenerateFaceIndices)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_GeometryValidator_GetCheckDegenerateFaceIndices)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryValidator_SetCheckZeroAreaFaces)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_GeometryValidator_GetCheckZeroAreaFaces)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryValidator_SetAllowedMaterialCount)( hIntf _interfaceptr , unsigned int value );
	typedef void ( __stdcall *FP_GeometryValidator_SetAllowedBoneCount)( hIntf _interfaceptr , unsigned int value );
	typedef void ( __stdcall *FP_GeometryValidator_SetAllowedGroupCount)( hIntf _interfaceptr , unsigned int value );

	typedef bool ( __stdcall *FP_SettingsObject_ValidateSettings)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_SettingsObject_GetErrorString)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_SettingsObject_SetBoolParameter)( hIntf _interfaceptr , const char * name , bool value );
	typedef bool ( __stdcall *FP_SettingsObject_SetIntParameter)( hIntf _interfaceptr , const char * name , int value );
	typedef bool ( __stdcall *FP_SettingsObject_SetUIntParameter)( hIntf _interfaceptr , const char * name , unsigned int value );
	typedef bool ( __stdcall *FP_SettingsObject_SetDoubleParameter)( hIntf _interfaceptr , const char * name , double value );
	typedef bool ( __stdcall *FP_SettingsObject_SetStringParameter)( hIntf _interfaceptr , const char * name , const char * value );
	typedef bool ( __stdcall *FP_SettingsObject_GetBoolParameter)( hIntf _interfaceptr , const char * name );
	typedef int ( __stdcall *FP_SettingsObject_GetIntParameter)( hIntf _interfaceptr , const char * name );
	typedef unsigned int ( __stdcall *FP_SettingsObject_GetUIntParameter)( hIntf _interfaceptr , const char * name );
	typedef double ( __stdcall *FP_SettingsObject_GetDoubleParameter)( hIntf _interfaceptr , const char * name );
	typedef hRMem ( __stdcall *FP_SettingsObject_GetStringParameter)( hIntf _interfaceptr , const char * name );
	typedef hRMem ( __stdcall *FP_SettingsObject_ToJSON)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SettingsObject_SetValidateParameterNames)( hIntf _interfaceptr , bool validate );

	typedef hIntf ( __stdcall *FP_MaterialCaster_GetMaterialCasterSettings)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCaster_SetSourceTextures)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_MaterialCaster_GetSourceTextures)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCaster_SetSourceMaterials)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_MaterialCaster_GetSourceMaterials)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCaster_SetDestMaterialId)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_MaterialCaster_GetDestMaterialId)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCaster_SetMappingImage)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_MaterialCaster_GetMappingImage)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCaster_SetOutputFilePath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_MaterialCaster_GetOutputFilePath)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCaster_SetOutputImage)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_MaterialCaster_GetOutputImage)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_MaterialCaster_NewCopy)( hIntf _interfaceptr );

	// function pointer defines for interface: MaterialCasterSettings
	typedef hIntf ( __stdcall *FP_CreateMaterialCasterSettings)();
	typedef void ( __stdcall *FP_MaterialCasterSettings_SetMaterialChannel)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_MaterialCasterSettings_GetMaterialChannel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCasterSettings_SetOpacityChannel)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_MaterialCasterSettings_GetOpacityChannel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCasterSettings_SetOpacityChannelComponent)( hIntf _interfaceptr , EColorComponent value );
	typedef EColorComponent ( __stdcall *FP_MaterialCasterSettings_GetOpacityChannelComponent)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCasterSettings_SetDilation)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_MaterialCasterSettings_GetDilation)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCasterSettings_SetOutputPixelFormat)( hIntf _interfaceptr , EPixelFormat value );
	typedef EPixelFormat ( __stdcall *FP_MaterialCasterSettings_GetOutputPixelFormat)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCasterSettings_SetDitherType)( hIntf _interfaceptr , EDitherPatterns value );
	typedef EDitherPatterns ( __stdcall *FP_MaterialCasterSettings_GetDitherType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCasterSettings_SetFillMode)( hIntf _interfaceptr , EAtlasFillMode value );
	typedef EAtlasFillMode ( __stdcall *FP_MaterialCasterSettings_GetFillMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCasterSettings_SetUseMultisampling)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MaterialCasterSettings_GetUseMultisampling)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCasterSettings_SetOutputImageFileFormat)( hIntf _interfaceptr , EImageOutputFormat value );
	typedef EImageOutputFormat ( __stdcall *FP_MaterialCasterSettings_GetOutputImageFileFormat)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MaterialCasterSettings_SetOutputDDSCompressionType)( hIntf _interfaceptr , EDDSCompressionType value );
	typedef EDDSCompressionType ( __stdcall *FP_MaterialCasterSettings_GetOutputDDSCompressionType)( hIntf _interfaceptr );

	// function pointer defines for interface: ColorCaster
	typedef hIntf ( __stdcall *FP_CreateColorCaster)();
	typedef bool ( __stdcall *FP_ColorCaster_GetLastCastingWasSkipped)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ColorCaster_GetColorCasterSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: ColorCasterSettings
	typedef hIntf ( __stdcall *FP_CreateColorCasterSettings)();
	typedef void ( __stdcall *FP_ColorCasterSettings_SetBakeOpacityInAlpha)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ColorCasterSettings_GetBakeOpacityInAlpha)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ColorCasterSettings_SetOutputOpacityType)( hIntf _interfaceptr , EOpacityType value );
	typedef EOpacityType ( __stdcall *FP_ColorCasterSettings_GetOutputOpacityType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ColorCasterSettings_SetSkipCastingIfNoInputChannel)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ColorCasterSettings_GetSkipCastingIfNoInputChannel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ColorCasterSettings_SetOutputSRGB)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ColorCasterSettings_GetOutputSRGB)( hIntf _interfaceptr );

	// function pointer defines for interface: OpacityCaster
	typedef hIntf ( __stdcall *FP_CreateOpacityCaster)();
	typedef hIntf ( __stdcall *FP_OpacityCaster_GetOpacityCasterSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: OpacityCasterSettings
	typedef hIntf ( __stdcall *FP_CreateOpacityCasterSettings)();
	typedef void ( __stdcall *FP_OpacityCasterSettings_SetOutputSRGB)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_OpacityCasterSettings_GetOutputSRGB)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_OpacityCasterSettings_SetOutputOpacityType)( hIntf _interfaceptr , EOpacityType value );
	typedef EOpacityType ( __stdcall *FP_OpacityCasterSettings_GetOutputOpacityType)( hIntf _interfaceptr );

	// function pointer defines for interface: NormalCaster
	typedef hIntf ( __stdcall *FP_CreateNormalCaster)();
	typedef hIntf ( __stdcall *FP_NormalCaster_GetNormalCasterSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: NormalCasterSettings
	typedef hIntf ( __stdcall *FP_CreateNormalCasterSettings)();
	typedef void ( __stdcall *FP_NormalCasterSettings_SetFlipBackfacingNormals)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCasterSettings_GetFlipBackfacingNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCasterSettings_SetGenerateTangentSpaceNormals)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCasterSettings_GetGenerateTangentSpaceNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCasterSettings_SetFlipGreen)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCasterSettings_GetFlipGreen)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCasterSettings_SetCalculateBitangentPerFragment)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCasterSettings_GetCalculateBitangentPerFragment)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCasterSettings_SetNormalizeInterpolatedTangentSpace)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCasterSettings_GetNormalizeInterpolatedTangentSpace)( hIntf _interfaceptr );

	// function pointer defines for interface: NormalRepairer
	typedef hIntf ( __stdcall *FP_CreateNormalRepairer)();
	typedef void ( __stdcall *FP_NormalRepairer_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_NormalRepairer_GetScene)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetProcessSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_NormalRepairer_GetProcessSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetProcessSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_NormalRepairer_GetProcessSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetRecalculateNormals)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalRepairer_GetRecalculateNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetHardEdgeAngle)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_NormalRepairer_GetHardEdgeAngle)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetScaleByArea)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalRepairer_GetScaleByArea)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetScaleByAngle)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalRepairer_GetScaleByAngle)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetRepairOnlyInvalidNormals)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalRepairer_GetRepairOnlyInvalidNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetSnapNormalsToFlatSurfaces)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalRepairer_GetSnapNormalsToFlatSurfaces)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetFlipFacesAndNormals)( hIntf _interfaceptr , EFlipFacesAndNormals value );
	typedef EFlipFacesAndNormals ( __stdcall *FP_NormalRepairer_GetFlipFacesAndNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetGeometry)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_NormalRepairer_GetGeometry)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalRepairer_SetAutoCorrectionAllowsDoubleSided)( hIntf _interfaceptr , bool value );
	typedef void ( __stdcall *FP_NormalRepairer_SetAutoCorrectionRatioThreshold)( hIntf _interfaceptr , real value );
	typedef void ( __stdcall *FP_NormalRepairer_SetAutoCorrectionSingleSidedThreshold)( hIntf _interfaceptr , real value );

	// function pointer defines for interface: DisplacementCaster
	typedef hIntf ( __stdcall *FP_CreateDisplacementCaster)();
	typedef hIntf ( __stdcall *FP_DisplacementCaster_GetDisplacementCasterSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: DisplacementCasterSettings
	typedef hIntf ( __stdcall *FP_CreateDisplacementCasterSettings)();
	typedef void ( __stdcall *FP_DisplacementCasterSettings_SetDistanceScaling)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_DisplacementCasterSettings_GetDistanceScaling)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_DisplacementCasterSettings_SetGenerateScalarDisplacement)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_DisplacementCasterSettings_GetGenerateScalarDisplacement)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_DisplacementCasterSettings_SetGenerateTangentSpaceDisplacement)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_DisplacementCasterSettings_GetGenerateTangentSpaceDisplacement)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_DisplacementCasterSettings_SetNormalMapTexCoordLevel)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_DisplacementCasterSettings_GetNormalMapTexCoordLevel)( hIntf _interfaceptr );

	// function pointer defines for interface: TangentCalculator
	typedef hIntf ( __stdcall *FP_CreateTangentCalculator)();
	typedef void ( __stdcall *FP_TangentCalculator_CalculateTangents)( hIntf _interfaceptr , hIntf geom );
	typedef void ( __stdcall *FP_TangentCalculator_CalculateTangentsForNodeHierarchy)( hIntf _interfaceptr , hIntf node );
	typedef void ( __stdcall *FP_TangentCalculator_SetTexCoordsSetId)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_TangentCalculator_GetTexCoordsSetId)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_TangentCalculator_SetTangentCalculatorType)( hIntf _interfaceptr , ETangentSpaceMethod type );
	typedef ETangentSpaceMethod ( __stdcall *FP_TangentCalculator_GetTangentCalculatorType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_TangentCalculator_SetInvertV)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_TangentCalculator_GetInvertV)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_RepairSettings_SetTJuncDist)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_RepairSettings_GetTJuncDist)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RepairSettings_SetUseTJunctionRemover)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RepairSettings_GetUseTJunctionRemover)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RepairSettings_SetWeldDist)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_RepairSettings_GetWeldDist)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RepairSettings_SetWeldOnlyBorderVertices)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RepairSettings_GetWeldOnlyBorderVertices)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RepairSettings_SetWeldOnlyWithinMaterial)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RepairSettings_GetWeldOnlyWithinMaterial)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RepairSettings_SetWeldOnlyWithinSceneNode)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RepairSettings_GetWeldOnlyWithinSceneNode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RepairSettings_SetWeldOnlyBetweenSceneNodes)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RepairSettings_GetWeldOnlyBetweenSceneNodes)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RepairSettings_SetUseWelding)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RepairSettings_GetUseWelding)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RepairSettings_SetProgressivePasses)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_RepairSettings_GetProgressivePasses)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_BoneSettings_SetBoneReductionTargets)( hIntf _interfaceptr , EStopCondition stopCondition , bool useBoneRatio , bool useBoneCount , bool useMaxDeviation , bool useOnScreenSize );
	typedef void ( __stdcall *FP_BoneSettings_SetBoneReductionTargetBoneRatioEnabled)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_BoneSettings_GetBoneReductionTargetBoneRatioEnabled)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetBoneReductionTargetBoneCountEnabled)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_BoneSettings_GetBoneReductionTargetBoneCountEnabled)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetBoneReductionTargetMaxDeviationEnabled)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_BoneSettings_GetBoneReductionTargetMaxDeviationEnabled)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetBoneReductionTargetOnScreenSizeEnabled)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_BoneSettings_GetBoneReductionTargetOnScreenSizeEnabled)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetBoneReductionTargetStopCondition)( hIntf _interfaceptr , EStopCondition value );
	typedef EStopCondition ( __stdcall *FP_BoneSettings_GetBoneReductionTargetStopCondition)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetBoneReductionTargetBoneRatio)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_BoneSettings_GetBoneReductionTargetBoneRatio)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetBoneReductionTargetBoneCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_BoneSettings_GetBoneReductionTargetBoneCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetBoneReductionTargetMaxDeviation)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_BoneSettings_GetBoneReductionTargetMaxDeviation)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetBoneReductionTargetOnScreenSize)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_BoneSettings_GetBoneReductionTargetOnScreenSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetMaxBonePerVertex)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_BoneSettings_GetMaxBonePerVertex)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetRemoveUnusedBones)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_BoneSettings_GetRemoveUnusedBones)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetLimitBonesPerVertex)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_BoneSettings_GetLimitBonesPerVertex)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetUseBoneReducer)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_BoneSettings_GetUseBoneReducer)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetLockBoneSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_BoneSettings_GetLockBoneSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetLockBoneSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_BoneSettings_GetLockBoneSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetRemoveBoneSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_BoneSettings_GetRemoveBoneSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BoneSettings_SetRemoveBoneSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_BoneSettings_GetRemoveBoneSelectionSetName)( hIntf _interfaceptr );

	// function pointer defines for interface: ReductionSettings
	typedef hIntf ( __stdcall *FP_CreateReductionSettings)();
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionTargets)( hIntf _interfaceptr , EStopCondition stopCondition , bool useTriangleRatio , bool useTriangleCount , bool useMaxDeviation , bool useOnScreenSize );
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionTargetTriangleRatioEnabled)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetReductionTargetTriangleRatioEnabled)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionTargetTriangleCountEnabled)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetReductionTargetTriangleCountEnabled)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionTargetMaxDeviationEnabled)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetReductionTargetMaxDeviationEnabled)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionTargetOnScreenSizeEnabled)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetReductionTargetOnScreenSizeEnabled)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionTargetStopCondition)( hIntf _interfaceptr , EStopCondition value );
	typedef EStopCondition ( __stdcall *FP_ReductionSettings_GetReductionTargetStopCondition)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionHeuristics)( hIntf _interfaceptr , EReductionHeuristics value );
	typedef EReductionHeuristics ( __stdcall *FP_ReductionSettings_GetReductionHeuristics)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionTargetTriangleRatio)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetReductionTargetTriangleRatio)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionTargetTriangleCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ReductionSettings_GetReductionTargetTriangleCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionTargetMaxDeviation)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetReductionTargetMaxDeviation)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetReductionTargetOnScreenSize)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ReductionSettings_GetReductionTargetOnScreenSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetGeometryImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetGeometryImportance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetMaterialImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetMaterialImportance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetTextureImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetTextureImportance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetShadingImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetShadingImportance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetGroupImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetGroupImportance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetVertexColorImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetVertexColorImportance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetEdgeSetImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetEdgeSetImportance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetSkinningImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetSkinningImportance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetCurvatureImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetCurvatureImportance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetCreateGeomorphGeometry)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetCreateGeomorphGeometry)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetAllowDegenerateTexCoords)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetAllowDegenerateTexCoords)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetKeepSymmetry)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetKeepSymmetry)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetUseAutomaticSymmetryDetection)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetUseAutomaticSymmetryDetection)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetUseSymmetryQuadRetriangulator)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetUseSymmetryQuadRetriangulator)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetSymmetryAxis)( hIntf _interfaceptr , ESymmetryAxis value );
	typedef ESymmetryAxis ( __stdcall *FP_ReductionSettings_GetSymmetryAxis)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetSymmetryOffset)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetSymmetryOffset)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetSymmetryDetectionTolerance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetSymmetryDetectionTolerance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetDataCreationPreferences)( hIntf _interfaceptr , EDataCreationPreferences value );
	typedef EDataCreationPreferences ( __stdcall *FP_ReductionSettings_GetDataCreationPreferences)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetGenerateGeomorphData)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetGenerateGeomorphData)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetOutwardMoveMultiplier)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetOutwardMoveMultiplier)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetInwardMoveMultiplier)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetInwardMoveMultiplier)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetMaxEdgeLength)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ReductionSettings_GetMaxEdgeLength)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetUseHighQualityNormalCalculation)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetUseHighQualityNormalCalculation)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetProcessSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_ReductionSettings_GetProcessSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetProcessSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ReductionSettings_GetProcessSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetMergeGeometries)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetMergeGeometries)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetKeepUnprocessedSceneMeshes)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetKeepUnprocessedSceneMeshes)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ReductionSettings_SetLockGeometricBorder)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ReductionSettings_GetLockGeometricBorder)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_NormalCalculationSettings_SetReplaceNormals)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCalculationSettings_GetReplaceNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCalculationSettings_SetReplaceTangents)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCalculationSettings_GetReplaceTangents)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCalculationSettings_SetHardEdgeAngle)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_NormalCalculationSettings_GetHardEdgeAngle)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCalculationSettings_SetRepairInvalidNormals)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCalculationSettings_GetRepairInvalidNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCalculationSettings_SetReorthogonalizeTangentSpace)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCalculationSettings_GetReorthogonalizeTangentSpace)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCalculationSettings_SetScaleByArea)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCalculationSettings_GetScaleByArea)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCalculationSettings_SetScaleByAngle)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCalculationSettings_GetScaleByAngle)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_NormalCalculationSettings_SetSnapNormalsToFlatSurfaces)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_NormalCalculationSettings_GetSnapNormalsToFlatSurfaces)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_MappingImageSettings_SetInputMaterialCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_MappingImageSettings_GetInputMaterialCount)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_MappingImageSettings_GetInputMaterialSettings)( hIntf _interfaceptr , unsigned int index );
	typedef void ( __stdcall *FP_MappingImageSettings_SetOutputMaterialCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_MappingImageSettings_GetOutputMaterialCount)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_MappingImageSettings_GetOutputMaterialSettings)( hIntf _interfaceptr , unsigned int index );
	typedef void ( __stdcall *FP_MappingImageSettings_SetReplaceMappingImages)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MappingImageSettings_GetReplaceMappingImages)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetMaximumLayers)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_MappingImageSettings_GetMaximumLayers)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetAllowTransparencyMapping)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MappingImageSettings_GetAllowTransparencyMapping)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetGenerateMappingImage)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MappingImageSettings_GetGenerateMappingImage)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetGenerateTexCoords)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MappingImageSettings_GetGenerateTexCoords)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetGenerateTangents)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MappingImageSettings_GetGenerateTangents)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetTexCoordLevel)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_MappingImageSettings_GetTexCoordLevel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetTexCoordName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_MappingImageSettings_GetTexCoordName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetUseFullRetexturing)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MappingImageSettings_GetUseFullRetexturing)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetApplyNewMaterialIds)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MappingImageSettings_GetApplyNewMaterialIds)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetUseAutomaticTextureSize)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MappingImageSettings_GetUseAutomaticTextureSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetAutomaticTextureSizeMultiplier)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_MappingImageSettings_GetAutomaticTextureSizeMultiplier)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetForcePower2Texture)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MappingImageSettings_GetForcePower2Texture)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetTexCoordGeneratorType)( hIntf _interfaceptr , ETexcoordGeneratorType value );
	typedef ETexcoordGeneratorType ( __stdcall *FP_MappingImageSettings_GetTexCoordGeneratorType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageSettings_SetOnlyParameterizeInvalidUVs)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_MappingImageSettings_GetOnlyParameterizeInvalidUVs)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_MappingImageSettings_GetChartAggregatorSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_MappingImageSettings_GetParameterizerSettings)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_MappingImageInputMaterialSettings_SetMaterialMapping)( hIntf _interfaceptr , int value );
	typedef int ( __stdcall *FP_MappingImageInputMaterialSettings_GetMaterialMapping)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_MappingImageOutputMaterialSettings_SetTextureWidth)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_MappingImageOutputMaterialSettings_GetTextureWidth)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageOutputMaterialSettings_SetTextureHeight)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_MappingImageOutputMaterialSettings_GetTextureHeight)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageOutputMaterialSettings_SetMultisamplingLevel)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_MappingImageOutputMaterialSettings_GetMultisamplingLevel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_MappingImageOutputMaterialSettings_SetGutterSpace)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_MappingImageOutputMaterialSettings_GetGutterSpace)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_VisibilitySettings_SetUseVisibilityWeightsInReducer)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_VisibilitySettings_GetUseVisibilityWeightsInReducer)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetUseVisibilityWeightsInTexcoordGenerator)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_VisibilitySettings_GetUseVisibilityWeightsInTexcoordGenerator)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetVisibilityWeightsPower)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_VisibilitySettings_GetVisibilityWeightsPower)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetCullOccludedGeometry)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_VisibilitySettings_GetCullOccludedGeometry)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetForceVisibilityCalculation)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_VisibilitySettings_GetForceVisibilityCalculation)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetUseBackfaceCulling)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_VisibilitySettings_GetUseBackfaceCulling)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetCameraSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_VisibilitySettings_GetCameraSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetCameraSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_VisibilitySettings_GetCameraSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetOccluderSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_VisibilitySettings_GetOccluderSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetOccluderSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_VisibilitySettings_GetOccluderSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetFillNonVisibleAreaThreshold)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_VisibilitySettings_GetFillNonVisibleAreaThreshold)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetRemoveTrianglesNotOccludingOtherTriangles)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_VisibilitySettings_GetRemoveTrianglesNotOccludingOtherTriangles)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetConservativeMode)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_VisibilitySettings_GetConservativeMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VisibilitySettings_SetComputeVisibilityMode)( hIntf _interfaceptr , EComputeVisibilityMode value );
	typedef EComputeVisibilityMode ( __stdcall *FP_VisibilitySettings_GetComputeVisibilityMode)( hIntf _interfaceptr );

	// function pointer defines for interface: ReductionProcessor
	typedef hIntf ( __stdcall *FP_CreateReductionProcessor)();
	typedef void ( __stdcall *FP_ReductionProcessor_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_ReductionProcessor_GetScene)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionProcessor_GetMappingImage)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionProcessor_GetMappingImageForImageIndex)( hIntf _interfaceptr , rid OutputMaterialId );
	typedef hIntf ( __stdcall *FP_ReductionProcessor_GetRepairSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionProcessor_GetReductionSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionProcessor_GetBoneSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionProcessor_GetNormalCalculationSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionProcessor_GetMappingImageSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionProcessor_GetVisibilitySettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionProcessor_GetVertexWeightSettings)( hIntf _interfaceptr );
	typedef real ( __stdcall *FP_ReductionProcessor_GetResultDeviation)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetOnScreenSize)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_RemeshingLegacySettings_GetOnScreenSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetMergeDistance)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_RemeshingLegacySettings_GetMergeDistance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetMergeBoldness)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_RemeshingLegacySettings_GetMergeBoldness)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetMaxTriangleSize)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_RemeshingLegacySettings_GetMaxTriangleSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetSurfaceTransferMode)( hIntf _interfaceptr , ESurfaceTransferMode value );
	typedef ESurfaceTransferMode ( __stdcall *FP_RemeshingLegacySettings_GetSurfaceTransferMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetUseCuttingPlanes)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingLegacySettings_GetUseCuttingPlanes)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetHardEdgeAngle)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_RemeshingLegacySettings_GetHardEdgeAngle)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetTransferNormals)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingLegacySettings_GetTransferNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetTransferColors)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingLegacySettings_GetTransferColors)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetUseClippingGeometry)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingLegacySettings_GetUseClippingGeometry)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetUseEmptySpaceOverride)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingLegacySettings_GetUseEmptySpaceOverride)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetEmptySpaceOverride)( hIntf _interfaceptr , const real *value );
	typedef hRMem ( __stdcall *FP_RemeshingLegacySettings_GetEmptySpaceOverride)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetProcessSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_RemeshingLegacySettings_GetProcessSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetProcessSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_RemeshingLegacySettings_GetProcessSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetCuttingPlaneSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_RemeshingLegacySettings_GetCuttingPlaneSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetCuttingPlaneSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_RemeshingLegacySettings_GetCuttingPlaneSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetClippingGeometrySelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_RemeshingLegacySettings_GetClippingGeometrySelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetClippingGeometrySelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_RemeshingLegacySettings_GetClippingGeometrySelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetUseClippingGeometryEmptySpaceOverride)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingLegacySettings_GetUseClippingGeometryEmptySpaceOverride)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetUsePreviewMode)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingLegacySettings_GetUsePreviewMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetRespectWindingDirection)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingLegacySettings_GetRespectWindingDirection)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetClippingGeometryEmptySpaceOverride)( hIntf _interfaceptr , const real *value );
	typedef hRMem ( __stdcall *FP_RemeshingLegacySettings_GetClippingGeometryEmptySpaceOverride)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingLegacySettings_SetOutputSceneNodeName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_RemeshingLegacySettings_GetOutputSceneNodeName)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_RemeshingSettings_SetOnScreenSize)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_RemeshingSettings_GetOnScreenSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetRemeshingMode)( hIntf _interfaceptr , ERemeshingMode value );
	typedef ERemeshingMode ( __stdcall *FP_RemeshingSettings_GetRemeshingMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetHoleFilling)( hIntf _interfaceptr , EHoleFilling value );
	typedef EHoleFilling ( __stdcall *FP_RemeshingSettings_GetHoleFilling)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetSurfaceTransferMode)( hIntf _interfaceptr , ESurfaceTransferMode value );
	typedef ESurfaceTransferMode ( __stdcall *FP_RemeshingSettings_GetSurfaceTransferMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetHardEdgeAngle)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_RemeshingSettings_GetHardEdgeAngle)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetForceSoftEdgesWithinTextureCharts)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingSettings_GetForceSoftEdgesWithinTextureCharts)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetTransferNormals)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingSettings_GetTransferNormals)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetTransferColors)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingSettings_GetTransferColors)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetProcessSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_RemeshingSettings_GetProcessSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetProcessSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_RemeshingSettings_GetProcessSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetKeepUnprocessedSceneMeshes)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RemeshingSettings_GetKeepUnprocessedSceneMeshes)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetRemeshingModeManualPositionX)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_RemeshingSettings_GetRemeshingModeManualPositionX)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetRemeshingModeManualPositionY)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_RemeshingSettings_GetRemeshingModeManualPositionY)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RemeshingSettings_SetRemeshingModeManualPositionZ)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_RemeshingSettings_GetRemeshingModeManualPositionZ)( hIntf _interfaceptr );

	// function pointer defines for interface: RemeshingLegacyProcessor
	typedef hIntf ( __stdcall *FP_CreateRemeshingLegacyProcessor)();
	typedef void ( __stdcall *FP_RemeshingLegacyProcessor_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_RemeshingLegacyProcessor_GetScene)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingLegacyProcessor_GetMappingImage)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingLegacyProcessor_GetMappingImageForImageIndex)( hIntf _interfaceptr , rid value );
	typedef hIntf ( __stdcall *FP_RemeshingLegacyProcessor_GetRemeshingLegacySettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingLegacyProcessor_GetMappingImageSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingLegacyProcessor_GetBoneSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingLegacyProcessor_GetVisibilitySettings)( hIntf _interfaceptr );
	typedef rid ( __stdcall *FP_RemeshingLegacyProcessor_GetResultSelectionSetId)( hIntf _interfaceptr );

	// function pointer defines for interface: RemeshingProcessor
	typedef hIntf ( __stdcall *FP_CreateRemeshingProcessor)();
	typedef void ( __stdcall *FP_RemeshingProcessor_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_RemeshingProcessor_GetScene)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingProcessor_GetMappingImage)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingProcessor_GetMappingImageForImageIndex)( hIntf _interfaceptr , rid OutputMaterialId );
	typedef hIntf ( __stdcall *FP_RemeshingProcessor_GetRemeshingSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingProcessor_GetMappingImageSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingProcessor_GetBoneSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingProcessor_GetGeometryCullingSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingProcessor_GetVisibilitySettings)( hIntf _interfaceptr );

	// function pointer defines for interface: Scene
	typedef hIntf ( __stdcall *FP_CreateScene)();
	typedef hIntf ( __stdcall *FP_Scene_GetRootNode)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Scene_GetMaterialTable)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Scene_GetBoneTable)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Scene_GetSelectionSetTable)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Scene_GetTextureTable)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Scene_GetMappingImage)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Scene_RemoveSceneNodesInSelectionSet)( hIntf _interfaceptr , int selectionSetID );
	typedef void ( __stdcall *FP_Scene_RemoveSceneNodes)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Scene_RemoveSceneNodesOfType)( hIntf _interfaceptr , const char * nodeType );
	typedef hIntf ( __stdcall *FP_Scene_CreateAABB)( hIntf _interfaceptr , bool perMesh );
	typedef void ( __stdcall *FP_Scene_Clear)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_Scene_LoadFromFile)( hIntf _interfaceptr , const char * path );
	typedef bool ( __stdcall *FP_Scene_SaveToFile)( hIntf _interfaceptr , const char * path );
	typedef void ( __stdcall *FP_Scene_EvaluateDefaultGlobalTransformation)( hIntf _interfaceptr , hIntf node , hIntf global_transform );
	typedef hRMem ( __stdcall *FP_Scene_GetInf)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_Scene_GetSup)( hIntf _interfaceptr );
	typedef real ( __stdcall *FP_Scene_GetRadius)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_Scene_CalculateExtents)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Scene_GetNodeFromPath)( hIntf _interfaceptr , const char * path );
	typedef hIntf ( __stdcall *FP_Scene_GetNodeByGUID)( hIntf _interfaceptr , const char * node_id );
	typedef hIntf ( __stdcall *FP_Scene_GetSubNodeByGUID)( hIntf _interfaceptr , const char * node_id , hIntf node );
	typedef hIntf ( __stdcall *FP_Scene_AddCustomField)( hIntf _interfaceptr , EBaseTypes base_type , const char * name , unsigned int tuple_size );
	typedef void ( __stdcall *FP_Scene_RemoveCustomField)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_Scene_GetCustomField)( hIntf _interfaceptr , const char * name );
	typedef bool ( __stdcall *FP_Scene_HasCustomField)( hIntf _interfaceptr , const char * name );
	typedef void ( __stdcall *FP_Scene_RemoveUnlinkedBones)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Scene_Compact)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Scene_Append)( hIntf _interfaceptr , hIntf otherScene );
	typedef hIntf ( __stdcall *FP_Scene_NewCombinedGeometryFromSelectionSet)( hIntf _interfaceptr , int selectionSetID );
	typedef hIntf ( __stdcall *FP_Scene_NewCombinedGeometry)( hIntf _interfaceptr );
	typedef int ( __stdcall *FP_Scene_SelectNodes)( hIntf _interfaceptr , const char * nodeTypeName );
	typedef void ( __stdcall *FP_Scene_DeepCopy)( hIntf _interfaceptr , hIntf src );
	typedef hIntf ( __stdcall *FP_Scene_NewCopy)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_Scene_GetTriangleCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Scene_StandardizeMaterials)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_Scene_GetCascadedSceneCount)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Scene_GetCascadedSceneForIndex)( hIntf _interfaceptr , unsigned int index );
	typedef void ( __stdcall *FP_Scene_GetMaterialChannels)( hIntf _interfaceptr , hIntf channels );
	typedef void ( __stdcall *FP_Scene_GetMaterialChannelsWithTextureInputs)( hIntf _interfaceptr , hIntf channels );

	// function pointer defines for interface: SceneNode
	typedef hIntf ( __stdcall *FP_CreateSceneNode)();
	typedef hIntf ( __stdcall *FP_SceneNode_GetScene)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_SceneNode_GetParent)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_SceneNode_GetRelativeTransform)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneNode_SetOriginalName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_SceneNode_GetOriginalName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneNode_SetIsVisible)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_SceneNode_GetIsVisible)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneNode_SetIsFrozen)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_SceneNode_GetIsFrozen)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneNode_SetIsModified)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_SceneNode_GetIsModified)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneNode_SetNodeGUID)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_SceneNode_GetNodeGUID)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_SceneNode_GetInf)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_SceneNode_GetSup)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_SceneNode_GetChildCount)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_SceneNode_GetChild)( hIntf _interfaceptr , rid index );
	typedef hIntf ( __stdcall *FP_SceneNode_FindNamedChild)( hIntf _interfaceptr , const char * name );
	typedef void ( __stdcall *FP_SceneNode_AddChild)( hIntf _interfaceptr , hIntf child );
	typedef hIntf ( __stdcall *FP_SceneNode_CreateChildMesh)( hIntf _interfaceptr , hIntf geom );
	typedef hIntf ( __stdcall *FP_SceneNode_CreateChildPlane)( hIntf _interfaceptr , const real *position , const real *normal );
	typedef void ( __stdcall *FP_SceneNode_RemoveChild)( hIntf _interfaceptr , hIntf child );
	typedef void ( __stdcall *FP_SceneNode_RemoveChildren)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneNode_RemoveFromParent)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_SceneNode_HasChild)( hIntf _interfaceptr , hIntf child );
	typedef hIntf ( __stdcall *FP_SceneNode_NewCopy)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_SceneNode_NewClone)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneNode_EvaluateDefaultGlobalTransformation)( hIntf _interfaceptr , hIntf global_transform );
	typedef bool ( __stdcall *FP_SceneNode_CalculateExtents)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_SceneNode_GetPath)( hIntf _interfaceptr );

	// function pointer defines for interface: SceneNodeCollection
	typedef hIntf ( __stdcall *FP_CreateSceneNodeCollection)();
	typedef rhandle ( __stdcall *FP_SceneNodeCollection_AddSceneNode)( hIntf _interfaceptr , hIntf obj );
	typedef hIntf ( __stdcall *FP_SceneNodeCollection_GetSceneNode)( hIntf _interfaceptr , rhandle objhandle );
	typedef void ( __stdcall *FP_SceneNodeCollection_RemoveSceneNode)( hIntf _interfaceptr , hIntf pobj );
	typedef hIntf ( __stdcall *FP_SceneNodeCollection_FindSceneNode)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_SceneNodeCollection_GetNextItemAsSceneNode)( hIntf _interfaceptr , rhandle *phandle );
	typedef bool ( __stdcall *FP_SceneNodeCollection_IsSceneNodeInCollection)( hIntf _interfaceptr , hIntf pobj );

	// function pointer defines for interface: SceneMesh
	typedef hIntf ( __stdcall *FP_CreateSceneMesh)();
	typedef void ( __stdcall *FP_SceneMesh_SetGeometry)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_SceneMesh_GetGeometry)( hIntf _interfaceptr );

	// function pointer defines for interface: SceneLodGroup
	typedef hIntf ( __stdcall *FP_CreateSceneLodGroup)();
	typedef hIntf ( __stdcall *FP_SceneLodGroup_GetThresholds)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_SceneLodGroup_GetLodForDistance)( hIntf _interfaceptr , real distance );

	// function pointer defines for interface: SceneBone
	typedef hIntf ( __stdcall *FP_CreateSceneBone)();
	typedef rid ( __stdcall *FP_SceneBone_GetParentBone)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneBone_CollectAllChildBones)( hIntf _interfaceptr , hIntf child_bones );
	typedef rid ( __stdcall *FP_SceneBone_GetBoneId)( hIntf _interfaceptr );

	// function pointer defines for interface: SceneBoneTable
	typedef hIntf ( __stdcall *FP_CreateSceneBoneTable)();
	typedef rid ( __stdcall *FP_SceneBoneTable_AddBone)( hIntf _interfaceptr , hIntf bone );
	typedef hIntf ( __stdcall *FP_SceneBoneTable_FindBone)( hIntf _interfaceptr , const char * name );
	typedef rid ( __stdcall *FP_SceneBoneTable_FindBoneId)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_SceneBoneTable_GetBone)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_SceneBoneTable_RemoveBone)( hIntf _interfaceptr , rid id );
	typedef unsigned int ( __stdcall *FP_SceneBoneTable_GetBonesCount)( hIntf _interfaceptr );

	// function pointer defines for interface: ScenePlane
	typedef hIntf ( __stdcall *FP_CreateScenePlane)();
	typedef hRMem ( __stdcall *FP_ScenePlane_GetPosition)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ScenePlane_SetPosition)( hIntf _interfaceptr , const real *vec );
	typedef hRMem ( __stdcall *FP_ScenePlane_GetNormal)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ScenePlane_SetNormal)( hIntf _interfaceptr , const real *vec );

	// function pointer defines for interface: SceneCamera
	typedef hIntf ( __stdcall *FP_CreateSceneCamera)();
	typedef void ( __stdcall *FP_SceneCamera_SetCameraType)( hIntf _interfaceptr , ECameraType value );
	typedef ECameraType ( __stdcall *FP_SceneCamera_GetCameraType)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_SceneCamera_GetCameraPositions)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_SceneCamera_GetTargetPositions)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneCamera_SetUseNormalizedCoordinates)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_SceneCamera_GetUseNormalizedCoordinates)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneCamera_SetOrthographicCameraPixelSize)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_SceneCamera_GetOrthographicCameraPixelSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneCamera_SetFieldOfView)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_SceneCamera_GetFieldOfView)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneCamera_SetPixelFieldOfView)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_SceneCamera_GetPixelFieldOfView)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_SceneCamera_GetNumberOfViews)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_SceneCamera_ValidateCamera)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneCamera_SetCustomSphereCameraPath)( hIntf _interfaceptr , int fidelity , real pitch_angle , real yaw_angle , real coverage_angle );

	// function pointer defines for interface: SceneExporter
	typedef hIntf ( __stdcall *FP_CreateSceneExporter)();
	typedef void ( __stdcall *FP_SceneExporter_SetExportFilePath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_SceneExporter_GetExportFilePath)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneExporter_SetPrimaryTexCoordName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_SceneExporter_GetPrimaryTexCoordName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneExporter_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef bool ( __stdcall *FP_SceneExporter_RunExport)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneExporter_Clear)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneExporter_SetEmbedReferences)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_SceneExporter_GetEmbedReferences)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneExporter_SetExportCascadedScenes)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_SceneExporter_GetExportCascadedScenes)( hIntf _interfaceptr );

	// function pointer defines for interface: SceneImporter
	typedef hIntf ( __stdcall *FP_CreateSceneImporter)();
	typedef void ( __stdcall *FP_SceneImporter_SetImportFilePath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_SceneImporter_GetImportFilePath)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_SceneImporter_GetScene)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_SceneImporter_RunImport)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SceneImporter_Clear)( hIntf _interfaceptr );

	// function pointer defines for interface: SelectionSet
	typedef hIntf ( __stdcall *FP_CreateSelectionSet)();
	typedef void ( __stdcall *FP_SelectionSet_AddItem)( hIntf _interfaceptr , const char * NodeId );
	typedef void ( __stdcall *FP_SelectionSet_RemoveItem)( hIntf _interfaceptr , const char * NodeId );
	typedef void ( __stdcall *FP_SelectionSet_AddHierarchy)( hIntf _interfaceptr , hIntf node );
	typedef void ( __stdcall *FP_SelectionSet_RemoveHierarchy)( hIntf _interfaceptr , hIntf node );
	typedef void ( __stdcall *FP_SelectionSet_Clear)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_SelectionSet_GetItemCount)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_SelectionSet_GetItem)( hIntf _interfaceptr , unsigned int index );

	// function pointer defines for interface: SelectionSetTable
	typedef hIntf ( __stdcall *FP_CreateSelectionSetTable)();
	typedef rid ( __stdcall *FP_SelectionSetTable_AddSelectionSet)( hIntf _interfaceptr , hIntf selectionSet );
	typedef hIntf ( __stdcall *FP_SelectionSetTable_FindSelectionSet)( hIntf _interfaceptr , const char * name );
	typedef rid ( __stdcall *FP_SelectionSetTable_FindSelectionSetId)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_SelectionSetTable_GetSelectionSet)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_SelectionSetTable_RemoveSelectionSet)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_SelectionSetTable_RemoveNamedSelectionSet)( hIntf _interfaceptr , const char * name );
	typedef unsigned int ( __stdcall *FP_SelectionSetTable_GetSelectionSetCount)( hIntf _interfaceptr );

	// function pointer defines for interface: Texture
	typedef hIntf ( __stdcall *FP_CreateTexture)();
	typedef void ( __stdcall *FP_Texture_SetFilePath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_Texture_GetFilePath)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Texture_SetImageData)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_Texture_GetImageData)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Texture_ChangeTexturePrefixPath)( hIntf _interfaceptr , const char * current_path_prefix , const char * new_path_prefix );
	typedef bool ( __stdcall *FP_Texture_ExportImageData)( hIntf _interfaceptr );

	// function pointer defines for interface: TextureTable
	typedef hIntf ( __stdcall *FP_CreateTextureTable)();
	typedef rid ( __stdcall *FP_TextureTable_AddTexture)( hIntf _interfaceptr , hIntf texture );
	typedef hIntf ( __stdcall *FP_TextureTable_FindTexture)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_TextureTable_FindTextureUsingPath)( hIntf _interfaceptr , const char * path );
	typedef rid ( __stdcall *FP_TextureTable_FindTextureId)( hIntf _interfaceptr , const char * name );
	typedef void ( __stdcall *FP_TextureTable_SetTexture)( hIntf _interfaceptr , rid id , hIntf texture );
	typedef hIntf ( __stdcall *FP_TextureTable_GetTexture)( hIntf _interfaceptr , rid id );
	typedef void ( __stdcall *FP_TextureTable_RemoveTexture)( hIntf _interfaceptr , rid id );
	typedef unsigned int ( __stdcall *FP_TextureTable_GetTexturesCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_TextureTable_ChangeTexturePrefixPath)( hIntf _interfaceptr , const char * current_path_prefix , const char * new_path_prefix );

	typedef void ( __stdcall *FP_GeometryCullingSettings_SetUseClippingPlanes)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_GeometryCullingSettings_GetUseClippingPlanes)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryCullingSettings_SetUseClippingGeometry)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_GeometryCullingSettings_GetUseClippingGeometry)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryCullingSettings_SetClippingPlaneSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_GeometryCullingSettings_GetClippingPlaneSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryCullingSettings_SetClippingPlaneSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_GeometryCullingSettings_GetClippingPlaneSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryCullingSettings_SetClippingGeometrySelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_GeometryCullingSettings_GetClippingGeometrySelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryCullingSettings_SetClippingGeometrySelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_GeometryCullingSettings_GetClippingGeometrySelectionSetName)( hIntf _interfaceptr );

	// function pointer defines for interface: ImageDataImporter
	typedef hIntf ( __stdcall *FP_CreateImageDataImporter)();
	typedef void ( __stdcall *FP_ImageDataImporter_SetImportFilePath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ImageDataImporter_GetImportFilePath)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageDataImporter_SetExtensionOverride)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ImageDataImporter_GetExtensionOverride)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImageDataImporter_GetImage)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageDataImporter_SetCapToPowerOfTwo)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ImageDataImporter_GetCapToPowerOfTwo)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageDataImporter_SetMaxWidth)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ImageDataImporter_GetMaxWidth)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageDataImporter_SetMaxHeight)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ImageDataImporter_GetMaxHeight)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageDataImporter_SetImportOnlyHeader)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ImageDataImporter_GetImportOnlyHeader)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ImageDataImporter_GetNumberOfChannels)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ImageDataImporter_GetBitsPerPixel)( hIntf _interfaceptr );
	typedef EImageInputFormat ( __stdcall *FP_ImageDataImporter_GetImageFileFormat)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_ImageDataImporter_RunImport)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageDataImporter_Clear)( hIntf _interfaceptr );

	typedef unsigned int ( __stdcall *FP_MappingImageMeshData_GetMappedGeometriesCount)( hIntf _interfaceptr );
	typedef rid ( __stdcall *FP_MappingImageMeshData_GetStartTriangleIdOfGeometry)( hIntf _interfaceptr , rid GeometryIndex );
	typedef hRMem ( __stdcall *FP_MappingImageMeshData_GetScenePathOfGeometry)( hIntf _interfaceptr , rid GeometryIndex );
	typedef hRMem ( __stdcall *FP_MappingImageMeshData_GetNodeGuidOfGeometry)( hIntf _interfaceptr , rid GeometryIndex );
	typedef void ( __stdcall *FP_MappingImageMeshData_Clear)( hIntf _interfaceptr );

	typedef unsigned int ( __stdcall *FP_ShadingNode_GetParameterCount)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_ShadingNode_GetParameterName)( hIntf _interfaceptr , rid parameter_id );
	typedef void ( __stdcall *FP_ShadingNode_SetDefaultParameter)( hIntf _interfaceptr , rid parameter_id , real r , real g , real b , real a );
	typedef real ( __stdcall *FP_ShadingNode_GetDefaultParameterRed)( hIntf _interfaceptr , rid parameter_id );
	typedef real ( __stdcall *FP_ShadingNode_GetDefaultParameterGreen)( hIntf _interfaceptr , rid parameter_id );
	typedef real ( __stdcall *FP_ShadingNode_GetDefaultParameterBlue)( hIntf _interfaceptr , rid parameter_id );
	typedef real ( __stdcall *FP_ShadingNode_GetDefaultParameterAlpha)( hIntf _interfaceptr , rid parameter_id );

	typedef bool ( __stdcall *FP_ShadingFilterNode_SetInput)( hIntf _interfaceptr , rid input_id , hIntf input_node );
	typedef hIntf ( __stdcall *FP_ShadingFilterNode_GetInput)( hIntf _interfaceptr , rid input_id );
	typedef bool ( __stdcall *FP_ShadingFilterNode_GetParameterIsInputable)( hIntf _interfaceptr , rid param_id );

	// function pointer defines for interface: ShadingTextureNode
	typedef hIntf ( __stdcall *FP_CreateShadingTextureNode)();
	typedef void ( __stdcall *FP_ShadingTextureNode_SetTextureName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ShadingTextureNode_GetTextureName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetTexCoordName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ShadingTextureNode_GetTexCoordName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetTexCoordLevel)( hIntf _interfaceptr , int value );
	typedef int ( __stdcall *FP_ShadingTextureNode_GetTexCoordLevel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetUseSRGB)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ShadingTextureNode_GetUseSRGB)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetTileU)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ShadingTextureNode_GetTileU)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetTileV)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ShadingTextureNode_GetTileV)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetOffsetU)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ShadingTextureNode_GetOffsetU)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetOffsetV)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ShadingTextureNode_GetOffsetV)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetTextureWrapMode)( hIntf _interfaceptr , ETextureWrapMode value );
	typedef ETextureWrapMode ( __stdcall *FP_ShadingTextureNode_GetTextureWrapMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetTextureWrapModeU)( hIntf _interfaceptr , ETextureWrapMode value );
	typedef ETextureWrapMode ( __stdcall *FP_ShadingTextureNode_GetTextureWrapModeU)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetTextureWrapModeV)( hIntf _interfaceptr , ETextureWrapMode value );
	typedef ETextureWrapMode ( __stdcall *FP_ShadingTextureNode_GetTextureWrapModeV)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingTextureNode_SetRotation)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ShadingTextureNode_GetRotation)( hIntf _interfaceptr );

	// function pointer defines for interface: ShadingSwizzlingNode
	typedef hIntf ( __stdcall *FP_CreateShadingSwizzlingNode)();
	typedef void ( __stdcall *FP_ShadingSwizzlingNode_SetRedComponent)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ShadingSwizzlingNode_GetRedComponent)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingSwizzlingNode_SetGreenComponent)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ShadingSwizzlingNode_GetGreenComponent)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingSwizzlingNode_SetBlueComponent)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ShadingSwizzlingNode_GetBlueComponent)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingSwizzlingNode_SetAlphaComponent)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ShadingSwizzlingNode_GetAlphaComponent)( hIntf _interfaceptr );

	// function pointer defines for interface: ShadingColorNode
	typedef hIntf ( __stdcall *FP_CreateShadingColorNode)();
	typedef void ( __stdcall *FP_ShadingColorNode_SetColor)( hIntf _interfaceptr , real r , real g , real b , real a );

	// function pointer defines for interface: ShadingAddNode
	typedef hIntf ( __stdcall *FP_CreateShadingAddNode)();

	// function pointer defines for interface: ShadingSubtractNode
	typedef hIntf ( __stdcall *FP_CreateShadingSubtractNode)();

	// function pointer defines for interface: ShadingMultiplyNode
	typedef hIntf ( __stdcall *FP_CreateShadingMultiplyNode)();

	// function pointer defines for interface: ShadingColorCorrectionNode
	typedef hIntf ( __stdcall *FP_CreateShadingColorCorrectionNode)();

	// function pointer defines for interface: ShadingPowNode
	typedef hIntf ( __stdcall *FP_CreateShadingPowNode)();

	// function pointer defines for interface: ShadingDivideNode
	typedef hIntf ( __stdcall *FP_CreateShadingDivideNode)();

	// function pointer defines for interface: ShadingClampNode
	typedef hIntf ( __stdcall *FP_CreateShadingClampNode)();

	// function pointer defines for interface: ShadingMaxNode
	typedef hIntf ( __stdcall *FP_CreateShadingMaxNode)();

	// function pointer defines for interface: ShadingMinNode
	typedef hIntf ( __stdcall *FP_CreateShadingMinNode)();

	// function pointer defines for interface: ShadingStepNode
	typedef hIntf ( __stdcall *FP_CreateShadingStepNode)();

	// function pointer defines for interface: ShadingEqualNode
	typedef hIntf ( __stdcall *FP_CreateShadingEqualNode)();

	// function pointer defines for interface: ShadingNotEqualNode
	typedef hIntf ( __stdcall *FP_CreateShadingNotEqualNode)();

	// function pointer defines for interface: ShadingVertexColorNode
	typedef hIntf ( __stdcall *FP_CreateShadingVertexColorNode)();
	typedef void ( __stdcall *FP_ShadingVertexColorNode_SetVertexColorIndex)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_ShadingVertexColorNode_GetVertexColorIndex)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingVertexColorNode_SetVertexColorSet)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ShadingVertexColorNode_GetVertexColorSet)( hIntf _interfaceptr );

	// function pointer defines for interface: ShadingInterpolateNode
	typedef hIntf ( __stdcall *FP_CreateShadingInterpolateNode)();

	// function pointer defines for interface: ShadingCustomNode
	typedef hIntf ( __stdcall *FP_CreateShadingCustomNode)();
	typedef void ( __stdcall *FP_ShadingCustomNode_SetInputCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ShadingCustomNode_GetInputCount)( hIntf _interfaceptr );
	typedef ColorStruct ( __stdcall *FP_ShadingCustomNode_GetInputValue)( hIntf _interfaceptr , unsigned int value );
	typedef void ( __stdcall *FP_ShadingCustomNode_SetCustomShaderCode)( hIntf _interfaceptr , const char * value );

	// function pointer defines for interface: ShadingLayeredBlendNode
	typedef hIntf ( __stdcall *FP_CreateShadingLayeredBlendNode)();
	typedef void ( __stdcall *FP_ShadingLayeredBlendNode_SetInputCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ShadingLayeredBlendNode_GetInputCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingLayeredBlendNode_SetPerInputBlendType)( hIntf _interfaceptr , int _input , ETextureBlendType _blendType );
	typedef ETextureBlendType ( __stdcall *FP_ShadingLayeredBlendNode_GetPerInputBlendType)( hIntf _interfaceptr , int _input );

	// function pointer defines for interface: ShadingNormalize3Node
	typedef hIntf ( __stdcall *FP_CreateShadingNormalize3Node)();

	// function pointer defines for interface: ShadingSqrtNode
	typedef hIntf ( __stdcall *FP_CreateShadingSqrtNode)();

	// function pointer defines for interface: ShadingDot3Node
	typedef hIntf ( __stdcall *FP_CreateShadingDot3Node)();

	// function pointer defines for interface: ShadingCross3Node
	typedef hIntf ( __stdcall *FP_CreateShadingCross3Node)();

	// function pointer defines for interface: ShadingCosNode
	typedef hIntf ( __stdcall *FP_CreateShadingCosNode)();

	// function pointer defines for interface: ShadingSinNode
	typedef hIntf ( __stdcall *FP_CreateShadingSinNode)();

	// function pointer defines for interface: ShadingGreaterThanNode
	typedef hIntf ( __stdcall *FP_CreateShadingGreaterThanNode)();

	// function pointer defines for interface: ShadingLessThanNode
	typedef hIntf ( __stdcall *FP_CreateShadingLessThanNode)();

	// function pointer defines for interface: ShadingGeometryFieldNode
	typedef hIntf ( __stdcall *FP_CreateShadingGeometryFieldNode)();
	typedef void ( __stdcall *FP_ShadingGeometryFieldNode_SetFieldType)( hIntf _interfaceptr , rid value );
	typedef EGeometryDataFieldType ( __stdcall *FP_ShadingGeometryFieldNode_GetFieldType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingGeometryFieldNode_SetFieldIndex)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_ShadingGeometryFieldNode_GetFieldIndex)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShadingGeometryFieldNode_SetFieldName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ShadingGeometryFieldNode_GetFieldName)( hIntf _interfaceptr );

	// function pointer defines for interface: ShaderGenerator
	typedef hIntf ( __stdcall *FP_CreateShaderGenerator)();
	typedef void ( __stdcall *FP_ShaderGenerator_SetMaterial)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_ShaderGenerator_GetMaterial)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShaderGenerator_SetIdentifersPrefix)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ShaderGenerator_GetIdentifersPrefix)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShaderGenerator_SetGenerateFullShader)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ShaderGenerator_GetGenerateFullShader)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ShaderGenerator_SetGenerateTextureSamplerData)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ShaderGenerator_GetGenerateTextureSamplerData)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_ShaderGenerator_GenerateShaderData)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_ShaderGenerator_GetHLSLCode)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_ShaderGenerator_GetGLSLVertexCode)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_ShaderGenerator_GetGLSLFragmentCode)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ShaderGenerator_GetShaderInputTexturePathsCount)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_ShaderGenerator_GetShaderInputTexturePath)( hIntf _interfaceptr , rid index );
	typedef unsigned int ( __stdcall *FP_ShaderGenerator_GetShaderInputUVSetsCount)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_ShaderGenerator_GetShaderInputUVSet)( hIntf _interfaceptr , rid index );
	typedef rid ( __stdcall *FP_ShaderGenerator_GetShaderInputUVIndex)( hIntf _interfaceptr , const char * uvset );
	typedef unsigned int ( __stdcall *FP_ShaderGenerator_GetShaderInputVertexColorsCount)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_ShaderGenerator_GetShaderInputVertexColor)( hIntf _interfaceptr , rid index );
	typedef rid ( __stdcall *FP_ShaderGenerator_GetShaderInputVertexColorsIndex)( hIntf _interfaceptr , const char * colorset );
	typedef void ( __stdcall *FP_ShaderGenerator_UnloadData)( hIntf _interfaceptr );

	// function pointer defines for interface: AggregationProcessor
	typedef hIntf ( __stdcall *FP_CreateAggregationProcessor)();
	typedef void ( __stdcall *FP_AggregationProcessor_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_AggregationProcessor_GetScene)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_AggregationProcessor_GetMappingImage)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_AggregationProcessor_GetMappingImageForImageIndex)( hIntf _interfaceptr , rid OutputMaterialId );
	typedef hIntf ( __stdcall *FP_AggregationProcessor_GetAggregationSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_AggregationProcessor_GetMappingImageSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_AggregationProcessor_GetVisibilitySettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_AggregationProcessor_GetGeometryCullingSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_AggregationProcessor_GetVertexWeightSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: AggregationSettings
	typedef hIntf ( __stdcall *FP_CreateAggregationSettings)();
	typedef void ( __stdcall *FP_AggregationSettings_SetProcessSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_AggregationSettings_GetProcessSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_AggregationSettings_SetProcessSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_AggregationSettings_GetProcessSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_AggregationSettings_SetKeepUnprocessedSceneMeshes)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_AggregationSettings_GetKeepUnprocessedSceneMeshes)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_AggregationSettings_SetMergeGeometries)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_AggregationSettings_GetMergeGeometries)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_AggregationSettings_SetEnableGeometryCulling)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_AggregationSettings_GetEnableGeometryCulling)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_AggregationSettings_SetGeometryCullingPrecision)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_AggregationSettings_GetGeometryCullingPrecision)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_AggregationSettings_SetSubdivideGeometryBasedOnUVTiles)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_AggregationSettings_GetSubdivideGeometryBasedOnUVTiles)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_AggregationSettings_SetSubdivisionTileSize)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_AggregationSettings_GetSubdivisionTileSize)( hIntf _interfaceptr );

	// function pointer defines for interface: ChartAggregator
	typedef hIntf ( __stdcall *FP_CreateChartAggregator)();
	typedef bool ( __stdcall *FP_ChartAggregator_Parameterize)( hIntf _interfaceptr , hIntf geom , hIntf arr );
	typedef void ( __stdcall *FP_ChartAggregator_SetInputMaterialCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetInputMaterialCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetOutputMaterialCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetOutputMaterialCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetInputOutputMaterialMapping)( hIntf _interfaceptr , unsigned int InMaterialId , int OutMaterialId );
	typedef int ( __stdcall *FP_ChartAggregator_GetInputOutputMaterialMapping)( hIntf _interfaceptr , unsigned int InMaterialId );
	typedef void ( __stdcall *FP_ChartAggregator_SetTextureWidth)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetTextureWidth)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetTextureWidthForMaterialIndex)( hIntf _interfaceptr , unsigned int id , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetTextureWidthForMaterialIndex)( hIntf _interfaceptr , unsigned int id );
	typedef void ( __stdcall *FP_ChartAggregator_SetTextureHeight)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetTextureHeight)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetTextureHeightForMaterialIndex)( hIntf _interfaceptr , unsigned int id , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetTextureHeightForMaterialIndex)( hIntf _interfaceptr , unsigned int id );
	typedef void ( __stdcall *FP_ChartAggregator_SetGutterSpace)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetGutterSpace)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetGutterSpaceForMaterialIndex)( hIntf _interfaceptr , unsigned int id , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetGutterSpaceForMaterialIndex)( hIntf _interfaceptr , unsigned int id );
	typedef void ( __stdcall *FP_ChartAggregator_SetUseAutomaticTextureSize)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ChartAggregator_GetUseAutomaticTextureSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetAutomaticTextureSizeMultiplier)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ChartAggregator_GetAutomaticTextureSizeMultiplier)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetForcePower2Texture)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ChartAggregator_GetForcePower2Texture)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetTexCoordLevel)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetTexCoordLevel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetTexCoordName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ChartAggregator_GetTexCoordName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetChartAggregatorMode)( hIntf _interfaceptr , EChartAggregatorMode value );
	typedef EChartAggregatorMode ( __stdcall *FP_ChartAggregator_GetChartAggregatorMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetSurfaceAreaScale)( hIntf _interfaceptr , ESurfaceAreaScale value );
	typedef ESurfaceAreaScale ( __stdcall *FP_ChartAggregator_GetSurfaceAreaScale)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetSeparateOverlappingCharts)( hIntf _interfaceptr , bool value );
	typedef void ( __stdcall *FP_ChartAggregator_SetMaterialTable)( hIntf _interfaceptr , hIntf value );
	typedef void ( __stdcall *FP_ChartAggregator_SetTextureTable)( hIntf _interfaceptr , hIntf value );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetKeepOriginalChartSizesTextureWidth)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetKeepOriginalChartSizesTextureWidthForMaterialIndex)( hIntf _interfaceptr , unsigned int OutputID );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetKeepOriginalChartSizesTextureHeight)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ChartAggregator_GetKeepOriginalChartSizesTextureHeightForMaterialIndex)( hIntf _interfaceptr , unsigned int OutputID );
	typedef void ( __stdcall *FP_ChartAggregator_SetOriginalChartProportionsChannel)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ChartAggregator_GetOriginalChartProportionsChannel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetUseVertexWeights)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ChartAggregator_GetUseVertexWeights)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetLockUVRotation)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ChartAggregator_GetLockUVRotation)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregator_SetExpandZeroAreaUVs)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ChartAggregator_GetExpandZeroAreaUVs)( hIntf _interfaceptr );

	// function pointer defines for interface: VertexColorCasterSettings
	typedef hIntf ( __stdcall *FP_CreateVertexColorCasterSettings)();
	typedef void ( __stdcall *FP_VertexColorCasterSettings_SetOutputColorLevel)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_VertexColorCasterSettings_GetOutputColorLevel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VertexColorCasterSettings_SetOutputColorName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_VertexColorCasterSettings_GetOutputColorName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VertexColorCasterSettings_SetColorSpaceEdgeThreshold)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_VertexColorCasterSettings_GetColorSpaceEdgeThreshold)( hIntf _interfaceptr );

	// function pointer defines for interface: VertexColorCaster
	typedef hIntf ( __stdcall *FP_CreateVertexColorCaster)();
	typedef void ( __stdcall *FP_VertexColorCaster_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_VertexColorCaster_GetVertexColorCasterSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: ImageDataExporter
	typedef hIntf ( __stdcall *FP_CreateImageDataExporter)();
	typedef void ( __stdcall *FP_ImageDataExporter_SetExportFilePath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ImageDataExporter_GetExportFilePath)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageDataExporter_SetImage)( hIntf _interfaceptr , hIntf value );
	typedef bool ( __stdcall *FP_ImageDataExporter_RunExport)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageDataExporter_SetImageFileFormat)( hIntf _interfaceptr , EImageOutputFormat value );
	typedef EImageOutputFormat ( __stdcall *FP_ImageDataExporter_GetImageFileFormat)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageDataExporter_SetDDSCompressionType)( hIntf _interfaceptr , EDDSCompressionType value );
	typedef EDDSCompressionType ( __stdcall *FP_ImageDataExporter_GetDDSCompressionType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageDataExporter_Clear)( hIntf _interfaceptr );

	// function pointer defines for interface: AmbientOcclusionCaster
	typedef hIntf ( __stdcall *FP_CreateAmbientOcclusionCaster)();
	typedef void ( __stdcall *FP_AmbientOcclusionCaster_SetAdditionalSourceScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_AmbientOcclusionCaster_GetAmbientOcclusionCasterSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: AmbientOcclusionCasterSettings
	typedef hIntf ( __stdcall *FP_CreateAmbientOcclusionCasterSettings)();
	typedef void ( __stdcall *FP_AmbientOcclusionCasterSettings_SetRaysPerPixel)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_AmbientOcclusionCasterSettings_GetRaysPerPixel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_AmbientOcclusionCasterSettings_SetOcclusionFalloff)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_AmbientOcclusionCasterSettings_GetOcclusionFalloff)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_AmbientOcclusionCasterSettings_SetOcclusionMultiplier)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_AmbientOcclusionCasterSettings_GetOcclusionMultiplier)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_AmbientOcclusionCasterSettings_SetUseSimpleOcclusionMode)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_AmbientOcclusionCasterSettings_GetUseSimpleOcclusionMode)( hIntf _interfaceptr );

	// function pointer defines for interface: ImpostorProcessor
	typedef hIntf ( __stdcall *FP_CreateImpostorProcessor)();
	typedef void ( __stdcall *FP_ImpostorProcessor_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_ImpostorProcessor_GetScene)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImpostorProcessor_GetImpostorSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImpostorProcessor_GetMappingImageSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImpostorProcessor_GetMappingImage)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImpostorProcessor_GetImpostorGeometryFromSingleView)( hIntf _interfaceptr );
	typedef real ( __stdcall *FP_ImpostorProcessor_GetSingleViewAspectRatio)( hIntf _interfaceptr );
	typedef rid ( __stdcall *FP_ImpostorProcessor_GetBillboardCloudMaterialId)( hIntf _interfaceptr );

	// function pointer defines for interface: ImpostorSettings
	typedef hIntf ( __stdcall *FP_CreateImpostorSettings)();
	typedef void ( __stdcall *FP_ImpostorSettings_SetImpostorType)( hIntf _interfaceptr , EImpostorType value );
	typedef EImpostorType ( __stdcall *FP_ImpostorSettings_GetImpostorType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImpostorSettings_SetProcessSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_ImpostorSettings_GetProcessSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImpostorSettings_SetProcessSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ImpostorSettings_GetProcessSelectionSetName)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImpostorSettings_GetBillboardCloudSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImpostorSettings_GetFlipbookSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImpostorSettings_GetImpostorFromSingleViewSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: SurfaceMapper
	typedef hIntf ( __stdcall *FP_CreateSurfaceMapper)();
	typedef void ( __stdcall *FP_SurfaceMapper_SetSourceScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_SurfaceMapper_GetSourceScene)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SurfaceMapper_SetDestinationScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_SurfaceMapper_GetDestinationScene)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SurfaceMapper_SetSourceGeometry)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_SurfaceMapper_GetSourceGeometry)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SurfaceMapper_SetDestinationGeometry)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_SurfaceMapper_GetDestinationGeometry)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_SurfaceMapper_GetMappingImageSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_SurfaceMapper_GetMappingImage)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SurfaceMapper_SetRecalculateSearchDirection)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_SurfaceMapper_GetRecalculateSearchDirection)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SurfaceMapper_SetSearchDirectionHardEdgeAngle)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_SurfaceMapper_GetSearchDirectionHardEdgeAngle)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SurfaceMapper_SetSearchDistance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_SurfaceMapper_GetSearchDistance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SurfaceMapper_SetSearchOffset)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_SurfaceMapper_GetSearchOffset)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_SurfaceMapper_RunSurfaceMapping)( hIntf _interfaceptr );

	// function pointer defines for interface: OcclusionMeshProcessor
	typedef hIntf ( __stdcall *FP_CreateOcclusionMeshProcessor)();
	typedef void ( __stdcall *FP_OcclusionMeshProcessor_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_OcclusionMeshProcessor_GetScene)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_OcclusionMeshProcessor_GetOcclusionMeshSettings)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_OcclusionMeshSettings_SetOnScreenSize)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_OcclusionMeshSettings_GetOnScreenSize)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_OcclusionMeshSettings_SetOnScreenErrorTolerance)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_OcclusionMeshSettings_GetOnScreenErrorTolerance)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_OcclusionMeshSettings_SetInvertOutputMesh)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_OcclusionMeshSettings_GetInvertOutputMesh)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_OcclusionMeshSettings_SetTransferSkinning)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_OcclusionMeshSettings_GetTransferSkinning)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_OcclusionMeshSettings_SetUseCameras)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_OcclusionMeshSettings_GetUseCameras)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_OcclusionMeshSettings_SetCameraSelectionSetId)( hIntf _interfaceptr , int value );
	typedef int ( __stdcall *FP_OcclusionMeshSettings_GetCameraSelectionSetId)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_OcclusionMeshSettings_SetCameraSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_OcclusionMeshSettings_GetCameraSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_OcclusionMeshSettings_SetOcclusionMode)( hIntf _interfaceptr , EOcclusionMode value );
	typedef EOcclusionMode ( __stdcall *FP_OcclusionMeshSettings_GetOcclusionMode)( hIntf _interfaceptr );

	// function pointer defines for interface: ImageComparer
	typedef hIntf ( __stdcall *FP_CreateImageComparer)();
	typedef void ( __stdcall *FP_ImageComparer_SetImages)( hIntf _interfaceptr , hIntf beforeImg , hIntf afterImg );
	typedef void ( __stdcall *FP_ImageComparer_SetImageMasks)( hIntf _interfaceptr , hIntf beforeImgMask , hIntf afterImgMask );
	typedef int ( __stdcall *FP_ImageComparer_CompareImages)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageComparer_SetImagePathBeforeImg)( hIntf _interfaceptr , const char * value );
	typedef void ( __stdcall *FP_ImageComparer_SetImagePathAfterImg)( hIntf _interfaceptr , const char * value );
	typedef void ( __stdcall *FP_ImageComparer_SetImageDiffExportPath)( hIntf _interfaceptr , const char * value );
	typedef void ( __stdcall *FP_ImageComparer_SetDiffHighlightsExportPath)( hIntf _interfaceptr , const char * value );
	typedef hIntf ( __stdcall *FP_ImageComparer_GetImageDiff)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ImageComparer_GetDiffHighlights)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ImageComparer_GetTotalMaskCoverage)( hIntf _interfaceptr );
	typedef float ( __stdcall *FP_ImageComparer_GetMaxPixelError)( hIntf _interfaceptr );
	typedef float ( __stdcall *FP_ImageComparer_GetTotalPixelError)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_ImageComparer_GetHighlightAreaCoverage)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImageComparer_SetSilhouetteDifferenceError)( hIntf _interfaceptr , float value );

	// function pointer defines for interface: RecommendedTextureSizeCalculator
	typedef hIntf ( __stdcall *FP_CreateRecommendedTextureSizeCalculator)();
	typedef void ( __stdcall *FP_RecommendedTextureSizeCalculator_SetForcePower2Texture)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_RecommendedTextureSizeCalculator_GetForcePower2Texture)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RecommendedTextureSizeCalculator_SetRecommendedTextureSizeMultiplier)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_RecommendedTextureSizeCalculator_GetRecommendedTextureSizeMultiplier)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_RecommendedTextureSizeCalculator_GetRecommendedWidth)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_RecommendedTextureSizeCalculator_GetRecommendedHeight)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_RecommendedTextureSizeCalculator_CalculateBasedOnDeviation)( hIntf _interfaceptr , hIntf geom , real deviation );
	typedef void ( __stdcall *FP_RecommendedTextureSizeCalculator_CalculateBasedOnOnScreenSize)( hIntf _interfaceptr , hIntf geom , unsigned int onScreenSize );

	// function pointer defines for interface: PartRemover
	typedef hIntf ( __stdcall *FP_CreatePartRemover)();
	typedef void ( __stdcall *FP_PartRemover_RunPartRemoval)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PartRemover_SetGeometry)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_PartRemover_GetGeometry)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PartRemover_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_PartRemover_GetScene)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PartRemover_SetSizeThreshold)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_PartRemover_GetSizeThreshold)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PartRemover_SetUsePerMaterialSizeThresholds)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_PartRemover_GetUsePerMaterialSizeThresholds)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_PartRemover_GetPerMaterialSizeThresholds)( hIntf _interfaceptr );

	// function pointer defines for interface: Welder
	typedef hIntf ( __stdcall *FP_CreateWelder)();
	typedef void ( __stdcall *FP_Welder_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_Welder_GetScene)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_SetProcessSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_Welder_GetProcessSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_SetProcessSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_Welder_GetProcessSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_SetWeldDist)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_Welder_GetWeldDist)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_WeldGeometry)( hIntf _interfaceptr , hIntf geom );
	typedef void ( __stdcall *FP_Welder_SetUpdateExtents)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Welder_GetUpdateExtents)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_SetProgressivePasses)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_Welder_GetProgressivePasses)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_SetIgnoreVertexLocks)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Welder_GetIgnoreVertexLocks)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_SetCompactMesh)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Welder_GetCompactMesh)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_SetOnlyBorders)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Welder_GetOnlyBorders)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_SetOnlyWithinMaterial)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Welder_GetOnlyWithinMaterial)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_SetOnlyWithinSceneNode)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Welder_GetOnlyWithinSceneNode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Welder_SetOnlyBetweenSceneNodes)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_Welder_GetOnlyBetweenSceneNodes)( hIntf _interfaceptr );

	// function pointer defines for interface: TJunctionEliminator
	typedef hIntf ( __stdcall *FP_CreateTJunctionEliminator)();
	typedef void ( __stdcall *FP_TJunctionEliminator_SetScene)( hIntf _interfaceptr , hIntf value );
	typedef hIntf ( __stdcall *FP_TJunctionEliminator_GetScene)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_TJunctionEliminator_RemoveTJunctionsInGeometry)( hIntf _interfaceptr , hIntf geom );
	typedef void ( __stdcall *FP_TJunctionEliminator_RemoveTJunctions)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_TJunctionEliminator_SetWeldDist)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_TJunctionEliminator_GetWeldDist)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_TJunctionEliminator_SetOnlyObjectBoundaryFlag)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_TJunctionEliminator_GetOnlyObjectBoundaryFlag)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_TJunctionEliminator_SetProcessSelectionSetID)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_TJunctionEliminator_GetProcessSelectionSetID)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_TJunctionEliminator_SetProcessSelectionSetName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_TJunctionEliminator_GetProcessSelectionSetName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_TJunctionEliminator_SetOnlyWithinMaterialFlag)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_TJunctionEliminator_GetOnlyWithinMaterialFlag)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_TJunctionEliminator_SetOnlyWithinSceneNode)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_TJunctionEliminator_GetOnlyWithinSceneNode)( hIntf _interfaceptr );

	typedef EProcessStatus ( __stdcall *FP_Pipeline_RunSceneFromFile)( hIntf _interfaceptr , const char * input_scene , const char * output_scene , EPipelineRunMode run_mode );
	typedef EProcessStatus ( __stdcall *FP_Pipeline_RunScene)( hIntf _interfaceptr , hIntf scene , EPipelineRunMode run_mode );
	typedef void ( __stdcall *FP_Pipeline_AddMaterialCaster)( hIntf _interfaceptr , hIntf MaterialCaster , unsigned int MaterialIndex );
	typedef hIntf ( __stdcall *FP_Pipeline_AddMaterialCasterByType)( hIntf _interfaceptr , const char * CasterType , unsigned int MaterialIndex );
	typedef hIntf ( __stdcall *FP_Pipeline_GetMaterialCasters)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_Pipeline_GetMaterialCasterCount)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Pipeline_GetMaterialCasterByIndex)( hIntf _interfaceptr , unsigned int index );
	typedef hIntf ( __stdcall *FP_Pipeline_GetPipelineSettings)( hIntf _interfaceptr );
	typedef bool ( __stdcall *FP_Pipeline_SetBoolParameter)( hIntf _interfaceptr , const char * name , bool value );
	typedef bool ( __stdcall *FP_Pipeline_SetIntParameter)( hIntf _interfaceptr , const char * name , int value );
	typedef bool ( __stdcall *FP_Pipeline_SetUIntParameter)( hIntf _interfaceptr , const char * name , unsigned int value );
	typedef bool ( __stdcall *FP_Pipeline_SetDoubleParameter)( hIntf _interfaceptr , const char * name , double value );
	typedef bool ( __stdcall *FP_Pipeline_SetStringParameter)( hIntf _interfaceptr , const char * name , const char * value );
	typedef bool ( __stdcall *FP_Pipeline_SetEnumParameter)( hIntf _interfaceptr , const char * name , int value , ESettingValueType valueEnumType );
	typedef bool ( __stdcall *FP_Pipeline_SetParameterFromString)( hIntf _interfaceptr , const char * name , const char * value );
	typedef bool ( __stdcall *FP_Pipeline_GetBoolParameter)( hIntf _interfaceptr , const char * name );
	typedef int ( __stdcall *FP_Pipeline_GetIntParameter)( hIntf _interfaceptr , const char * name );
	typedef unsigned int ( __stdcall *FP_Pipeline_GetUIntParameter)( hIntf _interfaceptr , const char * name );
	typedef double ( __stdcall *FP_Pipeline_GetDoubleParameter)( hIntf _interfaceptr , const char * name );
	typedef hRMem ( __stdcall *FP_Pipeline_GetStringParameter)( hIntf _interfaceptr , const char * name );
	typedef int ( __stdcall *FP_Pipeline_GetEnumParameter)( hIntf _interfaceptr , const char * name );
	typedef ESettingValueType ( __stdcall *FP_Pipeline_GetParameterType)( hIntf _interfaceptr , const char * name );
	typedef hIntf ( __stdcall *FP_Pipeline_GetMappingImageSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Pipeline_GetMappingImage)( hIntf _interfaceptr , unsigned int materialIndex );
	typedef hIntf ( __stdcall *FP_Pipeline_GetCascadedPipelineByIndex)( hIntf _interfaceptr , unsigned int index );
	typedef void ( __stdcall *FP_Pipeline_AddCascadedPipeline)( hIntf _interfaceptr , hIntf pipeline );
	typedef void ( __stdcall *FP_Pipeline_RemoveCascadedPipeline)( hIntf _interfaceptr , hIntf pipeline );
	typedef unsigned int ( __stdcall *FP_Pipeline_GetCascadedPipelineCount)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_Pipeline_GetProcessedScene)( hIntf _interfaceptr );
	typedef real ( __stdcall *FP_Pipeline_GetPercentDone)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_Pipeline_GetActiveSelectionSets)( hIntf _interfaceptr , hIntf sets );
	typedef hIntf ( __stdcall *FP_Pipeline_NewCopy)( hIntf _interfaceptr );

	// function pointer defines for interface: PipelineBatch
	typedef hIntf ( __stdcall *FP_CreatePipelineBatch)();
	typedef void ( __stdcall *FP_PipelineBatch_SetStoragePath)( hIntf _interfaceptr , const char * path );
	typedef hRMem ( __stdcall *FP_PipelineBatch_GetStoragePath)( hIntf _interfaceptr );
	typedef unsigned int ( __stdcall *FP_PipelineBatch_Queue)( hIntf _interfaceptr , hIntf pipeline , hIntf scene );
	typedef unsigned int ( __stdcall *FP_PipelineBatch_QueueFile)( hIntf _interfaceptr , const char * pipeline , const char * scene );
	typedef EProcessStatus ( __stdcall *FP_PipelineBatch_Run)( hIntf _interfaceptr , EPipelineRunMode runMode );
	typedef hIntf ( __stdcall *FP_PipelineBatch_LoadProcessedScene)( hIntf _interfaceptr , unsigned int handle );
	typedef unsigned int ( __stdcall *FP_PipelineBatch_GetBatchCount)( hIntf _interfaceptr );
	typedef hRMem ( __stdcall *FP_PipelineBatch_GetPipelinePath)( hIntf _interfaceptr , unsigned int index );
	typedef hRMem ( __stdcall *FP_PipelineBatch_GetScenePath)( hIntf _interfaceptr , unsigned int index );
	typedef hRMem ( __stdcall *FP_PipelineBatch_GetOutputPath)( hIntf _interfaceptr , unsigned int index );
	typedef void ( __stdcall *FP_PipelineBatch_Clear)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PipelineBatch_SetCascadedRunMode)( hIntf _interfaceptr , EPipelineRunMode mode );
	typedef EPipelineRunMode ( __stdcall *FP_PipelineBatch_GetCascadedRunMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PipelineBatch_SetSimplygonBatchPath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_PipelineBatch_GetSimplygonBatchPath)( hIntf _interfaceptr );

	// function pointer defines for interface: PipelineSerializer
	typedef hIntf ( __stdcall *FP_CreatePipelineSerializer)();
	typedef hIntf ( __stdcall *FP_PipelineSerializer_LoadPipelineFromFile)( hIntf _interfaceptr , const char * path );
	typedef void ( __stdcall *FP_PipelineSerializer_SavePipelineToFile)( hIntf _interfaceptr , const char * path , hIntf pipeline );
	typedef hIntf ( __stdcall *FP_PipelineSerializer_LoadPipelineBatchFromFile)( hIntf _interfaceptr , const char * path );
	typedef void ( __stdcall *FP_PipelineSerializer_SavePipelineBatchToFile)( hIntf _interfaceptr , const char * path , hIntf batch );

	// function pointer defines for interface: ReductionPipeline
	typedef hIntf ( __stdcall *FP_CreateReductionPipeline)();
	typedef hIntf ( __stdcall *FP_ReductionPipeline_GetReductionSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionPipeline_GetRepairSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionPipeline_GetNormalCalculationSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionPipeline_GetVisibilitySettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionPipeline_GetBoneSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_ReductionPipeline_GetVertexWeightSettings)( hIntf _interfaceptr );
	typedef real ( __stdcall *FP_ReductionPipeline_GetResultDeviation)( hIntf _interfaceptr );

	// function pointer defines for interface: RemeshingLegacyPipeline
	typedef hIntf ( __stdcall *FP_CreateRemeshingLegacyPipeline)();
	typedef hIntf ( __stdcall *FP_RemeshingLegacyPipeline_GetRemeshingLegacySettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingLegacyPipeline_GetVisibilitySettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingLegacyPipeline_GetBoneSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: AggregationPipeline
	typedef hIntf ( __stdcall *FP_CreateAggregationPipeline)();
	typedef hIntf ( __stdcall *FP_AggregationPipeline_GetAggregationSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_AggregationPipeline_GetVisibilitySettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_AggregationPipeline_GetGeometryCullingSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_AggregationPipeline_GetVertexWeightSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_AggregationPipeline_GetGenerateLightmapTexCoordSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: PipelineSettings
	typedef hIntf ( __stdcall *FP_CreatePipelineSettings)();
	typedef void ( __stdcall *FP_PipelineSettings_SetTextureOutputPath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_PipelineSettings_GetTextureOutputPath)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PipelineSettings_SetSimplygonBatchPath)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_PipelineSettings_GetSimplygonBatchPath)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PipelineSettings_SetOutputMaterialName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_PipelineSettings_GetOutputMaterialName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PipelineSettings_SetOutputUniqueMaterialNames)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_PipelineSettings_GetOutputUniqueMaterialNames)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PipelineSettings_SetEmbedReferences)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_PipelineSettings_GetEmbedReferences)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PipelineSettings_SetIntermediateStep)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_PipelineSettings_GetIntermediateStep)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_PipelineSettings_SetCascadedRunMode)( hIntf _interfaceptr , EPipelineRunMode value );
	typedef EPipelineRunMode ( __stdcall *FP_PipelineSettings_GetCascadedRunMode)( hIntf _interfaceptr );

	// function pointer defines for interface: RemeshingPipeline
	typedef hIntf ( __stdcall *FP_CreateRemeshingPipeline)();
	typedef hIntf ( __stdcall *FP_RemeshingPipeline_GetRemeshingSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingPipeline_GetBoneSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingPipeline_GetGeometryCullingSettings)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_RemeshingPipeline_GetVisibilitySettings)( hIntf _interfaceptr );

	// function pointer defines for interface: PassthroughPipeline
	typedef hIntf ( __stdcall *FP_CreatePassthroughPipeline)();

	// function pointer defines for interface: GeometryDataCaster
	typedef hIntf ( __stdcall *FP_CreateGeometryDataCaster)();
	typedef hIntf ( __stdcall *FP_GeometryDataCaster_GetGeometryDataCasterSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: GeometryDataCasterSettings
	typedef hIntf ( __stdcall *FP_CreateGeometryDataCasterSettings)();
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetGeometryDataFieldType)( hIntf _interfaceptr , EGeometryDataFieldType FieldType );
	typedef EGeometryDataFieldType ( __stdcall *FP_GeometryDataCasterSettings_GetGeometryDataFieldType)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetGeometryDataFieldIndex)( hIntf _interfaceptr , unsigned int FieldIndex );
	typedef unsigned int ( __stdcall *FP_GeometryDataCasterSettings_GetGeometryDataFieldIndex)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetMappingInfR)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_GeometryDataCasterSettings_GetMappingInfR)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetMappingSupR)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_GeometryDataCasterSettings_GetMappingSupR)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetMappingInfG)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_GeometryDataCasterSettings_GetMappingInfG)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetMappingSupG)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_GeometryDataCasterSettings_GetMappingSupG)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetMappingInfB)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_GeometryDataCasterSettings_GetMappingInfB)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetMappingSupB)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_GeometryDataCasterSettings_GetMappingSupB)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetMappingInfA)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_GeometryDataCasterSettings_GetMappingInfA)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetMappingSupA)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_GeometryDataCasterSettings_GetMappingSupA)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetMappingInf)( hIntf _interfaceptr , const real *vec );
	typedef hRMem ( __stdcall *FP_GeometryDataCasterSettings_GetMappingInf)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GeometryDataCasterSettings_SetMappingSup)( hIntf _interfaceptr , const real *vec );
	typedef hRMem ( __stdcall *FP_GeometryDataCasterSettings_GetMappingSup)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_VertexWeightSettings_SetUseVertexWeightsInReducer)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_VertexWeightSettings_GetUseVertexWeightsInReducer)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VertexWeightSettings_SetUseVertexWeightsInTexcoordGenerator)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_VertexWeightSettings_GetUseVertexWeightsInTexcoordGenerator)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VertexWeightSettings_SetWeightsFromColorName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_VertexWeightSettings_GetWeightsFromColorName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VertexWeightSettings_SetWeightsFromColorLevel)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_VertexWeightSettings_GetWeightsFromColorLevel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VertexWeightSettings_SetWeightsFromColorComponent)( hIntf _interfaceptr , EColorComponent value );
	typedef EColorComponent ( __stdcall *FP_VertexWeightSettings_GetWeightsFromColorComponent)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VertexWeightSettings_SetWeightsFromColorMultiplier)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_VertexWeightSettings_GetWeightsFromColorMultiplier)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_VertexWeightSettings_SetWeightsFromColorMode)( hIntf _interfaceptr , EWeightsFromColorMode value );
	typedef EWeightsFromColorMode ( __stdcall *FP_VertexWeightSettings_GetWeightsFromColorMode)( hIntf _interfaceptr );

	// function pointer defines for interface: GenerateLightmapTexCoordSettings
	typedef hIntf ( __stdcall *FP_CreateGenerateLightmapTexCoordSettings)();
	typedef void ( __stdcall *FP_GenerateLightmapTexCoordSettings_SetGenerateLightmapTexCoord)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_GenerateLightmapTexCoordSettings_GetGenerateLightmapTexCoord)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GenerateLightmapTexCoordSettings_SetLightmapTexCoordLevel)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_GenerateLightmapTexCoordSettings_GetLightmapTexCoordLevel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GenerateLightmapTexCoordSettings_SetLightmapTexCoordName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_GenerateLightmapTexCoordSettings_GetLightmapTexCoordName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GenerateLightmapTexCoordSettings_SetChartAggregatorMode)( hIntf _interfaceptr , EChartAggregatorMode value );
	typedef EChartAggregatorMode ( __stdcall *FP_GenerateLightmapTexCoordSettings_GetChartAggregatorMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GenerateLightmapTexCoordSettings_SetTextureWidth)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_GenerateLightmapTexCoordSettings_GetTextureWidth)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GenerateLightmapTexCoordSettings_SetTextureHeight)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_GenerateLightmapTexCoordSettings_GetTextureHeight)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_GenerateLightmapTexCoordSettings_SetGutterSpace)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_GenerateLightmapTexCoordSettings_GetGutterSpace)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_ChartAggregatorSettings_SetChartAggregatorMode)( hIntf _interfaceptr , EChartAggregatorMode value );
	typedef EChartAggregatorMode ( __stdcall *FP_ChartAggregatorSettings_GetChartAggregatorMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregatorSettings_SetSurfaceAreaScale)( hIntf _interfaceptr , ESurfaceAreaScale value );
	typedef ESurfaceAreaScale ( __stdcall *FP_ChartAggregatorSettings_GetSurfaceAreaScale)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregatorSettings_SetOriginalTexCoordLevel)( hIntf _interfaceptr , rid value );
	typedef rid ( __stdcall *FP_ChartAggregatorSettings_GetOriginalTexCoordLevel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregatorSettings_SetOriginalTexCoordName)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ChartAggregatorSettings_GetOriginalTexCoordName)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregatorSettings_SetSeparateOverlappingCharts)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ChartAggregatorSettings_GetSeparateOverlappingCharts)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregatorSettings_SetOriginalChartProportionsChannel)( hIntf _interfaceptr , const char * value );
	typedef hRMem ( __stdcall *FP_ChartAggregatorSettings_GetOriginalChartProportionsChannel)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ChartAggregatorSettings_SetLockUVRotation)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ChartAggregatorSettings_GetLockUVRotation)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_ParameterizerSettings_SetMaxStretch)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ParameterizerSettings_GetMaxStretch)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ParameterizerSettings_SetLargeChartsImportance)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ParameterizerSettings_GetLargeChartsImportance)( hIntf _interfaceptr );

	// function pointer defines for interface: BillboardCloudSettings
	typedef hIntf ( __stdcall *FP_CreateBillboardCloudSettings)();
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetBillboardMode)( hIntf _interfaceptr , EBillboardMode value );
	typedef EBillboardMode ( __stdcall *FP_BillboardCloudSettings_GetBillboardMode)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetFavorVerticalPlanes)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_BillboardCloudSettings_GetFavorVerticalPlanes)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetTwoSided)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_BillboardCloudSettings_GetTwoSided)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetUseVisibilityWeights)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_BillboardCloudSettings_GetUseVisibilityWeights)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetBillboardDensity)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_BillboardCloudSettings_GetBillboardDensity)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetMaxPlaneCount)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_BillboardCloudSettings_GetMaxPlaneCount)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetGeometricComplexity)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_BillboardCloudSettings_GetGeometricComplexity)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetUpVector)( hIntf _interfaceptr , const real *value );
	typedef hRMem ( __stdcall *FP_BillboardCloudSettings_GetUpVector)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetUpVectorX)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_BillboardCloudSettings_GetUpVectorX)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetUpVectorY)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_BillboardCloudSettings_GetUpVectorY)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_BillboardCloudSettings_SetUpVectorZ)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_BillboardCloudSettings_GetUpVectorZ)( hIntf _interfaceptr );
	typedef hIntf ( __stdcall *FP_BillboardCloudSettings_GetFoliageSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: FlipbookSettings
	typedef hIntf ( __stdcall *FP_CreateFlipbookSettings)();
	typedef void ( __stdcall *FP_FlipbookSettings_SetNumberOfViews)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_FlipbookSettings_GetNumberOfViews)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FlipbookSettings_SetViewDirection)( hIntf _interfaceptr , const real *value );
	typedef hRMem ( __stdcall *FP_FlipbookSettings_GetViewDirection)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FlipbookSettings_SetViewDirectionX)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FlipbookSettings_GetViewDirectionX)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FlipbookSettings_SetViewDirectionY)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FlipbookSettings_GetViewDirectionY)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FlipbookSettings_SetViewDirectionZ)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FlipbookSettings_GetViewDirectionZ)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FlipbookSettings_SetUpVector)( hIntf _interfaceptr , const real *value );
	typedef hRMem ( __stdcall *FP_FlipbookSettings_GetUpVector)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FlipbookSettings_SetUpVectorX)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FlipbookSettings_GetUpVectorX)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FlipbookSettings_SetUpVectorY)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FlipbookSettings_GetUpVectorY)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FlipbookSettings_SetUpVectorZ)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FlipbookSettings_GetUpVectorZ)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FlipbookSettings_SetVerticalAngle)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FlipbookSettings_GetVerticalAngle)( hIntf _interfaceptr );

	// function pointer defines for interface: ImpostorFromSingleViewSettings
	typedef hIntf ( __stdcall *FP_CreateImpostorFromSingleViewSettings)();
	typedef void ( __stdcall *FP_ImpostorFromSingleViewSettings_SetUseTightFitting)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ImpostorFromSingleViewSettings_GetUseTightFitting)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImpostorFromSingleViewSettings_SetTightFittingDepthOffset)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ImpostorFromSingleViewSettings_GetTightFittingDepthOffset)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImpostorFromSingleViewSettings_SetTwoSided)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_ImpostorFromSingleViewSettings_GetTwoSided)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImpostorFromSingleViewSettings_SetViewDirection)( hIntf _interfaceptr , const real *value );
	typedef hRMem ( __stdcall *FP_ImpostorFromSingleViewSettings_GetViewDirection)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImpostorFromSingleViewSettings_SetViewDirectionX)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ImpostorFromSingleViewSettings_GetViewDirectionX)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImpostorFromSingleViewSettings_SetViewDirectionY)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ImpostorFromSingleViewSettings_GetViewDirectionY)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImpostorFromSingleViewSettings_SetViewDirectionZ)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ImpostorFromSingleViewSettings_GetViewDirectionZ)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_ImpostorFromSingleViewSettings_SetTexCoordPadding)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_ImpostorFromSingleViewSettings_GetTexCoordPadding)( hIntf _interfaceptr );

	// function pointer defines for interface: ImpostorFromSingleViewPipeline
	typedef hIntf ( __stdcall *FP_CreateImpostorFromSingleViewPipeline)();
	typedef hIntf ( __stdcall *FP_ImpostorFromSingleViewPipeline_GetImpostorFromSingleViewSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: BillboardCloudPipeline
	typedef hIntf ( __stdcall *FP_CreateBillboardCloudPipeline)();
	typedef hIntf ( __stdcall *FP_BillboardCloudPipeline_GetBillboardCloudSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: BillboardCloudVegetationPipeline
	typedef hIntf ( __stdcall *FP_CreateBillboardCloudVegetationPipeline)();
	typedef hIntf ( __stdcall *FP_BillboardCloudVegetationPipeline_GetBillboardCloudSettings)( hIntf _interfaceptr );

	// function pointer defines for interface: FlipbookPipeline
	typedef hIntf ( __stdcall *FP_CreateFlipbookPipeline)();
	typedef hIntf ( __stdcall *FP_FlipbookPipeline_GetFlipbookSettings)( hIntf _interfaceptr );

	typedef void ( __stdcall *FP_FoliageSettings_SetSeparateTrunkAndFoliage)( hIntf _interfaceptr , bool value );
	typedef bool ( __stdcall *FP_FoliageSettings_GetSeparateTrunkAndFoliage)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FoliageSettings_SetSeparateFoliageTriangleRatio)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FoliageSettings_GetSeparateFoliageTriangleRatio)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FoliageSettings_SetSeparateFoliageTriangleThreshold)( hIntf _interfaceptr , unsigned int value );
	typedef unsigned int ( __stdcall *FP_FoliageSettings_GetSeparateFoliageTriangleThreshold)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FoliageSettings_SetSeparateFoliageAreaThreshold)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FoliageSettings_GetSeparateFoliageAreaThreshold)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FoliageSettings_SetSeparateFoliageSizeThreshold)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FoliageSettings_GetSeparateFoliageSizeThreshold)( hIntf _interfaceptr );
	typedef void ( __stdcall *FP_FoliageSettings_SetTrunkReductionRatio)( hIntf _interfaceptr , real value );
	typedef real ( __stdcall *FP_FoliageSettings_GetTrunkReductionRatio)( hIntf _interfaceptr );

	// function pointer defines for interface: StringArray
	typedef hIntf ( __stdcall *FP_CreateStringArray)();
	typedef void ( __stdcall *FP_StringArray_AddItem)( hIntf _interfaceptr , const char * value );
	typedef void ( __stdcall *FP_StringArray_SetItem)( hIntf _interfaceptr , rid id , const char * value );
	typedef hRMem ( __stdcall *FP_StringArray_GetItem)( hIntf _interfaceptr , rid id );

	// function pointer defines for interface: OcclusionMeshPipeline
	typedef hIntf ( __stdcall *FP_CreateOcclusionMeshPipeline)();
	typedef hIntf ( __stdcall *FP_OcclusionMeshPipeline_GetOcclusionMeshSettings)( hIntf _interfaceptr );

	typedef ErrorHandlerBase * (__stdcall *FP_Simplygon_SetErrorHandler)( ErrorHandlerBase *handler );
	typedef hRMem (__stdcall *FP_Simplygon_GetVersion)();
	typedef void (__stdcall *FP_Simplygon_SendTelemetry)(const char* eventCategory, const char* integrationName, const char* integrationVersion, const char* contentJson);
	typedef bool (__stdcall *FP_Simplygon_WarningOccurred)();
	typedef bool (__stdcall *FP_Simplygon_ErrorOccurred)();
	typedef void (__stdcall *FP_Simplygon_GetWarningMessages)(hIntf messages);
	typedef void (__stdcall *FP_Simplygon_GetErrorMessages)(hIntf messages);
	typedef void (__stdcall *FP_Simplygon_ClearWarningMessages)();
	typedef void (__stdcall *FP_Simplygon_ClearErrorMessages)();
	typedef void (__stdcall *FP_Simplygon_SetGlobalBoolSetting)(const char* setting, bool value);
	typedef void (__stdcall *FP_Simplygon_SetGlobalIntSetting)(const char* setting, int value);
	typedef void (__stdcall *FP_Simplygon_SetGlobalFloatSetting)(const char* setting, double value);
	typedef void (__stdcall *FP_Simplygon_SetGlobalStringSetting)(const char* setting, const char* value);
	typedef bool (__stdcall *FP_Simplygon_GetGlobalBoolSetting)(const char* setting);
	typedef int (__stdcall *FP_Simplygon_GetGlobalIntSetting)(const char* setting);
	typedef double (__stdcall *FP_Simplygon_GetGlobalFloatSetting)(const char* setting);
	typedef void* (__stdcall *FP_Simplygon_GetGlobalStringSetting)(const char* setting);
	typedef void (__stdcall *FP_Simplygon_SetThreadLocalStringSetting)(const char* setting, const char* value);
	typedef void* (__stdcall *FP_Simplygon_GetThreadLocalStringSetting)(const char* setting);
	typedef void* (__stdcall *FP_Simplygon_EnableLogToFile)(int logLevel, unsigned int logDecorationMask, const char* logFileName );

	class APIInterfacePtrs
	{
		public:
		FP_ReturnData_AddRef fpReturnData_AddRef = nullptr;
		FP_ReturnData_Release fpReturnData_Release = nullptr;
		FP_ReturnData_GetByteSize fpReturnData_GetByteSize = nullptr;
		FP_ReturnData_GetRawPointer fpReturnData_GetRawPointer = nullptr;
		FP_Object_GetClass fpObject_GetClass = nullptr;
		FP_Object_IsA fpObject_IsA = nullptr;
		FP_Object_PrintInfo fpObject_PrintInfo = nullptr;
		FP_Object_AddRef fpObject_AddRef = nullptr;
		FP_Object_Release fpObject_Release = nullptr;
		FP_Object_SetName fpObject_SetName = nullptr;
		FP_Object_GetName fpObject_GetName = nullptr;
		FP_Object_AddObserver fpObject_AddObserver = nullptr;
		FP_Object_RemoveObserver fpObject_RemoveObserver = nullptr;
		FP_Object_GetUserComponentArea fpObject_GetUserComponentArea = nullptr;
		FP_Object_SetUserData fpObject_SetUserData = nullptr;
		FP_Object_GetUserData fpObject_GetUserData = nullptr;
		FP_Simplygon_RegisterAccessor fpSimplygon_RegisterAccessor = nullptr;
		FP_Simplygon_UnregisterAccessor fpSimplygon_UnregisterAccessor = nullptr;
		FP_Array_NewCopy fpArray_NewCopy = nullptr;
		FP_Array_NewPackedCopy fpArray_NewPackedCopy = nullptr;
		FP_Array_DeepCopy fpArray_DeepCopy = nullptr;
		FP_Array_IndexedCopy fpArray_IndexedCopy = nullptr;
		FP_Array_SetTupleSize fpArray_SetTupleSize = nullptr;
		FP_Array_GetTupleSize fpArray_GetTupleSize = nullptr;
		FP_Array_SetItemCount fpArray_SetItemCount = nullptr;
		FP_Array_GetItemCount fpArray_GetItemCount = nullptr;
		FP_Array_GetMaxItemId fpArray_GetMaxItemId = nullptr;
		FP_Array_Clear fpArray_Clear = nullptr;
		FP_Array_IsEmpty fpArray_IsEmpty = nullptr;
		FP_Array_SetTupleCount fpArray_SetTupleCount = nullptr;
		FP_Array_GetTupleCount fpArray_GetTupleCount = nullptr;
		FP_Array_GetMaxTupleId fpArray_GetMaxTupleId = nullptr;
		FP_Array_GetBaseType fpArray_GetBaseType = nullptr;
		FP_Array_AppendArray fpArray_AppendArray = nullptr;
		FP_Array_ExtractTuples fpArray_ExtractTuples = nullptr;
		FP_Array_CopyTuple fpArray_CopyTuple = nullptr;
		FP_Array_CompareTuples fpArray_CompareTuples = nullptr;
		FP_Array_CopyRange fpArray_CopyRange = nullptr;
		FP_Array_SetAlternativeName fpArray_SetAlternativeName = nullptr;
		FP_Array_GetAlternativeName fpArray_GetAlternativeName = nullptr;
		FP_ValueArray_SetRealItem fpValueArray_SetRealItem = nullptr;
		FP_ValueArray_GetRealItem fpValueArray_GetRealItem = nullptr;
		FP_CreateBoolArray fpCreateBoolArray = nullptr;
		FP_BoolArray_AddItem fpBoolArray_AddItem = nullptr;
		FP_BoolArray_SetItem fpBoolArray_SetItem = nullptr;
		FP_BoolArray_GetItem fpBoolArray_GetItem = nullptr;
		FP_BoolArray_AddTuple fpBoolArray_AddTuple = nullptr;
		FP_BoolArray_SetTuple fpBoolArray_SetTuple = nullptr;
		FP_BoolArray_GetTuple fpBoolArray_GetTuple = nullptr;
		FP_BoolArray_GetData fpBoolArray_GetData = nullptr;
		FP_BoolArray_GetDataRange fpBoolArray_GetDataRange = nullptr;
		FP_BoolArray_SetData fpBoolArray_SetData = nullptr;
		FP_BoolArray_SetDataRange fpBoolArray_SetDataRange = nullptr;
		FP_BoolArray_SetDataFromMemoryPtr fpBoolArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateCharArray fpCreateCharArray = nullptr;
		FP_CharArray_AddItem fpCharArray_AddItem = nullptr;
		FP_CharArray_SetItem fpCharArray_SetItem = nullptr;
		FP_CharArray_GetItem fpCharArray_GetItem = nullptr;
		FP_CharArray_AddTuple fpCharArray_AddTuple = nullptr;
		FP_CharArray_SetTuple fpCharArray_SetTuple = nullptr;
		FP_CharArray_GetTuple fpCharArray_GetTuple = nullptr;
		FP_CharArray_GetData fpCharArray_GetData = nullptr;
		FP_CharArray_GetDataRange fpCharArray_GetDataRange = nullptr;
		FP_CharArray_SetData fpCharArray_SetData = nullptr;
		FP_CharArray_SetDataRange fpCharArray_SetDataRange = nullptr;
		FP_CharArray_SetDataFromMemoryPtr fpCharArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateDoubleArray fpCreateDoubleArray = nullptr;
		FP_DoubleArray_AddItem fpDoubleArray_AddItem = nullptr;
		FP_DoubleArray_SetItem fpDoubleArray_SetItem = nullptr;
		FP_DoubleArray_GetItem fpDoubleArray_GetItem = nullptr;
		FP_DoubleArray_AddTuple fpDoubleArray_AddTuple = nullptr;
		FP_DoubleArray_SetTuple fpDoubleArray_SetTuple = nullptr;
		FP_DoubleArray_GetTuple fpDoubleArray_GetTuple = nullptr;
		FP_DoubleArray_GetData fpDoubleArray_GetData = nullptr;
		FP_DoubleArray_GetDataRange fpDoubleArray_GetDataRange = nullptr;
		FP_DoubleArray_SetData fpDoubleArray_SetData = nullptr;
		FP_DoubleArray_SetDataRange fpDoubleArray_SetDataRange = nullptr;
		FP_DoubleArray_SetDataFromMemoryPtr fpDoubleArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateFloatArray fpCreateFloatArray = nullptr;
		FP_FloatArray_AddItem fpFloatArray_AddItem = nullptr;
		FP_FloatArray_SetItem fpFloatArray_SetItem = nullptr;
		FP_FloatArray_GetItem fpFloatArray_GetItem = nullptr;
		FP_FloatArray_AddTuple fpFloatArray_AddTuple = nullptr;
		FP_FloatArray_SetTuple fpFloatArray_SetTuple = nullptr;
		FP_FloatArray_GetTuple fpFloatArray_GetTuple = nullptr;
		FP_FloatArray_GetData fpFloatArray_GetData = nullptr;
		FP_FloatArray_GetDataRange fpFloatArray_GetDataRange = nullptr;
		FP_FloatArray_SetData fpFloatArray_SetData = nullptr;
		FP_FloatArray_SetDataRange fpFloatArray_SetDataRange = nullptr;
		FP_FloatArray_SetDataFromMemoryPtr fpFloatArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateIntArray fpCreateIntArray = nullptr;
		FP_IntArray_AddItem fpIntArray_AddItem = nullptr;
		FP_IntArray_SetItem fpIntArray_SetItem = nullptr;
		FP_IntArray_GetItem fpIntArray_GetItem = nullptr;
		FP_IntArray_AddTuple fpIntArray_AddTuple = nullptr;
		FP_IntArray_SetTuple fpIntArray_SetTuple = nullptr;
		FP_IntArray_GetTuple fpIntArray_GetTuple = nullptr;
		FP_IntArray_GetData fpIntArray_GetData = nullptr;
		FP_IntArray_GetDataRange fpIntArray_GetDataRange = nullptr;
		FP_IntArray_SetData fpIntArray_SetData = nullptr;
		FP_IntArray_SetDataRange fpIntArray_SetDataRange = nullptr;
		FP_IntArray_SetDataFromMemoryPtr fpIntArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateLongArray fpCreateLongArray = nullptr;
		FP_LongArray_AddItem fpLongArray_AddItem = nullptr;
		FP_LongArray_SetItem fpLongArray_SetItem = nullptr;
		FP_LongArray_GetItem fpLongArray_GetItem = nullptr;
		FP_LongArray_AddTuple fpLongArray_AddTuple = nullptr;
		FP_LongArray_SetTuple fpLongArray_SetTuple = nullptr;
		FP_LongArray_GetTuple fpLongArray_GetTuple = nullptr;
		FP_LongArray_GetData fpLongArray_GetData = nullptr;
		FP_LongArray_GetDataRange fpLongArray_GetDataRange = nullptr;
		FP_LongArray_SetData fpLongArray_SetData = nullptr;
		FP_LongArray_SetDataRange fpLongArray_SetDataRange = nullptr;
		FP_LongArray_SetDataFromMemoryPtr fpLongArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateRealArray fpCreateRealArray = nullptr;
		FP_RealArray_AddItem fpRealArray_AddItem = nullptr;
		FP_RealArray_SetItem fpRealArray_SetItem = nullptr;
		FP_RealArray_GetItem fpRealArray_GetItem = nullptr;
		FP_RealArray_AddTuple fpRealArray_AddTuple = nullptr;
		FP_RealArray_SetTuple fpRealArray_SetTuple = nullptr;
		FP_RealArray_GetTuple fpRealArray_GetTuple = nullptr;
		FP_RealArray_GetData fpRealArray_GetData = nullptr;
		FP_RealArray_GetDataRange fpRealArray_GetDataRange = nullptr;
		FP_RealArray_SetData fpRealArray_SetData = nullptr;
		FP_RealArray_SetDataRange fpRealArray_SetDataRange = nullptr;
		FP_RealArray_SetDataFromMemoryPtr fpRealArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateRidArray fpCreateRidArray = nullptr;
		FP_RidArray_AddItem fpRidArray_AddItem = nullptr;
		FP_RidArray_SetItem fpRidArray_SetItem = nullptr;
		FP_RidArray_GetItem fpRidArray_GetItem = nullptr;
		FP_RidArray_AddTuple fpRidArray_AddTuple = nullptr;
		FP_RidArray_SetTuple fpRidArray_SetTuple = nullptr;
		FP_RidArray_GetTuple fpRidArray_GetTuple = nullptr;
		FP_RidArray_GetData fpRidArray_GetData = nullptr;
		FP_RidArray_GetDataRange fpRidArray_GetDataRange = nullptr;
		FP_RidArray_SetData fpRidArray_SetData = nullptr;
		FP_RidArray_SetDataRange fpRidArray_SetDataRange = nullptr;
		FP_RidArray_SetDataFromMemoryPtr fpRidArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateShortArray fpCreateShortArray = nullptr;
		FP_ShortArray_AddItem fpShortArray_AddItem = nullptr;
		FP_ShortArray_SetItem fpShortArray_SetItem = nullptr;
		FP_ShortArray_GetItem fpShortArray_GetItem = nullptr;
		FP_ShortArray_AddTuple fpShortArray_AddTuple = nullptr;
		FP_ShortArray_SetTuple fpShortArray_SetTuple = nullptr;
		FP_ShortArray_GetTuple fpShortArray_GetTuple = nullptr;
		FP_ShortArray_GetData fpShortArray_GetData = nullptr;
		FP_ShortArray_GetDataRange fpShortArray_GetDataRange = nullptr;
		FP_ShortArray_SetData fpShortArray_SetData = nullptr;
		FP_ShortArray_SetDataRange fpShortArray_SetDataRange = nullptr;
		FP_ShortArray_SetDataFromMemoryPtr fpShortArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateUnsignedCharArray fpCreateUnsignedCharArray = nullptr;
		FP_UnsignedCharArray_AddItem fpUnsignedCharArray_AddItem = nullptr;
		FP_UnsignedCharArray_SetItem fpUnsignedCharArray_SetItem = nullptr;
		FP_UnsignedCharArray_GetItem fpUnsignedCharArray_GetItem = nullptr;
		FP_UnsignedCharArray_AddTuple fpUnsignedCharArray_AddTuple = nullptr;
		FP_UnsignedCharArray_SetTuple fpUnsignedCharArray_SetTuple = nullptr;
		FP_UnsignedCharArray_GetTuple fpUnsignedCharArray_GetTuple = nullptr;
		FP_UnsignedCharArray_GetData fpUnsignedCharArray_GetData = nullptr;
		FP_UnsignedCharArray_GetDataRange fpUnsignedCharArray_GetDataRange = nullptr;
		FP_UnsignedCharArray_SetData fpUnsignedCharArray_SetData = nullptr;
		FP_UnsignedCharArray_SetDataRange fpUnsignedCharArray_SetDataRange = nullptr;
		FP_UnsignedCharArray_SetDataFromMemoryPtr fpUnsignedCharArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateUnsignedIntArray fpCreateUnsignedIntArray = nullptr;
		FP_UnsignedIntArray_AddItem fpUnsignedIntArray_AddItem = nullptr;
		FP_UnsignedIntArray_SetItem fpUnsignedIntArray_SetItem = nullptr;
		FP_UnsignedIntArray_GetItem fpUnsignedIntArray_GetItem = nullptr;
		FP_UnsignedIntArray_AddTuple fpUnsignedIntArray_AddTuple = nullptr;
		FP_UnsignedIntArray_SetTuple fpUnsignedIntArray_SetTuple = nullptr;
		FP_UnsignedIntArray_GetTuple fpUnsignedIntArray_GetTuple = nullptr;
		FP_UnsignedIntArray_GetData fpUnsignedIntArray_GetData = nullptr;
		FP_UnsignedIntArray_GetDataRange fpUnsignedIntArray_GetDataRange = nullptr;
		FP_UnsignedIntArray_SetData fpUnsignedIntArray_SetData = nullptr;
		FP_UnsignedIntArray_SetDataRange fpUnsignedIntArray_SetDataRange = nullptr;
		FP_UnsignedIntArray_SetDataFromMemoryPtr fpUnsignedIntArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateUnsignedLongArray fpCreateUnsignedLongArray = nullptr;
		FP_UnsignedLongArray_AddItem fpUnsignedLongArray_AddItem = nullptr;
		FP_UnsignedLongArray_SetItem fpUnsignedLongArray_SetItem = nullptr;
		FP_UnsignedLongArray_GetItem fpUnsignedLongArray_GetItem = nullptr;
		FP_UnsignedLongArray_AddTuple fpUnsignedLongArray_AddTuple = nullptr;
		FP_UnsignedLongArray_SetTuple fpUnsignedLongArray_SetTuple = nullptr;
		FP_UnsignedLongArray_GetTuple fpUnsignedLongArray_GetTuple = nullptr;
		FP_UnsignedLongArray_GetData fpUnsignedLongArray_GetData = nullptr;
		FP_UnsignedLongArray_GetDataRange fpUnsignedLongArray_GetDataRange = nullptr;
		FP_UnsignedLongArray_SetData fpUnsignedLongArray_SetData = nullptr;
		FP_UnsignedLongArray_SetDataRange fpUnsignedLongArray_SetDataRange = nullptr;
		FP_UnsignedLongArray_SetDataFromMemoryPtr fpUnsignedLongArray_SetDataFromMemoryPtr = nullptr;
		FP_CreateUnsignedShortArray fpCreateUnsignedShortArray = nullptr;
		FP_UnsignedShortArray_AddItem fpUnsignedShortArray_AddItem = nullptr;
		FP_UnsignedShortArray_SetItem fpUnsignedShortArray_SetItem = nullptr;
		FP_UnsignedShortArray_GetItem fpUnsignedShortArray_GetItem = nullptr;
		FP_UnsignedShortArray_AddTuple fpUnsignedShortArray_AddTuple = nullptr;
		FP_UnsignedShortArray_SetTuple fpUnsignedShortArray_SetTuple = nullptr;
		FP_UnsignedShortArray_GetTuple fpUnsignedShortArray_GetTuple = nullptr;
		FP_UnsignedShortArray_GetData fpUnsignedShortArray_GetData = nullptr;
		FP_UnsignedShortArray_GetDataRange fpUnsignedShortArray_GetDataRange = nullptr;
		FP_UnsignedShortArray_SetData fpUnsignedShortArray_SetData = nullptr;
		FP_UnsignedShortArray_SetDataRange fpUnsignedShortArray_SetDataRange = nullptr;
		FP_UnsignedShortArray_SetDataFromMemoryPtr fpUnsignedShortArray_SetDataFromMemoryPtr = nullptr;
		FP_ChunkedImageData_NewCopy fpChunkedImageData_NewCopy = nullptr;
		FP_ChunkedImageData_DeepCopy fpChunkedImageData_DeepCopy = nullptr;
		FP_ChunkedImageData_SetTemplateImage fpChunkedImageData_SetTemplateImage = nullptr;
		FP_ChunkedImageData_GetTemplateXSize fpChunkedImageData_GetTemplateXSize = nullptr;
		FP_ChunkedImageData_GetTemplateYSize fpChunkedImageData_GetTemplateYSize = nullptr;
		FP_ChunkedImageData_GetTemplateZSize fpChunkedImageData_GetTemplateZSize = nullptr;
		FP_ChunkedImageData_GetXSize fpChunkedImageData_GetXSize = nullptr;
		FP_ChunkedImageData_GetYSize fpChunkedImageData_GetYSize = nullptr;
		FP_ChunkedImageData_GetZSize fpChunkedImageData_GetZSize = nullptr;
		FP_ChunkedImageData_Set1DSize fpChunkedImageData_Set1DSize = nullptr;
		FP_ChunkedImageData_Set2DSize fpChunkedImageData_Set2DSize = nullptr;
		FP_ChunkedImageData_Set3DSize fpChunkedImageData_Set3DSize = nullptr;
		FP_ChunkedImageData_GetTotalXSize fpChunkedImageData_GetTotalXSize = nullptr;
		FP_ChunkedImageData_GetTotalYSize fpChunkedImageData_GetTotalYSize = nullptr;
		FP_ChunkedImageData_GetTotalZSize fpChunkedImageData_GetTotalZSize = nullptr;
		FP_ChunkedImageData_Reset fpChunkedImageData_Reset = nullptr;
		FP_ChunkedImageData_LockChunk1D fpChunkedImageData_LockChunk1D = nullptr;
		FP_ChunkedImageData_LockChunk2D fpChunkedImageData_LockChunk2D = nullptr;
		FP_ChunkedImageData_LockChunk3D fpChunkedImageData_LockChunk3D = nullptr;
		FP_ChunkedImageData_IsChunkLocked1D fpChunkedImageData_IsChunkLocked1D = nullptr;
		FP_ChunkedImageData_IsChunkLocked2D fpChunkedImageData_IsChunkLocked2D = nullptr;
		FP_ChunkedImageData_IsChunkLocked3D fpChunkedImageData_IsChunkLocked3D = nullptr;
		FP_ChunkedImageData_UnlockChunk1D fpChunkedImageData_UnlockChunk1D = nullptr;
		FP_ChunkedImageData_UnlockChunk2D fpChunkedImageData_UnlockChunk2D = nullptr;
		FP_ChunkedImageData_UnlockChunk3D fpChunkedImageData_UnlockChunk3D = nullptr;
		FP_CreateDirectXRenderer fpCreateDirectXRenderer = nullptr;
		FP_DirectXRenderer_CreatePreviewer fpDirectXRenderer_CreatePreviewer = nullptr;
		FP_DirectXRenderer_RenderAlongCameraPathAndStorePics fpDirectXRenderer_RenderAlongCameraPathAndStorePics = nullptr;
		FP_DirectXRenderer_SetRenderWireFrameMode fpDirectXRenderer_SetRenderWireFrameMode = nullptr;
		FP_DirectXRenderer_SetBackgroundColor fpDirectXRenderer_SetBackgroundColor = nullptr;
		FP_DirectXRenderer_GetBackgroundColor fpDirectXRenderer_GetBackgroundColor = nullptr;
		FP_DirectXRenderer_SetUseInMemoryShaderGeneration fpDirectXRenderer_SetUseInMemoryShaderGeneration = nullptr;
		FP_DirectXRenderer_GetUseInMemoryShaderGeneration fpDirectXRenderer_GetUseInMemoryShaderGeneration = nullptr;
		FP_DirectXRenderer_LoadGeometryData fpDirectXRenderer_LoadGeometryData = nullptr;
		FP_DirectXRenderer_LoadGeometryDataWithMaterialShadingNetwork fpDirectXRenderer_LoadGeometryDataWithMaterialShadingNetwork = nullptr;
		FP_DirectXRenderer_SetScene fpDirectXRenderer_SetScene = nullptr;
		FP_DirectXRenderer_InitializeSceneRenderData fpDirectXRenderer_InitializeSceneRenderData = nullptr;
		FP_FieldData_NewCopy fpFieldData_NewCopy = nullptr;
		FP_FieldData_NewPackedCopy fpFieldData_NewPackedCopy = nullptr;
		FP_FieldData_DeepCopy fpFieldData_DeepCopy = nullptr;
		FP_FieldData_IsSetupIdenticalTo fpFieldData_IsSetupIdenticalTo = nullptr;
		FP_FieldData_IndexedCopy fpFieldData_IndexedCopy = nullptr;
		FP_FieldData_IndexedCombine fpFieldData_IndexedCombine = nullptr;
		FP_FieldData_IndexedCombine3 fpFieldData_IndexedCombine3 = nullptr;
		FP_FieldData_Clear fpFieldData_Clear = nullptr;
		FP_FieldData_RemoveAllFields fpFieldData_RemoveAllFields = nullptr;
		FP_FieldData_IsEmpty fpFieldData_IsEmpty = nullptr;
		FP_FieldData_AppendTuples fpFieldData_AppendTuples = nullptr;
		FP_FieldData_ExtractTuples fpFieldData_ExtractTuples = nullptr;
		FP_FieldData_AddField fpFieldData_AddField = nullptr;
		FP_FieldData_AddBaseTypeField fpFieldData_AddBaseTypeField = nullptr;
		FP_FieldData_GetField fpFieldData_GetField = nullptr;
		FP_FieldData_GetFieldWithId fpFieldData_GetFieldWithId = nullptr;
		FP_FieldData_RemoveField fpFieldData_RemoveField = nullptr;
		FP_FieldData_SafeRemoveField fpFieldData_SafeRemoveField = nullptr;
		FP_FieldData_GetFieldCount fpFieldData_GetFieldCount = nullptr;
		FP_FieldData_GetMaxFieldId fpFieldData_GetMaxFieldId = nullptr;
		FP_FieldData_GetFirstFieldHandle fpFieldData_GetFirstFieldHandle = nullptr;
		FP_FieldData_GetNextFieldHandle fpFieldData_GetNextFieldHandle = nullptr;
		FP_FieldData_GetFieldWithHandle fpFieldData_GetFieldWithHandle = nullptr;
		FP_FieldData_SetTupleCount fpFieldData_SetTupleCount = nullptr;
		FP_FieldData_GetTupleCount fpFieldData_GetTupleCount = nullptr;
		FP_FieldData_AddTupleCount fpFieldData_AddTupleCount = nullptr;
		FP_FieldData_GetMaxTupleId fpFieldData_GetMaxTupleId = nullptr;
		FP_FieldData_CopyTuple fpFieldData_CopyTuple = nullptr;
		FP_FieldData_CopyCombineTuples fpFieldData_CopyCombineTuples = nullptr;
		FP_FieldData_CopyCombine3Tuples fpFieldData_CopyCombine3Tuples = nullptr;
		FP_FieldData_CopyRange fpFieldData_CopyRange = nullptr;
		FP_CreateGeometryData fpCreateGeometryData = nullptr;
		FP_GeometryData_NewCopy fpGeometryData_NewCopy = nullptr;
		FP_GeometryData_NewPackedCopy fpGeometryData_NewPackedCopy = nullptr;
		FP_GeometryData_DeepCopy fpGeometryData_DeepCopy = nullptr;
		FP_GeometryData_SetVertexCount fpGeometryData_SetVertexCount = nullptr;
		FP_GeometryData_GetVertexCount fpGeometryData_GetVertexCount = nullptr;
		FP_GeometryData_AddVertices fpGeometryData_AddVertices = nullptr;
		FP_GeometryData_SetTriangleCount fpGeometryData_SetTriangleCount = nullptr;
		FP_GeometryData_GetTriangleCount fpGeometryData_GetTriangleCount = nullptr;
		FP_GeometryData_AddTriangles fpGeometryData_AddTriangles = nullptr;
		FP_GeometryData_FindEdgeIdsFromVertexPairs fpGeometryData_FindEdgeIdsFromVertexPairs = nullptr;
		FP_GeometryData_GetCoords fpGeometryData_GetCoords = nullptr;
		FP_GeometryData_AddVertexLocks fpGeometryData_AddVertexLocks = nullptr;
		FP_GeometryData_RemoveVertexLocks fpGeometryData_RemoveVertexLocks = nullptr;
		FP_GeometryData_GetVertexLocks fpGeometryData_GetVertexLocks = nullptr;
		FP_GeometryData_AddBoneWeights fpGeometryData_AddBoneWeights = nullptr;
		FP_GeometryData_RemoveBoneWeights fpGeometryData_RemoveBoneWeights = nullptr;
		FP_GeometryData_GetBoneWeights fpGeometryData_GetBoneWeights = nullptr;
		FP_GeometryData_GetBoneIds fpGeometryData_GetBoneIds = nullptr;
		FP_GeometryData_AddVertexWeights fpGeometryData_AddVertexWeights = nullptr;
		FP_GeometryData_RemoveVertexWeights fpGeometryData_RemoveVertexWeights = nullptr;
		FP_GeometryData_GetVertexWeights fpGeometryData_GetVertexWeights = nullptr;
		FP_GeometryData_AddUserVertexField fpGeometryData_AddUserVertexField = nullptr;
		FP_GeometryData_RemoveUserVertexField fpGeometryData_RemoveUserVertexField = nullptr;
		FP_GeometryData_GetUserVertexField fpGeometryData_GetUserVertexField = nullptr;
		FP_GeometryData_AddBaseTypeUserVertexField fpGeometryData_AddBaseTypeUserVertexField = nullptr;
		FP_GeometryData_CopyVertex fpGeometryData_CopyVertex = nullptr;
		FP_GeometryData_CopyCombineVertices fpGeometryData_CopyCombineVertices = nullptr;
		FP_GeometryData_CopyCombine3Vertices fpGeometryData_CopyCombine3Vertices = nullptr;
		FP_GeometryData_GetVertices fpGeometryData_GetVertices = nullptr;
		FP_GeometryData_GetVertexIds fpGeometryData_GetVertexIds = nullptr;
		FP_GeometryData_AddTexCoords fpGeometryData_AddTexCoords = nullptr;
		FP_GeometryData_AddNamedTexCoords fpGeometryData_AddNamedTexCoords = nullptr;
		FP_GeometryData_RemoveTexCoords fpGeometryData_RemoveTexCoords = nullptr;
		FP_GeometryData_RemoveNamedTexCoords fpGeometryData_RemoveNamedTexCoords = nullptr;
		FP_GeometryData_GetTexCoords fpGeometryData_GetTexCoords = nullptr;
		FP_GeometryData_GetNamedTexCoords fpGeometryData_GetNamedTexCoords = nullptr;
		FP_GeometryData_AddTangents fpGeometryData_AddTangents = nullptr;
		FP_GeometryData_RemoveTangents fpGeometryData_RemoveTangents = nullptr;
		FP_GeometryData_GetTangents fpGeometryData_GetTangents = nullptr;
		FP_GeometryData_GetBitangents fpGeometryData_GetBitangents = nullptr;
		FP_GeometryData_AddNormals fpGeometryData_AddNormals = nullptr;
		FP_GeometryData_RemoveNormals fpGeometryData_RemoveNormals = nullptr;
		FP_GeometryData_GetNormals fpGeometryData_GetNormals = nullptr;
		FP_GeometryData_AddColors fpGeometryData_AddColors = nullptr;
		FP_GeometryData_AddNamedColors fpGeometryData_AddNamedColors = nullptr;
		FP_GeometryData_RemoveColors fpGeometryData_RemoveColors = nullptr;
		FP_GeometryData_RemoveNamedColors fpGeometryData_RemoveNamedColors = nullptr;
		FP_GeometryData_GetColors fpGeometryData_GetColors = nullptr;
		FP_GeometryData_GetNamedColors fpGeometryData_GetNamedColors = nullptr;
		FP_GeometryData_AddUserCornerField fpGeometryData_AddUserCornerField = nullptr;
		FP_GeometryData_RemoveUserCornerField fpGeometryData_RemoveUserCornerField = nullptr;
		FP_GeometryData_GetUserCornerField fpGeometryData_GetUserCornerField = nullptr;
		FP_GeometryData_AddBaseTypeUserCornerField fpGeometryData_AddBaseTypeUserCornerField = nullptr;
		FP_GeometryData_CopyCorner fpGeometryData_CopyCorner = nullptr;
		FP_GeometryData_CopyCombineCorners fpGeometryData_CopyCombineCorners = nullptr;
		FP_GeometryData_CopyCombine3Corners fpGeometryData_CopyCombine3Corners = nullptr;
		FP_GeometryData_GetCorners fpGeometryData_GetCorners = nullptr;
		FP_GeometryData_AddMaterialIds fpGeometryData_AddMaterialIds = nullptr;
		FP_GeometryData_RemoveMaterialIds fpGeometryData_RemoveMaterialIds = nullptr;
		FP_GeometryData_GetMaterialIds fpGeometryData_GetMaterialIds = nullptr;
		FP_GeometryData_AddGroupIds fpGeometryData_AddGroupIds = nullptr;
		FP_GeometryData_RemoveGroupIds fpGeometryData_RemoveGroupIds = nullptr;
		FP_GeometryData_GetGroupIds fpGeometryData_GetGroupIds = nullptr;
		FP_GeometryData_AddUserTriangleField fpGeometryData_AddUserTriangleField = nullptr;
		FP_GeometryData_RemoveUserTriangleField fpGeometryData_RemoveUserTriangleField = nullptr;
		FP_GeometryData_GetUserTriangleField fpGeometryData_GetUserTriangleField = nullptr;
		FP_GeometryData_AddBaseTypeUserTriangleField fpGeometryData_AddBaseTypeUserTriangleField = nullptr;
		FP_GeometryData_CopyTriangle fpGeometryData_CopyTriangle = nullptr;
		FP_GeometryData_CopyCombineTriangles fpGeometryData_CopyCombineTriangles = nullptr;
		FP_GeometryData_CopyCombine3Triangles fpGeometryData_CopyCombine3Triangles = nullptr;
		FP_GeometryData_GetTriangles fpGeometryData_GetTriangles = nullptr;
		FP_GeometryData_AddCustomField fpGeometryData_AddCustomField = nullptr;
		FP_GeometryData_RemoveCustomField fpGeometryData_RemoveCustomField = nullptr;
		FP_GeometryData_GetCustomField fpGeometryData_GetCustomField = nullptr;
		FP_GeometryData_AddBaseTypeCustomField fpGeometryData_AddBaseTypeCustomField = nullptr;
		FP_GeometryData_CleanupNanValues fpGeometryData_CleanupNanValues = nullptr;
		FP_GeometryData_CleanupInvalidTriangles fpGeometryData_CleanupInvalidTriangles = nullptr;
		FP_GeometryData_FindNamedTexCoordsIndex fpGeometryData_FindNamedTexCoordsIndex = nullptr;
		FP_GeometryData_FindNamedColorsIndex fpGeometryData_FindNamedColorsIndex = nullptr;
		FP_GeometryData_CreateAABB fpGeometryData_CreateAABB = nullptr;
		FP_GeometryData_ExpandVertices fpGeometryData_ExpandVertices = nullptr;
		FP_GeometryData_ExtractRange fpGeometryData_ExtractRange = nullptr;
		FP_GeometryData_ExtractTriangles fpGeometryData_ExtractTriangles = nullptr;
		FP_GeometryData_AppendGeometry fpGeometryData_AppendGeometry = nullptr;
		FP_GeometryData_Compact fpGeometryData_Compact = nullptr;
		FP_GeometryData_Weld fpGeometryData_Weld = nullptr;
		FP_GeometryData_GetInf fpGeometryData_GetInf = nullptr;
		FP_GeometryData_SetInf fpGeometryData_SetInf = nullptr;
		FP_GeometryData_GetSup fpGeometryData_GetSup = nullptr;
		FP_GeometryData_SetSup fpGeometryData_SetSup = nullptr;
		FP_GeometryData_CalculateExtents fpGeometryData_CalculateExtents = nullptr;
		FP_GeometryData_ExtentsContainCoords fpGeometryData_ExtentsContainCoords = nullptr;
		FP_GeometryData_Transform fpGeometryData_Transform = nullptr;
		FP_GeometryData_DetectEdgeNeighbours fpGeometryData_DetectEdgeNeighbours = nullptr;
		FP_GeometryData_ConvertHandedness fpGeometryData_ConvertHandedness = nullptr;
		FP_GeometryData_ChangeWinding fpGeometryData_ChangeWinding = nullptr;
		FP_CreatePackedGeometryData fpCreatePackedGeometryData = nullptr;
		FP_PackedGeometryData_NewCopy fpPackedGeometryData_NewCopy = nullptr;
		FP_PackedGeometryData_NewUnpackedCopy fpPackedGeometryData_NewUnpackedCopy = nullptr;
		FP_PackedGeometryData_DeepCopy fpPackedGeometryData_DeepCopy = nullptr;
		FP_PackedGeometryData_AppendPackedGeometry fpPackedGeometryData_AppendPackedGeometry = nullptr;
		FP_PackedGeometryData_SetVertexCount fpPackedGeometryData_SetVertexCount = nullptr;
		FP_PackedGeometryData_GetVertexCount fpPackedGeometryData_GetVertexCount = nullptr;
		FP_PackedGeometryData_AddVertices fpPackedGeometryData_AddVertices = nullptr;
		FP_PackedGeometryData_SetTriangleCount fpPackedGeometryData_SetTriangleCount = nullptr;
		FP_PackedGeometryData_GetTriangleCount fpPackedGeometryData_GetTriangleCount = nullptr;
		FP_PackedGeometryData_AddTriangles fpPackedGeometryData_AddTriangles = nullptr;
		FP_PackedGeometryData_GetCoords fpPackedGeometryData_GetCoords = nullptr;
		FP_PackedGeometryData_AddVertexLocks fpPackedGeometryData_AddVertexLocks = nullptr;
		FP_PackedGeometryData_RemoveVertexLocks fpPackedGeometryData_RemoveVertexLocks = nullptr;
		FP_PackedGeometryData_GetVertexLocks fpPackedGeometryData_GetVertexLocks = nullptr;
		FP_PackedGeometryData_AddBoneWeights fpPackedGeometryData_AddBoneWeights = nullptr;
		FP_PackedGeometryData_RemoveBoneWeights fpPackedGeometryData_RemoveBoneWeights = nullptr;
		FP_PackedGeometryData_GetBoneWeights fpPackedGeometryData_GetBoneWeights = nullptr;
		FP_PackedGeometryData_GetBoneIds fpPackedGeometryData_GetBoneIds = nullptr;
		FP_PackedGeometryData_AddVertexWeighting fpPackedGeometryData_AddVertexWeighting = nullptr;
		FP_PackedGeometryData_RemoveVertexWeighting fpPackedGeometryData_RemoveVertexWeighting = nullptr;
		FP_PackedGeometryData_GetVertexWeighting fpPackedGeometryData_GetVertexWeighting = nullptr;
		FP_PackedGeometryData_AddVertexWeights fpPackedGeometryData_AddVertexWeights = nullptr;
		FP_PackedGeometryData_RemoveVertexWeights fpPackedGeometryData_RemoveVertexWeights = nullptr;
		FP_PackedGeometryData_GetVertexWeights fpPackedGeometryData_GetVertexWeights = nullptr;
		FP_PackedGeometryData_AddTexCoords fpPackedGeometryData_AddTexCoords = nullptr;
		FP_PackedGeometryData_AddNamedTexCoords fpPackedGeometryData_AddNamedTexCoords = nullptr;
		FP_PackedGeometryData_RemoveTexCoords fpPackedGeometryData_RemoveTexCoords = nullptr;
		FP_PackedGeometryData_RemoveNamedTexCoords fpPackedGeometryData_RemoveNamedTexCoords = nullptr;
		FP_PackedGeometryData_GetTexCoords fpPackedGeometryData_GetTexCoords = nullptr;
		FP_PackedGeometryData_GetNamedTexCoords fpPackedGeometryData_GetNamedTexCoords = nullptr;
		FP_PackedGeometryData_AddTangents fpPackedGeometryData_AddTangents = nullptr;
		FP_PackedGeometryData_RemoveTangents fpPackedGeometryData_RemoveTangents = nullptr;
		FP_PackedGeometryData_GetTangents fpPackedGeometryData_GetTangents = nullptr;
		FP_PackedGeometryData_GetBitangents fpPackedGeometryData_GetBitangents = nullptr;
		FP_PackedGeometryData_AddNormals fpPackedGeometryData_AddNormals = nullptr;
		FP_PackedGeometryData_RemoveNormals fpPackedGeometryData_RemoveNormals = nullptr;
		FP_PackedGeometryData_GetNormals fpPackedGeometryData_GetNormals = nullptr;
		FP_PackedGeometryData_AddColors fpPackedGeometryData_AddColors = nullptr;
		FP_PackedGeometryData_AddNamedColors fpPackedGeometryData_AddNamedColors = nullptr;
		FP_PackedGeometryData_RemoveColors fpPackedGeometryData_RemoveColors = nullptr;
		FP_PackedGeometryData_RemoveNamedColors fpPackedGeometryData_RemoveNamedColors = nullptr;
		FP_PackedGeometryData_GetColors fpPackedGeometryData_GetColors = nullptr;
		FP_PackedGeometryData_GetNamedColors fpPackedGeometryData_GetNamedColors = nullptr;
		FP_PackedGeometryData_AddUserVertexField fpPackedGeometryData_AddUserVertexField = nullptr;
		FP_PackedGeometryData_RemoveUserVertexField fpPackedGeometryData_RemoveUserVertexField = nullptr;
		FP_PackedGeometryData_GetUserVertexField fpPackedGeometryData_GetUserVertexField = nullptr;
		FP_PackedGeometryData_AddBaseTypeUserVertexField fpPackedGeometryData_AddBaseTypeUserVertexField = nullptr;
		FP_PackedGeometryData_GetVertices fpPackedGeometryData_GetVertices = nullptr;
		FP_PackedGeometryData_GetVertexIds fpPackedGeometryData_GetVertexIds = nullptr;
		FP_PackedGeometryData_AddMaterialIds fpPackedGeometryData_AddMaterialIds = nullptr;
		FP_PackedGeometryData_RemoveMaterialIds fpPackedGeometryData_RemoveMaterialIds = nullptr;
		FP_PackedGeometryData_GetMaterialIds fpPackedGeometryData_GetMaterialIds = nullptr;
		FP_PackedGeometryData_AddGroupIds fpPackedGeometryData_AddGroupIds = nullptr;
		FP_PackedGeometryData_RemoveGroupIds fpPackedGeometryData_RemoveGroupIds = nullptr;
		FP_PackedGeometryData_GetGroupIds fpPackedGeometryData_GetGroupIds = nullptr;
		FP_PackedGeometryData_AddUserTriangleField fpPackedGeometryData_AddUserTriangleField = nullptr;
		FP_PackedGeometryData_RemoveUserTriangleField fpPackedGeometryData_RemoveUserTriangleField = nullptr;
		FP_PackedGeometryData_GetUserTriangleField fpPackedGeometryData_GetUserTriangleField = nullptr;
		FP_PackedGeometryData_AddBaseTypeUserTriangleField fpPackedGeometryData_AddBaseTypeUserTriangleField = nullptr;
		FP_PackedGeometryData_GetTriangles fpPackedGeometryData_GetTriangles = nullptr;
		FP_PackedGeometryData_GetInf fpPackedGeometryData_GetInf = nullptr;
		FP_PackedGeometryData_SetInf fpPackedGeometryData_SetInf = nullptr;
		FP_PackedGeometryData_GetSup fpPackedGeometryData_GetSup = nullptr;
		FP_PackedGeometryData_SetSup fpPackedGeometryData_SetSup = nullptr;
		FP_CreateImageData fpCreateImageData = nullptr;
		FP_ImageData_NewCopy fpImageData_NewCopy = nullptr;
		FP_ImageData_DeepCopy fpImageData_DeepCopy = nullptr;
		FP_ImageData_AddColors fpImageData_AddColors = nullptr;
		FP_ImageData_RemoveColors fpImageData_RemoveColors = nullptr;
		FP_ImageData_GetColors fpImageData_GetColors = nullptr;
		FP_ImageData_GetColorsValueType fpImageData_GetColorsValueType = nullptr;
		FP_ImageData_HasColors fpImageData_HasColors = nullptr;
		FP_ImageData_GetColorsFormat fpImageData_GetColorsFormat = nullptr;
		FP_ImageData_AddField fpImageData_AddField = nullptr;
		FP_ImageData_RemoveField fpImageData_RemoveField = nullptr;
		FP_ImageData_GetField fpImageData_GetField = nullptr;
		FP_ImageData_GetFieldValueType fpImageData_GetFieldValueType = nullptr;
		FP_ImageData_HasField fpImageData_HasField = nullptr;
		FP_ImageData_GetType fpImageData_GetType = nullptr;
		FP_ImageData_GetXSize fpImageData_GetXSize = nullptr;
		FP_ImageData_GetYSize fpImageData_GetYSize = nullptr;
		FP_ImageData_GetZSize fpImageData_GetZSize = nullptr;
		FP_ImageData_Set1DSize fpImageData_Set1DSize = nullptr;
		FP_ImageData_Set2DSize fpImageData_Set2DSize = nullptr;
		FP_ImageData_Set3DSize fpImageData_Set3DSize = nullptr;
		FP_ImageData_SetCubeSize fpImageData_SetCubeSize = nullptr;
		FP_ImageData_Reset fpImageData_Reset = nullptr;
		FP_ImageData_GetImageFields fpImageData_GetImageFields = nullptr;
		FP_CreateTable fpCreateTable = nullptr;
		FP_Table_AddItem fpTable_AddItem = nullptr;
		FP_Table_SetItem fpTable_SetItem = nullptr;
		FP_Table_FindItem fpTable_FindItem = nullptr;
		FP_Table_FindItemId fpTable_FindItemId = nullptr;
		FP_Table_GetItem fpTable_GetItem = nullptr;
		FP_Table_RemoveItem fpTable_RemoveItem = nullptr;
		FP_Table_Clear fpTable_Clear = nullptr;
		FP_Table_GetItemsCount fpTable_GetItemsCount = nullptr;
		FP_Table_Copy fpTable_Copy = nullptr;
		FP_CreateMaterial fpCreateMaterial = nullptr;
		FP_Material_GetMaterialChannelCount fpMaterial_GetMaterialChannelCount = nullptr;
		FP_Material_GetMaterialChannelFromIndex fpMaterial_GetMaterialChannelFromIndex = nullptr;
		FP_Material_AddMaterialChannel fpMaterial_AddMaterialChannel = nullptr;
		FP_Material_RemoveMaterialChannel fpMaterial_RemoveMaterialChannel = nullptr;
		FP_Material_HasMaterialChannel fpMaterial_HasMaterialChannel = nullptr;
		FP_Material_SetShadingNetwork fpMaterial_SetShadingNetwork = nullptr;
		FP_Material_GetShadingNetwork fpMaterial_GetShadingNetwork = nullptr;
		FP_Material_LoadShadingNetworkFromXML fpMaterial_LoadShadingNetworkFromXML = nullptr;
		FP_Material_SaveShadingNetworkToXML fpMaterial_SaveShadingNetworkToXML = nullptr;
		FP_Material_SetUseTangentSpaceNormals fpMaterial_SetUseTangentSpaceNormals = nullptr;
		FP_Material_GetUseTangentSpaceNormals fpMaterial_GetUseTangentSpaceNormals = nullptr;
		FP_Material_IsIdenticalTo fpMaterial_IsIdenticalTo = nullptr;
		FP_Material_IsTransparent fpMaterial_IsTransparent = nullptr;
		FP_Material_SetMaterialGUID fpMaterial_SetMaterialGUID = nullptr;
		FP_Material_GetMaterialGUID fpMaterial_GetMaterialGUID = nullptr;
		FP_Material_SetMaterialType fpMaterial_SetMaterialType = nullptr;
		FP_Material_GetMaterialType fpMaterial_GetMaterialType = nullptr;
		FP_Material_SetOpacityType fpMaterial_SetOpacityType = nullptr;
		FP_Material_GetOpacityType fpMaterial_GetOpacityType = nullptr;
		FP_Material_SetOpacityChannel fpMaterial_SetOpacityChannel = nullptr;
		FP_Material_GetOpacityChannel fpMaterial_GetOpacityChannel = nullptr;
		FP_Material_SetBlendMode fpMaterial_SetBlendMode = nullptr;
		FP_Material_GetBlendMode fpMaterial_GetBlendMode = nullptr;
		FP_Material_SetOpacityCutoff fpMaterial_SetOpacityCutoff = nullptr;
		FP_Material_GetOpacityCutoff fpMaterial_GetOpacityCutoff = nullptr;
		FP_Material_ChangeTexturePrefixPath fpMaterial_ChangeTexturePrefixPath = nullptr;
		FP_Material_SetOpacityFromDiffuseAlpha fpMaterial_SetOpacityFromDiffuseAlpha = nullptr;
		FP_Material_ConvertHandedness fpMaterial_ConvertHandedness = nullptr;
		FP_Material_GetMaterialChannels fpMaterial_GetMaterialChannels = nullptr;
		FP_Material_GetMaterialChannelsWithTextureInputs fpMaterial_GetMaterialChannelsWithTextureInputs = nullptr;
		FP_CreateMaterialTable fpCreateMaterialTable = nullptr;
		FP_MaterialTable_AddMaterial fpMaterialTable_AddMaterial = nullptr;
		FP_MaterialTable_FindMaterial fpMaterialTable_FindMaterial = nullptr;
		FP_MaterialTable_FindIdenticalMaterial fpMaterialTable_FindIdenticalMaterial = nullptr;
		FP_MaterialTable_FindMaterialId fpMaterialTable_FindMaterialId = nullptr;
		FP_MaterialTable_FindIdenticalMaterialId fpMaterialTable_FindIdenticalMaterialId = nullptr;
		FP_MaterialTable_FindIdenticalMaterialIds fpMaterialTable_FindIdenticalMaterialIds = nullptr;
		FP_MaterialTable_SetMaterial fpMaterialTable_SetMaterial = nullptr;
		FP_MaterialTable_GetMaterial fpMaterialTable_GetMaterial = nullptr;
		FP_MaterialTable_RemoveMaterial fpMaterialTable_RemoveMaterial = nullptr;
		FP_MaterialTable_GetMaterialsCount fpMaterialTable_GetMaterialsCount = nullptr;
		FP_MaterialTable_ChangeTexturePrefixPath fpMaterialTable_ChangeTexturePrefixPath = nullptr;
		FP_MaterialTable_GetMaterialChannels fpMaterialTable_GetMaterialChannels = nullptr;
		FP_MaterialTable_GetMaterialChannelsWithTextureInputs fpMaterialTable_GetMaterialChannelsWithTextureInputs = nullptr;
		FP_CreateMatrix4x4 fpCreateMatrix4x4 = nullptr;
		FP_Matrix4x4_DeepCopy fpMatrix4x4_DeepCopy = nullptr;
		FP_Matrix4x4_Zero fpMatrix4x4_Zero = nullptr;
		FP_Matrix4x4_Identity fpMatrix4x4_Identity = nullptr;
		FP_Matrix4x4_GetElement fpMatrix4x4_GetElement = nullptr;
		FP_Matrix4x4_SetElement fpMatrix4x4_SetElement = nullptr;
		FP_Matrix4x4_GetElements fpMatrix4x4_GetElements = nullptr;
		FP_Matrix4x4_SetToTranspose fpMatrix4x4_SetToTranspose = nullptr;
		FP_Matrix4x4_Transpose fpMatrix4x4_Transpose = nullptr;
		FP_Matrix4x4_SetToInvert fpMatrix4x4_SetToInvert = nullptr;
		FP_Matrix4x4_Invert fpMatrix4x4_Invert = nullptr;
		FP_Matrix4x4_Determinant3x3 fpMatrix4x4_Determinant3x3 = nullptr;
		FP_Matrix4x4_Point3ArrayMultiply fpMatrix4x4_Point3ArrayMultiply = nullptr;
		FP_Matrix4x4_Direction3ArrayMultiply fpMatrix4x4_Direction3ArrayMultiply = nullptr;
		FP_Matrix4x4_Vector4ArrayMultiply fpMatrix4x4_Vector4ArrayMultiply = nullptr;
		FP_Matrix4x4_SetToRotationTransform fpMatrix4x4_SetToRotationTransform = nullptr;
		FP_Matrix4x4_SetToScalingTransform fpMatrix4x4_SetToScalingTransform = nullptr;
		FP_Matrix4x4_SetToTranslationTransform fpMatrix4x4_SetToTranslationTransform = nullptr;
		FP_CreateTransform3 fpCreateTransform3 = nullptr;
		FP_Transform3_Clear fpTransform3_Clear = nullptr;
		FP_Transform3_GetMatrix fpTransform3_GetMatrix = nullptr;
		FP_Transform3_GetStack fpTransform3_GetStack = nullptr;
		FP_Transform3_PostMultiply fpTransform3_PostMultiply = nullptr;
		FP_Transform3_PreMultiply fpTransform3_PreMultiply = nullptr;
		FP_Transform3_IsPostMultiply fpTransform3_IsPostMultiply = nullptr;
		FP_Transform3_IsPreMultiply fpTransform3_IsPreMultiply = nullptr;
		FP_Transform3_AddRotation fpTransform3_AddRotation = nullptr;
		FP_Transform3_AddScaling fpTransform3_AddScaling = nullptr;
		FP_Transform3_AddTranslation fpTransform3_AddTranslation = nullptr;
		FP_Transform3_AddTransformation fpTransform3_AddTransformation = nullptr;
		FP_Transform3_Push fpTransform3_Push = nullptr;
		FP_Transform3_Pop fpTransform3_Pop = nullptr;
		FP_MappingImage_NewQuartersizeCopy fpMappingImage_NewQuartersizeCopy = nullptr;
		FP_MappingImage_GetWidth fpMappingImage_GetWidth = nullptr;
		FP_MappingImage_GetHeight fpMappingImage_GetHeight = nullptr;
		FP_MappingImage_GetLayerCount fpMappingImage_GetLayerCount = nullptr;
		FP_MappingImage_GetMultisamplingWidth fpMappingImage_GetMultisamplingWidth = nullptr;
		FP_MappingImage_GetMultisamplingHeight fpMappingImage_GetMultisamplingHeight = nullptr;
		FP_MappingImage_GetImageData fpMappingImage_GetImageData = nullptr;
		FP_MappingImage_GetMappingMeshData fpMappingImage_GetMappingMeshData = nullptr;
		FP_ProcessingObject_RunProcessing fpProcessingObject_RunProcessing = nullptr;
		FP_ProcessingObject_Clear fpProcessingObject_Clear = nullptr;
		FP_ProcessingObject_GetPercentDone fpProcessingObject_GetPercentDone = nullptr;
		FP_ProcessingObject_ToJSON fpProcessingObject_ToJSON = nullptr;
		FP_CreateParameterizer fpCreateParameterizer = nullptr;
		FP_Parameterizer_Parameterize fpParameterizer_Parameterize = nullptr;
		FP_Parameterizer_SetMaxStretch fpParameterizer_SetMaxStretch = nullptr;
		FP_Parameterizer_GetMaxStretch fpParameterizer_GetMaxStretch = nullptr;
		FP_Parameterizer_SetLargeChartsImportance fpParameterizer_SetLargeChartsImportance = nullptr;
		FP_Parameterizer_GetLargeChartsImportance fpParameterizer_GetLargeChartsImportance = nullptr;
		FP_Parameterizer_SetInputMaterialCount fpParameterizer_SetInputMaterialCount = nullptr;
		FP_Parameterizer_GetInputMaterialCount fpParameterizer_GetInputMaterialCount = nullptr;
		FP_Parameterizer_SetOutputMaterialCount fpParameterizer_SetOutputMaterialCount = nullptr;
		FP_Parameterizer_GetOutputMaterialCount fpParameterizer_GetOutputMaterialCount = nullptr;
		FP_Parameterizer_SetInputOutputMaterialMapping fpParameterizer_SetInputOutputMaterialMapping = nullptr;
		FP_Parameterizer_GetInputOutputMaterialMapping fpParameterizer_GetInputOutputMaterialMapping = nullptr;
		FP_Parameterizer_SetTextureWidth fpParameterizer_SetTextureWidth = nullptr;
		FP_Parameterizer_GetTextureWidth fpParameterizer_GetTextureWidth = nullptr;
		FP_Parameterizer_SetTextureWidthForImageIndex fpParameterizer_SetTextureWidthForImageIndex = nullptr;
		FP_Parameterizer_GetTextureWidthForImageIndex fpParameterizer_GetTextureWidthForImageIndex = nullptr;
		FP_Parameterizer_SetTextureHeight fpParameterizer_SetTextureHeight = nullptr;
		FP_Parameterizer_GetTextureHeight fpParameterizer_GetTextureHeight = nullptr;
		FP_Parameterizer_SetTextureHeightForImageIndex fpParameterizer_SetTextureHeightForImageIndex = nullptr;
		FP_Parameterizer_GetTextureHeightForImageIndex fpParameterizer_GetTextureHeightForImageIndex = nullptr;
		FP_Parameterizer_SetGutterSpace fpParameterizer_SetGutterSpace = nullptr;
		FP_Parameterizer_GetGutterSpace fpParameterizer_GetGutterSpace = nullptr;
		FP_Parameterizer_SetGutterSpaceForImageIndex fpParameterizer_SetGutterSpaceForImageIndex = nullptr;
		FP_Parameterizer_GetGutterSpaceForImageIndex fpParameterizer_GetGutterSpaceForImageIndex = nullptr;
		FP_Parameterizer_SetFeatureFlagsMask fpParameterizer_SetFeatureFlagsMask = nullptr;
		FP_Parameterizer_GetFeatureFlagsMask fpParameterizer_GetFeatureFlagsMask = nullptr;
		FP_Parameterizer_SetUseAutomaticTextureSize fpParameterizer_SetUseAutomaticTextureSize = nullptr;
		FP_Parameterizer_GetUseAutomaticTextureSize fpParameterizer_GetUseAutomaticTextureSize = nullptr;
		FP_Parameterizer_SetAutomaticTextureSizeMultiplier fpParameterizer_SetAutomaticTextureSizeMultiplier = nullptr;
		FP_Parameterizer_GetAutomaticTextureSizeMultiplier fpParameterizer_GetAutomaticTextureSizeMultiplier = nullptr;
		FP_Parameterizer_SetForcePower2Texture fpParameterizer_SetForcePower2Texture = nullptr;
		FP_Parameterizer_GetForcePower2Texture fpParameterizer_GetForcePower2Texture = nullptr;
		FP_Parameterizer_SetUseVertexWeights fpParameterizer_SetUseVertexWeights = nullptr;
		FP_Parameterizer_GetUseVertexWeights fpParameterizer_GetUseVertexWeights = nullptr;
		FP_Parameterizer_SetUseVisibilityWeights fpParameterizer_SetUseVisibilityWeights = nullptr;
		FP_Parameterizer_GetUseVisibilityWeights fpParameterizer_GetUseVisibilityWeights = nullptr;
		FP_CreateObjectCollection fpCreateObjectCollection = nullptr;
		FP_ObjectCollection_AddObject fpObjectCollection_AddObject = nullptr;
		FP_ObjectCollection_AddObjectSorted fpObjectCollection_AddObjectSorted = nullptr;
		FP_ObjectCollection_GetFirstItem fpObjectCollection_GetFirstItem = nullptr;
		FP_ObjectCollection_GetNextItem fpObjectCollection_GetNextItem = nullptr;
		FP_ObjectCollection_GetItemsObject fpObjectCollection_GetItemsObject = nullptr;
		FP_ObjectCollection_RemoveItem fpObjectCollection_RemoveItem = nullptr;
		FP_ObjectCollection_RemoveObject fpObjectCollection_RemoveObject = nullptr;
		FP_ObjectCollection_RemoveAllItems fpObjectCollection_RemoveAllItems = nullptr;
		FP_ObjectCollection_GetItemCount fpObjectCollection_GetItemCount = nullptr;
		FP_ObjectCollection_GetItem fpObjectCollection_GetItem = nullptr;
		FP_ObjectCollection_GetItemAsObject fpObjectCollection_GetItemAsObject = nullptr;
		FP_ObjectCollection_IsObjectInCollection fpObjectCollection_IsObjectInCollection = nullptr;
		FP_ObjectCollection_IsItemInCollection fpObjectCollection_IsItemInCollection = nullptr;
		FP_ObjectCollection_FindObject fpObjectCollection_FindObject = nullptr;
		FP_CreateGeometryDataCollection fpCreateGeometryDataCollection = nullptr;
		FP_GeometryDataCollection_AddGeometryData fpGeometryDataCollection_AddGeometryData = nullptr;
		FP_GeometryDataCollection_GetGeometryData fpGeometryDataCollection_GetGeometryData = nullptr;
		FP_GeometryDataCollection_RemoveGeometryData fpGeometryDataCollection_RemoveGeometryData = nullptr;
		FP_GeometryDataCollection_FindGeometryData fpGeometryDataCollection_FindGeometryData = nullptr;
		FP_GeometryDataCollection_GetNextItemAsGeometryData fpGeometryDataCollection_GetNextItemAsGeometryData = nullptr;
		FP_GeometryDataCollection_IsGeometryDataInCollection fpGeometryDataCollection_IsGeometryDataInCollection = nullptr;
		FP_GraphicsImporter_SetImportFilePath fpGraphicsImporter_SetImportFilePath = nullptr;
		FP_GraphicsImporter_GetImportFilePath fpGraphicsImporter_GetImportFilePath = nullptr;
		FP_GraphicsImporter_RunImport fpGraphicsImporter_RunImport = nullptr;
		FP_GraphicsImporter_Clear fpGraphicsImporter_Clear = nullptr;
		FP_GraphicsImporter_GetScene fpGraphicsImporter_GetScene = nullptr;
		FP_CreateWavefrontImporter fpCreateWavefrontImporter = nullptr;
		FP_WavefrontImporter_SetMaterialFilePath fpWavefrontImporter_SetMaterialFilePath = nullptr;
		FP_WavefrontImporter_GetMaterialFilePath fpWavefrontImporter_GetMaterialFilePath = nullptr;
		FP_WavefrontImporter_SetExtractGroups fpWavefrontImporter_SetExtractGroups = nullptr;
		FP_WavefrontImporter_GetExtractGroups fpWavefrontImporter_GetExtractGroups = nullptr;
		FP_WavefrontImporter_SetUseAlphaAsOpacity fpWavefrontImporter_SetUseAlphaAsOpacity = nullptr;
		FP_WavefrontImporter_GetUseAlphaAsOpacity fpWavefrontImporter_GetUseAlphaAsOpacity = nullptr;
		FP_WavefrontImporter_SetUseFallbackDiffuse fpWavefrontImporter_SetUseFallbackDiffuse = nullptr;
		FP_WavefrontImporter_GetUseFallbackDiffuse fpWavefrontImporter_GetUseFallbackDiffuse = nullptr;
		FP_CreateGLTFImporter fpCreateGLTFImporter = nullptr;
		FP_CreateFBXImporter fpCreateFBXImporter = nullptr;
		FP_GraphicsExporter_SetExportFilePath fpGraphicsExporter_SetExportFilePath = nullptr;
		FP_GraphicsExporter_GetExportFilePath fpGraphicsExporter_GetExportFilePath = nullptr;
		FP_GraphicsExporter_SetScene fpGraphicsExporter_SetScene = nullptr;
		FP_GraphicsExporter_SetSelectionSet fpGraphicsExporter_SetSelectionSet = nullptr;
		FP_GraphicsExporter_RunExport fpGraphicsExporter_RunExport = nullptr;
		FP_GraphicsExporter_SetPrimaryTexCoordName fpGraphicsExporter_SetPrimaryTexCoordName = nullptr;
		FP_GraphicsExporter_GetPrimaryTexCoordName fpGraphicsExporter_GetPrimaryTexCoordName = nullptr;
		FP_GraphicsExporter_SetExportCascadedScenes fpGraphicsExporter_SetExportCascadedScenes = nullptr;
		FP_GraphicsExporter_GetExportCascadedScenes fpGraphicsExporter_GetExportCascadedScenes = nullptr;
		FP_CreateWavefrontExporter fpCreateWavefrontExporter = nullptr;
		FP_WavefrontExporter_SetMaterialFilePath fpWavefrontExporter_SetMaterialFilePath = nullptr;
		FP_WavefrontExporter_GetMaterialFilePath fpWavefrontExporter_GetMaterialFilePath = nullptr;
		FP_CreateFBXExporter fpCreateFBXExporter = nullptr;
		FP_FBXExporter_SetEmbedReferences fpFBXExporter_SetEmbedReferences = nullptr;
		FP_FBXExporter_GetEmbedReferences fpFBXExporter_GetEmbedReferences = nullptr;
		FP_CreateGLTFExporter fpCreateGLTFExporter = nullptr;
		FP_GLTFExporter_SetEmbedReferences fpGLTFExporter_SetEmbedReferences = nullptr;
		FP_GLTFExporter_GetEmbedReferences fpGLTFExporter_GetEmbedReferences = nullptr;
		FP_CreateBinaryImporter fpCreateBinaryImporter = nullptr;
		FP_CreateBinaryExporter fpCreateBinaryExporter = nullptr;
		FP_CreateGeometryValidator fpCreateGeometryValidator = nullptr;
		FP_GeometryValidator_ValidateGeometry fpGeometryValidator_ValidateGeometry = nullptr;
		FP_GeometryValidator_GetErrorValue fpGeometryValidator_GetErrorValue = nullptr;
		FP_GeometryValidator_GetErrorString fpGeometryValidator_GetErrorString = nullptr;
		FP_GeometryValidator_SetCheckDegenerateFaceIndices fpGeometryValidator_SetCheckDegenerateFaceIndices = nullptr;
		FP_GeometryValidator_GetCheckDegenerateFaceIndices fpGeometryValidator_GetCheckDegenerateFaceIndices = nullptr;
		FP_GeometryValidator_SetCheckZeroAreaFaces fpGeometryValidator_SetCheckZeroAreaFaces = nullptr;
		FP_GeometryValidator_GetCheckZeroAreaFaces fpGeometryValidator_GetCheckZeroAreaFaces = nullptr;
		FP_GeometryValidator_SetAllowedMaterialCount fpGeometryValidator_SetAllowedMaterialCount = nullptr;
		FP_GeometryValidator_SetAllowedBoneCount fpGeometryValidator_SetAllowedBoneCount = nullptr;
		FP_GeometryValidator_SetAllowedGroupCount fpGeometryValidator_SetAllowedGroupCount = nullptr;
		FP_SettingsObject_ValidateSettings fpSettingsObject_ValidateSettings = nullptr;
		FP_SettingsObject_GetErrorString fpSettingsObject_GetErrorString = nullptr;
		FP_SettingsObject_SetBoolParameter fpSettingsObject_SetBoolParameter = nullptr;
		FP_SettingsObject_SetIntParameter fpSettingsObject_SetIntParameter = nullptr;
		FP_SettingsObject_SetUIntParameter fpSettingsObject_SetUIntParameter = nullptr;
		FP_SettingsObject_SetDoubleParameter fpSettingsObject_SetDoubleParameter = nullptr;
		FP_SettingsObject_SetStringParameter fpSettingsObject_SetStringParameter = nullptr;
		FP_SettingsObject_GetBoolParameter fpSettingsObject_GetBoolParameter = nullptr;
		FP_SettingsObject_GetIntParameter fpSettingsObject_GetIntParameter = nullptr;
		FP_SettingsObject_GetUIntParameter fpSettingsObject_GetUIntParameter = nullptr;
		FP_SettingsObject_GetDoubleParameter fpSettingsObject_GetDoubleParameter = nullptr;
		FP_SettingsObject_GetStringParameter fpSettingsObject_GetStringParameter = nullptr;
		FP_SettingsObject_ToJSON fpSettingsObject_ToJSON = nullptr;
		FP_SettingsObject_SetValidateParameterNames fpSettingsObject_SetValidateParameterNames = nullptr;
		FP_MaterialCaster_GetMaterialCasterSettings fpMaterialCaster_GetMaterialCasterSettings = nullptr;
		FP_MaterialCaster_SetSourceTextures fpMaterialCaster_SetSourceTextures = nullptr;
		FP_MaterialCaster_GetSourceTextures fpMaterialCaster_GetSourceTextures = nullptr;
		FP_MaterialCaster_SetSourceMaterials fpMaterialCaster_SetSourceMaterials = nullptr;
		FP_MaterialCaster_GetSourceMaterials fpMaterialCaster_GetSourceMaterials = nullptr;
		FP_MaterialCaster_SetDestMaterialId fpMaterialCaster_SetDestMaterialId = nullptr;
		FP_MaterialCaster_GetDestMaterialId fpMaterialCaster_GetDestMaterialId = nullptr;
		FP_MaterialCaster_SetMappingImage fpMaterialCaster_SetMappingImage = nullptr;
		FP_MaterialCaster_GetMappingImage fpMaterialCaster_GetMappingImage = nullptr;
		FP_MaterialCaster_SetOutputFilePath fpMaterialCaster_SetOutputFilePath = nullptr;
		FP_MaterialCaster_GetOutputFilePath fpMaterialCaster_GetOutputFilePath = nullptr;
		FP_MaterialCaster_SetOutputImage fpMaterialCaster_SetOutputImage = nullptr;
		FP_MaterialCaster_GetOutputImage fpMaterialCaster_GetOutputImage = nullptr;
		FP_MaterialCaster_NewCopy fpMaterialCaster_NewCopy = nullptr;
		FP_CreateMaterialCasterSettings fpCreateMaterialCasterSettings = nullptr;
		FP_MaterialCasterSettings_SetMaterialChannel fpMaterialCasterSettings_SetMaterialChannel = nullptr;
		FP_MaterialCasterSettings_GetMaterialChannel fpMaterialCasterSettings_GetMaterialChannel = nullptr;
		FP_MaterialCasterSettings_SetOpacityChannel fpMaterialCasterSettings_SetOpacityChannel = nullptr;
		FP_MaterialCasterSettings_GetOpacityChannel fpMaterialCasterSettings_GetOpacityChannel = nullptr;
		FP_MaterialCasterSettings_SetOpacityChannelComponent fpMaterialCasterSettings_SetOpacityChannelComponent = nullptr;
		FP_MaterialCasterSettings_GetOpacityChannelComponent fpMaterialCasterSettings_GetOpacityChannelComponent = nullptr;
		FP_MaterialCasterSettings_SetDilation fpMaterialCasterSettings_SetDilation = nullptr;
		FP_MaterialCasterSettings_GetDilation fpMaterialCasterSettings_GetDilation = nullptr;
		FP_MaterialCasterSettings_SetOutputPixelFormat fpMaterialCasterSettings_SetOutputPixelFormat = nullptr;
		FP_MaterialCasterSettings_GetOutputPixelFormat fpMaterialCasterSettings_GetOutputPixelFormat = nullptr;
		FP_MaterialCasterSettings_SetDitherType fpMaterialCasterSettings_SetDitherType = nullptr;
		FP_MaterialCasterSettings_GetDitherType fpMaterialCasterSettings_GetDitherType = nullptr;
		FP_MaterialCasterSettings_SetFillMode fpMaterialCasterSettings_SetFillMode = nullptr;
		FP_MaterialCasterSettings_GetFillMode fpMaterialCasterSettings_GetFillMode = nullptr;
		FP_MaterialCasterSettings_SetUseMultisampling fpMaterialCasterSettings_SetUseMultisampling = nullptr;
		FP_MaterialCasterSettings_GetUseMultisampling fpMaterialCasterSettings_GetUseMultisampling = nullptr;
		FP_MaterialCasterSettings_SetOutputImageFileFormat fpMaterialCasterSettings_SetOutputImageFileFormat = nullptr;
		FP_MaterialCasterSettings_GetOutputImageFileFormat fpMaterialCasterSettings_GetOutputImageFileFormat = nullptr;
		FP_MaterialCasterSettings_SetOutputDDSCompressionType fpMaterialCasterSettings_SetOutputDDSCompressionType = nullptr;
		FP_MaterialCasterSettings_GetOutputDDSCompressionType fpMaterialCasterSettings_GetOutputDDSCompressionType = nullptr;
		FP_CreateColorCaster fpCreateColorCaster = nullptr;
		FP_ColorCaster_GetLastCastingWasSkipped fpColorCaster_GetLastCastingWasSkipped = nullptr;
		FP_ColorCaster_GetColorCasterSettings fpColorCaster_GetColorCasterSettings = nullptr;
		FP_CreateColorCasterSettings fpCreateColorCasterSettings = nullptr;
		FP_ColorCasterSettings_SetBakeOpacityInAlpha fpColorCasterSettings_SetBakeOpacityInAlpha = nullptr;
		FP_ColorCasterSettings_GetBakeOpacityInAlpha fpColorCasterSettings_GetBakeOpacityInAlpha = nullptr;
		FP_ColorCasterSettings_SetOutputOpacityType fpColorCasterSettings_SetOutputOpacityType = nullptr;
		FP_ColorCasterSettings_GetOutputOpacityType fpColorCasterSettings_GetOutputOpacityType = nullptr;
		FP_ColorCasterSettings_SetSkipCastingIfNoInputChannel fpColorCasterSettings_SetSkipCastingIfNoInputChannel = nullptr;
		FP_ColorCasterSettings_GetSkipCastingIfNoInputChannel fpColorCasterSettings_GetSkipCastingIfNoInputChannel = nullptr;
		FP_ColorCasterSettings_SetOutputSRGB fpColorCasterSettings_SetOutputSRGB = nullptr;
		FP_ColorCasterSettings_GetOutputSRGB fpColorCasterSettings_GetOutputSRGB = nullptr;
		FP_CreateOpacityCaster fpCreateOpacityCaster = nullptr;
		FP_OpacityCaster_GetOpacityCasterSettings fpOpacityCaster_GetOpacityCasterSettings = nullptr;
		FP_CreateOpacityCasterSettings fpCreateOpacityCasterSettings = nullptr;
		FP_OpacityCasterSettings_SetOutputSRGB fpOpacityCasterSettings_SetOutputSRGB = nullptr;
		FP_OpacityCasterSettings_GetOutputSRGB fpOpacityCasterSettings_GetOutputSRGB = nullptr;
		FP_OpacityCasterSettings_SetOutputOpacityType fpOpacityCasterSettings_SetOutputOpacityType = nullptr;
		FP_OpacityCasterSettings_GetOutputOpacityType fpOpacityCasterSettings_GetOutputOpacityType = nullptr;
		FP_CreateNormalCaster fpCreateNormalCaster = nullptr;
		FP_NormalCaster_GetNormalCasterSettings fpNormalCaster_GetNormalCasterSettings = nullptr;
		FP_CreateNormalCasterSettings fpCreateNormalCasterSettings = nullptr;
		FP_NormalCasterSettings_SetFlipBackfacingNormals fpNormalCasterSettings_SetFlipBackfacingNormals = nullptr;
		FP_NormalCasterSettings_GetFlipBackfacingNormals fpNormalCasterSettings_GetFlipBackfacingNormals = nullptr;
		FP_NormalCasterSettings_SetGenerateTangentSpaceNormals fpNormalCasterSettings_SetGenerateTangentSpaceNormals = nullptr;
		FP_NormalCasterSettings_GetGenerateTangentSpaceNormals fpNormalCasterSettings_GetGenerateTangentSpaceNormals = nullptr;
		FP_NormalCasterSettings_SetFlipGreen fpNormalCasterSettings_SetFlipGreen = nullptr;
		FP_NormalCasterSettings_GetFlipGreen fpNormalCasterSettings_GetFlipGreen = nullptr;
		FP_NormalCasterSettings_SetCalculateBitangentPerFragment fpNormalCasterSettings_SetCalculateBitangentPerFragment = nullptr;
		FP_NormalCasterSettings_GetCalculateBitangentPerFragment fpNormalCasterSettings_GetCalculateBitangentPerFragment = nullptr;
		FP_NormalCasterSettings_SetNormalizeInterpolatedTangentSpace fpNormalCasterSettings_SetNormalizeInterpolatedTangentSpace = nullptr;
		FP_NormalCasterSettings_GetNormalizeInterpolatedTangentSpace fpNormalCasterSettings_GetNormalizeInterpolatedTangentSpace = nullptr;
		FP_CreateNormalRepairer fpCreateNormalRepairer = nullptr;
		FP_NormalRepairer_SetScene fpNormalRepairer_SetScene = nullptr;
		FP_NormalRepairer_GetScene fpNormalRepairer_GetScene = nullptr;
		FP_NormalRepairer_SetProcessSelectionSetID fpNormalRepairer_SetProcessSelectionSetID = nullptr;
		FP_NormalRepairer_GetProcessSelectionSetID fpNormalRepairer_GetProcessSelectionSetID = nullptr;
		FP_NormalRepairer_SetProcessSelectionSetName fpNormalRepairer_SetProcessSelectionSetName = nullptr;
		FP_NormalRepairer_GetProcessSelectionSetName fpNormalRepairer_GetProcessSelectionSetName = nullptr;
		FP_NormalRepairer_SetRecalculateNormals fpNormalRepairer_SetRecalculateNormals = nullptr;
		FP_NormalRepairer_GetRecalculateNormals fpNormalRepairer_GetRecalculateNormals = nullptr;
		FP_NormalRepairer_SetHardEdgeAngle fpNormalRepairer_SetHardEdgeAngle = nullptr;
		FP_NormalRepairer_GetHardEdgeAngle fpNormalRepairer_GetHardEdgeAngle = nullptr;
		FP_NormalRepairer_SetScaleByArea fpNormalRepairer_SetScaleByArea = nullptr;
		FP_NormalRepairer_GetScaleByArea fpNormalRepairer_GetScaleByArea = nullptr;
		FP_NormalRepairer_SetScaleByAngle fpNormalRepairer_SetScaleByAngle = nullptr;
		FP_NormalRepairer_GetScaleByAngle fpNormalRepairer_GetScaleByAngle = nullptr;
		FP_NormalRepairer_SetRepairOnlyInvalidNormals fpNormalRepairer_SetRepairOnlyInvalidNormals = nullptr;
		FP_NormalRepairer_GetRepairOnlyInvalidNormals fpNormalRepairer_GetRepairOnlyInvalidNormals = nullptr;
		FP_NormalRepairer_SetSnapNormalsToFlatSurfaces fpNormalRepairer_SetSnapNormalsToFlatSurfaces = nullptr;
		FP_NormalRepairer_GetSnapNormalsToFlatSurfaces fpNormalRepairer_GetSnapNormalsToFlatSurfaces = nullptr;
		FP_NormalRepairer_SetFlipFacesAndNormals fpNormalRepairer_SetFlipFacesAndNormals = nullptr;
		FP_NormalRepairer_GetFlipFacesAndNormals fpNormalRepairer_GetFlipFacesAndNormals = nullptr;
		FP_NormalRepairer_SetGeometry fpNormalRepairer_SetGeometry = nullptr;
		FP_NormalRepairer_GetGeometry fpNormalRepairer_GetGeometry = nullptr;
		FP_NormalRepairer_SetAutoCorrectionAllowsDoubleSided fpNormalRepairer_SetAutoCorrectionAllowsDoubleSided = nullptr;
		FP_NormalRepairer_SetAutoCorrectionRatioThreshold fpNormalRepairer_SetAutoCorrectionRatioThreshold = nullptr;
		FP_NormalRepairer_SetAutoCorrectionSingleSidedThreshold fpNormalRepairer_SetAutoCorrectionSingleSidedThreshold = nullptr;
		FP_CreateDisplacementCaster fpCreateDisplacementCaster = nullptr;
		FP_DisplacementCaster_GetDisplacementCasterSettings fpDisplacementCaster_GetDisplacementCasterSettings = nullptr;
		FP_CreateDisplacementCasterSettings fpCreateDisplacementCasterSettings = nullptr;
		FP_DisplacementCasterSettings_SetDistanceScaling fpDisplacementCasterSettings_SetDistanceScaling = nullptr;
		FP_DisplacementCasterSettings_GetDistanceScaling fpDisplacementCasterSettings_GetDistanceScaling = nullptr;
		FP_DisplacementCasterSettings_SetGenerateScalarDisplacement fpDisplacementCasterSettings_SetGenerateScalarDisplacement = nullptr;
		FP_DisplacementCasterSettings_GetGenerateScalarDisplacement fpDisplacementCasterSettings_GetGenerateScalarDisplacement = nullptr;
		FP_DisplacementCasterSettings_SetGenerateTangentSpaceDisplacement fpDisplacementCasterSettings_SetGenerateTangentSpaceDisplacement = nullptr;
		FP_DisplacementCasterSettings_GetGenerateTangentSpaceDisplacement fpDisplacementCasterSettings_GetGenerateTangentSpaceDisplacement = nullptr;
		FP_DisplacementCasterSettings_SetNormalMapTexCoordLevel fpDisplacementCasterSettings_SetNormalMapTexCoordLevel = nullptr;
		FP_DisplacementCasterSettings_GetNormalMapTexCoordLevel fpDisplacementCasterSettings_GetNormalMapTexCoordLevel = nullptr;
		FP_CreateTangentCalculator fpCreateTangentCalculator = nullptr;
		FP_TangentCalculator_CalculateTangents fpTangentCalculator_CalculateTangents = nullptr;
		FP_TangentCalculator_CalculateTangentsForNodeHierarchy fpTangentCalculator_CalculateTangentsForNodeHierarchy = nullptr;
		FP_TangentCalculator_SetTexCoordsSetId fpTangentCalculator_SetTexCoordsSetId = nullptr;
		FP_TangentCalculator_GetTexCoordsSetId fpTangentCalculator_GetTexCoordsSetId = nullptr;
		FP_TangentCalculator_SetTangentCalculatorType fpTangentCalculator_SetTangentCalculatorType = nullptr;
		FP_TangentCalculator_GetTangentCalculatorType fpTangentCalculator_GetTangentCalculatorType = nullptr;
		FP_TangentCalculator_SetInvertV fpTangentCalculator_SetInvertV = nullptr;
		FP_TangentCalculator_GetInvertV fpTangentCalculator_GetInvertV = nullptr;
		FP_RepairSettings_SetTJuncDist fpRepairSettings_SetTJuncDist = nullptr;
		FP_RepairSettings_GetTJuncDist fpRepairSettings_GetTJuncDist = nullptr;
		FP_RepairSettings_SetUseTJunctionRemover fpRepairSettings_SetUseTJunctionRemover = nullptr;
		FP_RepairSettings_GetUseTJunctionRemover fpRepairSettings_GetUseTJunctionRemover = nullptr;
		FP_RepairSettings_SetWeldDist fpRepairSettings_SetWeldDist = nullptr;
		FP_RepairSettings_GetWeldDist fpRepairSettings_GetWeldDist = nullptr;
		FP_RepairSettings_SetWeldOnlyBorderVertices fpRepairSettings_SetWeldOnlyBorderVertices = nullptr;
		FP_RepairSettings_GetWeldOnlyBorderVertices fpRepairSettings_GetWeldOnlyBorderVertices = nullptr;
		FP_RepairSettings_SetWeldOnlyWithinMaterial fpRepairSettings_SetWeldOnlyWithinMaterial = nullptr;
		FP_RepairSettings_GetWeldOnlyWithinMaterial fpRepairSettings_GetWeldOnlyWithinMaterial = nullptr;
		FP_RepairSettings_SetWeldOnlyWithinSceneNode fpRepairSettings_SetWeldOnlyWithinSceneNode = nullptr;
		FP_RepairSettings_GetWeldOnlyWithinSceneNode fpRepairSettings_GetWeldOnlyWithinSceneNode = nullptr;
		FP_RepairSettings_SetWeldOnlyBetweenSceneNodes fpRepairSettings_SetWeldOnlyBetweenSceneNodes = nullptr;
		FP_RepairSettings_GetWeldOnlyBetweenSceneNodes fpRepairSettings_GetWeldOnlyBetweenSceneNodes = nullptr;
		FP_RepairSettings_SetUseWelding fpRepairSettings_SetUseWelding = nullptr;
		FP_RepairSettings_GetUseWelding fpRepairSettings_GetUseWelding = nullptr;
		FP_RepairSettings_SetProgressivePasses fpRepairSettings_SetProgressivePasses = nullptr;
		FP_RepairSettings_GetProgressivePasses fpRepairSettings_GetProgressivePasses = nullptr;
		FP_BoneSettings_SetBoneReductionTargets fpBoneSettings_SetBoneReductionTargets = nullptr;
		FP_BoneSettings_SetBoneReductionTargetBoneRatioEnabled fpBoneSettings_SetBoneReductionTargetBoneRatioEnabled = nullptr;
		FP_BoneSettings_GetBoneReductionTargetBoneRatioEnabled fpBoneSettings_GetBoneReductionTargetBoneRatioEnabled = nullptr;
		FP_BoneSettings_SetBoneReductionTargetBoneCountEnabled fpBoneSettings_SetBoneReductionTargetBoneCountEnabled = nullptr;
		FP_BoneSettings_GetBoneReductionTargetBoneCountEnabled fpBoneSettings_GetBoneReductionTargetBoneCountEnabled = nullptr;
		FP_BoneSettings_SetBoneReductionTargetMaxDeviationEnabled fpBoneSettings_SetBoneReductionTargetMaxDeviationEnabled = nullptr;
		FP_BoneSettings_GetBoneReductionTargetMaxDeviationEnabled fpBoneSettings_GetBoneReductionTargetMaxDeviationEnabled = nullptr;
		FP_BoneSettings_SetBoneReductionTargetOnScreenSizeEnabled fpBoneSettings_SetBoneReductionTargetOnScreenSizeEnabled = nullptr;
		FP_BoneSettings_GetBoneReductionTargetOnScreenSizeEnabled fpBoneSettings_GetBoneReductionTargetOnScreenSizeEnabled = nullptr;
		FP_BoneSettings_SetBoneReductionTargetStopCondition fpBoneSettings_SetBoneReductionTargetStopCondition = nullptr;
		FP_BoneSettings_GetBoneReductionTargetStopCondition fpBoneSettings_GetBoneReductionTargetStopCondition = nullptr;
		FP_BoneSettings_SetBoneReductionTargetBoneRatio fpBoneSettings_SetBoneReductionTargetBoneRatio = nullptr;
		FP_BoneSettings_GetBoneReductionTargetBoneRatio fpBoneSettings_GetBoneReductionTargetBoneRatio = nullptr;
		FP_BoneSettings_SetBoneReductionTargetBoneCount fpBoneSettings_SetBoneReductionTargetBoneCount = nullptr;
		FP_BoneSettings_GetBoneReductionTargetBoneCount fpBoneSettings_GetBoneReductionTargetBoneCount = nullptr;
		FP_BoneSettings_SetBoneReductionTargetMaxDeviation fpBoneSettings_SetBoneReductionTargetMaxDeviation = nullptr;
		FP_BoneSettings_GetBoneReductionTargetMaxDeviation fpBoneSettings_GetBoneReductionTargetMaxDeviation = nullptr;
		FP_BoneSettings_SetBoneReductionTargetOnScreenSize fpBoneSettings_SetBoneReductionTargetOnScreenSize = nullptr;
		FP_BoneSettings_GetBoneReductionTargetOnScreenSize fpBoneSettings_GetBoneReductionTargetOnScreenSize = nullptr;
		FP_BoneSettings_SetMaxBonePerVertex fpBoneSettings_SetMaxBonePerVertex = nullptr;
		FP_BoneSettings_GetMaxBonePerVertex fpBoneSettings_GetMaxBonePerVertex = nullptr;
		FP_BoneSettings_SetRemoveUnusedBones fpBoneSettings_SetRemoveUnusedBones = nullptr;
		FP_BoneSettings_GetRemoveUnusedBones fpBoneSettings_GetRemoveUnusedBones = nullptr;
		FP_BoneSettings_SetLimitBonesPerVertex fpBoneSettings_SetLimitBonesPerVertex = nullptr;
		FP_BoneSettings_GetLimitBonesPerVertex fpBoneSettings_GetLimitBonesPerVertex = nullptr;
		FP_BoneSettings_SetUseBoneReducer fpBoneSettings_SetUseBoneReducer = nullptr;
		FP_BoneSettings_GetUseBoneReducer fpBoneSettings_GetUseBoneReducer = nullptr;
		FP_BoneSettings_SetLockBoneSelectionSetID fpBoneSettings_SetLockBoneSelectionSetID = nullptr;
		FP_BoneSettings_GetLockBoneSelectionSetID fpBoneSettings_GetLockBoneSelectionSetID = nullptr;
		FP_BoneSettings_SetLockBoneSelectionSetName fpBoneSettings_SetLockBoneSelectionSetName = nullptr;
		FP_BoneSettings_GetLockBoneSelectionSetName fpBoneSettings_GetLockBoneSelectionSetName = nullptr;
		FP_BoneSettings_SetRemoveBoneSelectionSetID fpBoneSettings_SetRemoveBoneSelectionSetID = nullptr;
		FP_BoneSettings_GetRemoveBoneSelectionSetID fpBoneSettings_GetRemoveBoneSelectionSetID = nullptr;
		FP_BoneSettings_SetRemoveBoneSelectionSetName fpBoneSettings_SetRemoveBoneSelectionSetName = nullptr;
		FP_BoneSettings_GetRemoveBoneSelectionSetName fpBoneSettings_GetRemoveBoneSelectionSetName = nullptr;
		FP_CreateReductionSettings fpCreateReductionSettings = nullptr;
		FP_ReductionSettings_SetReductionTargets fpReductionSettings_SetReductionTargets = nullptr;
		FP_ReductionSettings_SetReductionTargetTriangleRatioEnabled fpReductionSettings_SetReductionTargetTriangleRatioEnabled = nullptr;
		FP_ReductionSettings_GetReductionTargetTriangleRatioEnabled fpReductionSettings_GetReductionTargetTriangleRatioEnabled = nullptr;
		FP_ReductionSettings_SetReductionTargetTriangleCountEnabled fpReductionSettings_SetReductionTargetTriangleCountEnabled = nullptr;
		FP_ReductionSettings_GetReductionTargetTriangleCountEnabled fpReductionSettings_GetReductionTargetTriangleCountEnabled = nullptr;
		FP_ReductionSettings_SetReductionTargetMaxDeviationEnabled fpReductionSettings_SetReductionTargetMaxDeviationEnabled = nullptr;
		FP_ReductionSettings_GetReductionTargetMaxDeviationEnabled fpReductionSettings_GetReductionTargetMaxDeviationEnabled = nullptr;
		FP_ReductionSettings_SetReductionTargetOnScreenSizeEnabled fpReductionSettings_SetReductionTargetOnScreenSizeEnabled = nullptr;
		FP_ReductionSettings_GetReductionTargetOnScreenSizeEnabled fpReductionSettings_GetReductionTargetOnScreenSizeEnabled = nullptr;
		FP_ReductionSettings_SetReductionTargetStopCondition fpReductionSettings_SetReductionTargetStopCondition = nullptr;
		FP_ReductionSettings_GetReductionTargetStopCondition fpReductionSettings_GetReductionTargetStopCondition = nullptr;
		FP_ReductionSettings_SetReductionHeuristics fpReductionSettings_SetReductionHeuristics = nullptr;
		FP_ReductionSettings_GetReductionHeuristics fpReductionSettings_GetReductionHeuristics = nullptr;
		FP_ReductionSettings_SetReductionTargetTriangleRatio fpReductionSettings_SetReductionTargetTriangleRatio = nullptr;
		FP_ReductionSettings_GetReductionTargetTriangleRatio fpReductionSettings_GetReductionTargetTriangleRatio = nullptr;
		FP_ReductionSettings_SetReductionTargetTriangleCount fpReductionSettings_SetReductionTargetTriangleCount = nullptr;
		FP_ReductionSettings_GetReductionTargetTriangleCount fpReductionSettings_GetReductionTargetTriangleCount = nullptr;
		FP_ReductionSettings_SetReductionTargetMaxDeviation fpReductionSettings_SetReductionTargetMaxDeviation = nullptr;
		FP_ReductionSettings_GetReductionTargetMaxDeviation fpReductionSettings_GetReductionTargetMaxDeviation = nullptr;
		FP_ReductionSettings_SetReductionTargetOnScreenSize fpReductionSettings_SetReductionTargetOnScreenSize = nullptr;
		FP_ReductionSettings_GetReductionTargetOnScreenSize fpReductionSettings_GetReductionTargetOnScreenSize = nullptr;
		FP_ReductionSettings_SetGeometryImportance fpReductionSettings_SetGeometryImportance = nullptr;
		FP_ReductionSettings_GetGeometryImportance fpReductionSettings_GetGeometryImportance = nullptr;
		FP_ReductionSettings_SetMaterialImportance fpReductionSettings_SetMaterialImportance = nullptr;
		FP_ReductionSettings_GetMaterialImportance fpReductionSettings_GetMaterialImportance = nullptr;
		FP_ReductionSettings_SetTextureImportance fpReductionSettings_SetTextureImportance = nullptr;
		FP_ReductionSettings_GetTextureImportance fpReductionSettings_GetTextureImportance = nullptr;
		FP_ReductionSettings_SetShadingImportance fpReductionSettings_SetShadingImportance = nullptr;
		FP_ReductionSettings_GetShadingImportance fpReductionSettings_GetShadingImportance = nullptr;
		FP_ReductionSettings_SetGroupImportance fpReductionSettings_SetGroupImportance = nullptr;
		FP_ReductionSettings_GetGroupImportance fpReductionSettings_GetGroupImportance = nullptr;
		FP_ReductionSettings_SetVertexColorImportance fpReductionSettings_SetVertexColorImportance = nullptr;
		FP_ReductionSettings_GetVertexColorImportance fpReductionSettings_GetVertexColorImportance = nullptr;
		FP_ReductionSettings_SetEdgeSetImportance fpReductionSettings_SetEdgeSetImportance = nullptr;
		FP_ReductionSettings_GetEdgeSetImportance fpReductionSettings_GetEdgeSetImportance = nullptr;
		FP_ReductionSettings_SetSkinningImportance fpReductionSettings_SetSkinningImportance = nullptr;
		FP_ReductionSettings_GetSkinningImportance fpReductionSettings_GetSkinningImportance = nullptr;
		FP_ReductionSettings_SetCurvatureImportance fpReductionSettings_SetCurvatureImportance = nullptr;
		FP_ReductionSettings_GetCurvatureImportance fpReductionSettings_GetCurvatureImportance = nullptr;
		FP_ReductionSettings_SetCreateGeomorphGeometry fpReductionSettings_SetCreateGeomorphGeometry = nullptr;
		FP_ReductionSettings_GetCreateGeomorphGeometry fpReductionSettings_GetCreateGeomorphGeometry = nullptr;
		FP_ReductionSettings_SetAllowDegenerateTexCoords fpReductionSettings_SetAllowDegenerateTexCoords = nullptr;
		FP_ReductionSettings_GetAllowDegenerateTexCoords fpReductionSettings_GetAllowDegenerateTexCoords = nullptr;
		FP_ReductionSettings_SetKeepSymmetry fpReductionSettings_SetKeepSymmetry = nullptr;
		FP_ReductionSettings_GetKeepSymmetry fpReductionSettings_GetKeepSymmetry = nullptr;
		FP_ReductionSettings_SetUseAutomaticSymmetryDetection fpReductionSettings_SetUseAutomaticSymmetryDetection = nullptr;
		FP_ReductionSettings_GetUseAutomaticSymmetryDetection fpReductionSettings_GetUseAutomaticSymmetryDetection = nullptr;
		FP_ReductionSettings_SetUseSymmetryQuadRetriangulator fpReductionSettings_SetUseSymmetryQuadRetriangulator = nullptr;
		FP_ReductionSettings_GetUseSymmetryQuadRetriangulator fpReductionSettings_GetUseSymmetryQuadRetriangulator = nullptr;
		FP_ReductionSettings_SetSymmetryAxis fpReductionSettings_SetSymmetryAxis = nullptr;
		FP_ReductionSettings_GetSymmetryAxis fpReductionSettings_GetSymmetryAxis = nullptr;
		FP_ReductionSettings_SetSymmetryOffset fpReductionSettings_SetSymmetryOffset = nullptr;
		FP_ReductionSettings_GetSymmetryOffset fpReductionSettings_GetSymmetryOffset = nullptr;
		FP_ReductionSettings_SetSymmetryDetectionTolerance fpReductionSettings_SetSymmetryDetectionTolerance = nullptr;
		FP_ReductionSettings_GetSymmetryDetectionTolerance fpReductionSettings_GetSymmetryDetectionTolerance = nullptr;
		FP_ReductionSettings_SetDataCreationPreferences fpReductionSettings_SetDataCreationPreferences = nullptr;
		FP_ReductionSettings_GetDataCreationPreferences fpReductionSettings_GetDataCreationPreferences = nullptr;
		FP_ReductionSettings_SetGenerateGeomorphData fpReductionSettings_SetGenerateGeomorphData = nullptr;
		FP_ReductionSettings_GetGenerateGeomorphData fpReductionSettings_GetGenerateGeomorphData = nullptr;
		FP_ReductionSettings_SetOutwardMoveMultiplier fpReductionSettings_SetOutwardMoveMultiplier = nullptr;
		FP_ReductionSettings_GetOutwardMoveMultiplier fpReductionSettings_GetOutwardMoveMultiplier = nullptr;
		FP_ReductionSettings_SetInwardMoveMultiplier fpReductionSettings_SetInwardMoveMultiplier = nullptr;
		FP_ReductionSettings_GetInwardMoveMultiplier fpReductionSettings_GetInwardMoveMultiplier = nullptr;
		FP_ReductionSettings_SetMaxEdgeLength fpReductionSettings_SetMaxEdgeLength = nullptr;
		FP_ReductionSettings_GetMaxEdgeLength fpReductionSettings_GetMaxEdgeLength = nullptr;
		FP_ReductionSettings_SetUseHighQualityNormalCalculation fpReductionSettings_SetUseHighQualityNormalCalculation = nullptr;
		FP_ReductionSettings_GetUseHighQualityNormalCalculation fpReductionSettings_GetUseHighQualityNormalCalculation = nullptr;
		FP_ReductionSettings_SetProcessSelectionSetID fpReductionSettings_SetProcessSelectionSetID = nullptr;
		FP_ReductionSettings_GetProcessSelectionSetID fpReductionSettings_GetProcessSelectionSetID = nullptr;
		FP_ReductionSettings_SetProcessSelectionSetName fpReductionSettings_SetProcessSelectionSetName = nullptr;
		FP_ReductionSettings_GetProcessSelectionSetName fpReductionSettings_GetProcessSelectionSetName = nullptr;
		FP_ReductionSettings_SetMergeGeometries fpReductionSettings_SetMergeGeometries = nullptr;
		FP_ReductionSettings_GetMergeGeometries fpReductionSettings_GetMergeGeometries = nullptr;
		FP_ReductionSettings_SetKeepUnprocessedSceneMeshes fpReductionSettings_SetKeepUnprocessedSceneMeshes = nullptr;
		FP_ReductionSettings_GetKeepUnprocessedSceneMeshes fpReductionSettings_GetKeepUnprocessedSceneMeshes = nullptr;
		FP_ReductionSettings_SetLockGeometricBorder fpReductionSettings_SetLockGeometricBorder = nullptr;
		FP_ReductionSettings_GetLockGeometricBorder fpReductionSettings_GetLockGeometricBorder = nullptr;
		FP_NormalCalculationSettings_SetReplaceNormals fpNormalCalculationSettings_SetReplaceNormals = nullptr;
		FP_NormalCalculationSettings_GetReplaceNormals fpNormalCalculationSettings_GetReplaceNormals = nullptr;
		FP_NormalCalculationSettings_SetReplaceTangents fpNormalCalculationSettings_SetReplaceTangents = nullptr;
		FP_NormalCalculationSettings_GetReplaceTangents fpNormalCalculationSettings_GetReplaceTangents = nullptr;
		FP_NormalCalculationSettings_SetHardEdgeAngle fpNormalCalculationSettings_SetHardEdgeAngle = nullptr;
		FP_NormalCalculationSettings_GetHardEdgeAngle fpNormalCalculationSettings_GetHardEdgeAngle = nullptr;
		FP_NormalCalculationSettings_SetRepairInvalidNormals fpNormalCalculationSettings_SetRepairInvalidNormals = nullptr;
		FP_NormalCalculationSettings_GetRepairInvalidNormals fpNormalCalculationSettings_GetRepairInvalidNormals = nullptr;
		FP_NormalCalculationSettings_SetReorthogonalizeTangentSpace fpNormalCalculationSettings_SetReorthogonalizeTangentSpace = nullptr;
		FP_NormalCalculationSettings_GetReorthogonalizeTangentSpace fpNormalCalculationSettings_GetReorthogonalizeTangentSpace = nullptr;
		FP_NormalCalculationSettings_SetScaleByArea fpNormalCalculationSettings_SetScaleByArea = nullptr;
		FP_NormalCalculationSettings_GetScaleByArea fpNormalCalculationSettings_GetScaleByArea = nullptr;
		FP_NormalCalculationSettings_SetScaleByAngle fpNormalCalculationSettings_SetScaleByAngle = nullptr;
		FP_NormalCalculationSettings_GetScaleByAngle fpNormalCalculationSettings_GetScaleByAngle = nullptr;
		FP_NormalCalculationSettings_SetSnapNormalsToFlatSurfaces fpNormalCalculationSettings_SetSnapNormalsToFlatSurfaces = nullptr;
		FP_NormalCalculationSettings_GetSnapNormalsToFlatSurfaces fpNormalCalculationSettings_GetSnapNormalsToFlatSurfaces = nullptr;
		FP_MappingImageSettings_SetInputMaterialCount fpMappingImageSettings_SetInputMaterialCount = nullptr;
		FP_MappingImageSettings_GetInputMaterialCount fpMappingImageSettings_GetInputMaterialCount = nullptr;
		FP_MappingImageSettings_GetInputMaterialSettings fpMappingImageSettings_GetInputMaterialSettings = nullptr;
		FP_MappingImageSettings_SetOutputMaterialCount fpMappingImageSettings_SetOutputMaterialCount = nullptr;
		FP_MappingImageSettings_GetOutputMaterialCount fpMappingImageSettings_GetOutputMaterialCount = nullptr;
		FP_MappingImageSettings_GetOutputMaterialSettings fpMappingImageSettings_GetOutputMaterialSettings = nullptr;
		FP_MappingImageSettings_SetReplaceMappingImages fpMappingImageSettings_SetReplaceMappingImages = nullptr;
		FP_MappingImageSettings_GetReplaceMappingImages fpMappingImageSettings_GetReplaceMappingImages = nullptr;
		FP_MappingImageSettings_SetMaximumLayers fpMappingImageSettings_SetMaximumLayers = nullptr;
		FP_MappingImageSettings_GetMaximumLayers fpMappingImageSettings_GetMaximumLayers = nullptr;
		FP_MappingImageSettings_SetAllowTransparencyMapping fpMappingImageSettings_SetAllowTransparencyMapping = nullptr;
		FP_MappingImageSettings_GetAllowTransparencyMapping fpMappingImageSettings_GetAllowTransparencyMapping = nullptr;
		FP_MappingImageSettings_SetGenerateMappingImage fpMappingImageSettings_SetGenerateMappingImage = nullptr;
		FP_MappingImageSettings_GetGenerateMappingImage fpMappingImageSettings_GetGenerateMappingImage = nullptr;
		FP_MappingImageSettings_SetGenerateTexCoords fpMappingImageSettings_SetGenerateTexCoords = nullptr;
		FP_MappingImageSettings_GetGenerateTexCoords fpMappingImageSettings_GetGenerateTexCoords = nullptr;
		FP_MappingImageSettings_SetGenerateTangents fpMappingImageSettings_SetGenerateTangents = nullptr;
		FP_MappingImageSettings_GetGenerateTangents fpMappingImageSettings_GetGenerateTangents = nullptr;
		FP_MappingImageSettings_SetTexCoordLevel fpMappingImageSettings_SetTexCoordLevel = nullptr;
		FP_MappingImageSettings_GetTexCoordLevel fpMappingImageSettings_GetTexCoordLevel = nullptr;
		FP_MappingImageSettings_SetTexCoordName fpMappingImageSettings_SetTexCoordName = nullptr;
		FP_MappingImageSettings_GetTexCoordName fpMappingImageSettings_GetTexCoordName = nullptr;
		FP_MappingImageSettings_SetUseFullRetexturing fpMappingImageSettings_SetUseFullRetexturing = nullptr;
		FP_MappingImageSettings_GetUseFullRetexturing fpMappingImageSettings_GetUseFullRetexturing = nullptr;
		FP_MappingImageSettings_SetApplyNewMaterialIds fpMappingImageSettings_SetApplyNewMaterialIds = nullptr;
		FP_MappingImageSettings_GetApplyNewMaterialIds fpMappingImageSettings_GetApplyNewMaterialIds = nullptr;
		FP_MappingImageSettings_SetUseAutomaticTextureSize fpMappingImageSettings_SetUseAutomaticTextureSize = nullptr;
		FP_MappingImageSettings_GetUseAutomaticTextureSize fpMappingImageSettings_GetUseAutomaticTextureSize = nullptr;
		FP_MappingImageSettings_SetAutomaticTextureSizeMultiplier fpMappingImageSettings_SetAutomaticTextureSizeMultiplier = nullptr;
		FP_MappingImageSettings_GetAutomaticTextureSizeMultiplier fpMappingImageSettings_GetAutomaticTextureSizeMultiplier = nullptr;
		FP_MappingImageSettings_SetForcePower2Texture fpMappingImageSettings_SetForcePower2Texture = nullptr;
		FP_MappingImageSettings_GetForcePower2Texture fpMappingImageSettings_GetForcePower2Texture = nullptr;
		FP_MappingImageSettings_SetTexCoordGeneratorType fpMappingImageSettings_SetTexCoordGeneratorType = nullptr;
		FP_MappingImageSettings_GetTexCoordGeneratorType fpMappingImageSettings_GetTexCoordGeneratorType = nullptr;
		FP_MappingImageSettings_SetOnlyParameterizeInvalidUVs fpMappingImageSettings_SetOnlyParameterizeInvalidUVs = nullptr;
		FP_MappingImageSettings_GetOnlyParameterizeInvalidUVs fpMappingImageSettings_GetOnlyParameterizeInvalidUVs = nullptr;
		FP_MappingImageSettings_GetChartAggregatorSettings fpMappingImageSettings_GetChartAggregatorSettings = nullptr;
		FP_MappingImageSettings_GetParameterizerSettings fpMappingImageSettings_GetParameterizerSettings = nullptr;
		FP_MappingImageInputMaterialSettings_SetMaterialMapping fpMappingImageInputMaterialSettings_SetMaterialMapping = nullptr;
		FP_MappingImageInputMaterialSettings_GetMaterialMapping fpMappingImageInputMaterialSettings_GetMaterialMapping = nullptr;
		FP_MappingImageOutputMaterialSettings_SetTextureWidth fpMappingImageOutputMaterialSettings_SetTextureWidth = nullptr;
		FP_MappingImageOutputMaterialSettings_GetTextureWidth fpMappingImageOutputMaterialSettings_GetTextureWidth = nullptr;
		FP_MappingImageOutputMaterialSettings_SetTextureHeight fpMappingImageOutputMaterialSettings_SetTextureHeight = nullptr;
		FP_MappingImageOutputMaterialSettings_GetTextureHeight fpMappingImageOutputMaterialSettings_GetTextureHeight = nullptr;
		FP_MappingImageOutputMaterialSettings_SetMultisamplingLevel fpMappingImageOutputMaterialSettings_SetMultisamplingLevel = nullptr;
		FP_MappingImageOutputMaterialSettings_GetMultisamplingLevel fpMappingImageOutputMaterialSettings_GetMultisamplingLevel = nullptr;
		FP_MappingImageOutputMaterialSettings_SetGutterSpace fpMappingImageOutputMaterialSettings_SetGutterSpace = nullptr;
		FP_MappingImageOutputMaterialSettings_GetGutterSpace fpMappingImageOutputMaterialSettings_GetGutterSpace = nullptr;
		FP_VisibilitySettings_SetUseVisibilityWeightsInReducer fpVisibilitySettings_SetUseVisibilityWeightsInReducer = nullptr;
		FP_VisibilitySettings_GetUseVisibilityWeightsInReducer fpVisibilitySettings_GetUseVisibilityWeightsInReducer = nullptr;
		FP_VisibilitySettings_SetUseVisibilityWeightsInTexcoordGenerator fpVisibilitySettings_SetUseVisibilityWeightsInTexcoordGenerator = nullptr;
		FP_VisibilitySettings_GetUseVisibilityWeightsInTexcoordGenerator fpVisibilitySettings_GetUseVisibilityWeightsInTexcoordGenerator = nullptr;
		FP_VisibilitySettings_SetVisibilityWeightsPower fpVisibilitySettings_SetVisibilityWeightsPower = nullptr;
		FP_VisibilitySettings_GetVisibilityWeightsPower fpVisibilitySettings_GetVisibilityWeightsPower = nullptr;
		FP_VisibilitySettings_SetCullOccludedGeometry fpVisibilitySettings_SetCullOccludedGeometry = nullptr;
		FP_VisibilitySettings_GetCullOccludedGeometry fpVisibilitySettings_GetCullOccludedGeometry = nullptr;
		FP_VisibilitySettings_SetForceVisibilityCalculation fpVisibilitySettings_SetForceVisibilityCalculation = nullptr;
		FP_VisibilitySettings_GetForceVisibilityCalculation fpVisibilitySettings_GetForceVisibilityCalculation = nullptr;
		FP_VisibilitySettings_SetUseBackfaceCulling fpVisibilitySettings_SetUseBackfaceCulling = nullptr;
		FP_VisibilitySettings_GetUseBackfaceCulling fpVisibilitySettings_GetUseBackfaceCulling = nullptr;
		FP_VisibilitySettings_SetCameraSelectionSetID fpVisibilitySettings_SetCameraSelectionSetID = nullptr;
		FP_VisibilitySettings_GetCameraSelectionSetID fpVisibilitySettings_GetCameraSelectionSetID = nullptr;
		FP_VisibilitySettings_SetCameraSelectionSetName fpVisibilitySettings_SetCameraSelectionSetName = nullptr;
		FP_VisibilitySettings_GetCameraSelectionSetName fpVisibilitySettings_GetCameraSelectionSetName = nullptr;
		FP_VisibilitySettings_SetOccluderSelectionSetID fpVisibilitySettings_SetOccluderSelectionSetID = nullptr;
		FP_VisibilitySettings_GetOccluderSelectionSetID fpVisibilitySettings_GetOccluderSelectionSetID = nullptr;
		FP_VisibilitySettings_SetOccluderSelectionSetName fpVisibilitySettings_SetOccluderSelectionSetName = nullptr;
		FP_VisibilitySettings_GetOccluderSelectionSetName fpVisibilitySettings_GetOccluderSelectionSetName = nullptr;
		FP_VisibilitySettings_SetFillNonVisibleAreaThreshold fpVisibilitySettings_SetFillNonVisibleAreaThreshold = nullptr;
		FP_VisibilitySettings_GetFillNonVisibleAreaThreshold fpVisibilitySettings_GetFillNonVisibleAreaThreshold = nullptr;
		FP_VisibilitySettings_SetRemoveTrianglesNotOccludingOtherTriangles fpVisibilitySettings_SetRemoveTrianglesNotOccludingOtherTriangles = nullptr;
		FP_VisibilitySettings_GetRemoveTrianglesNotOccludingOtherTriangles fpVisibilitySettings_GetRemoveTrianglesNotOccludingOtherTriangles = nullptr;
		FP_VisibilitySettings_SetConservativeMode fpVisibilitySettings_SetConservativeMode = nullptr;
		FP_VisibilitySettings_GetConservativeMode fpVisibilitySettings_GetConservativeMode = nullptr;
		FP_VisibilitySettings_SetComputeVisibilityMode fpVisibilitySettings_SetComputeVisibilityMode = nullptr;
		FP_VisibilitySettings_GetComputeVisibilityMode fpVisibilitySettings_GetComputeVisibilityMode = nullptr;
		FP_CreateReductionProcessor fpCreateReductionProcessor = nullptr;
		FP_ReductionProcessor_SetScene fpReductionProcessor_SetScene = nullptr;
		FP_ReductionProcessor_GetScene fpReductionProcessor_GetScene = nullptr;
		FP_ReductionProcessor_GetMappingImage fpReductionProcessor_GetMappingImage = nullptr;
		FP_ReductionProcessor_GetMappingImageForImageIndex fpReductionProcessor_GetMappingImageForImageIndex = nullptr;
		FP_ReductionProcessor_GetRepairSettings fpReductionProcessor_GetRepairSettings = nullptr;
		FP_ReductionProcessor_GetReductionSettings fpReductionProcessor_GetReductionSettings = nullptr;
		FP_ReductionProcessor_GetBoneSettings fpReductionProcessor_GetBoneSettings = nullptr;
		FP_ReductionProcessor_GetNormalCalculationSettings fpReductionProcessor_GetNormalCalculationSettings = nullptr;
		FP_ReductionProcessor_GetMappingImageSettings fpReductionProcessor_GetMappingImageSettings = nullptr;
		FP_ReductionProcessor_GetVisibilitySettings fpReductionProcessor_GetVisibilitySettings = nullptr;
		FP_ReductionProcessor_GetVertexWeightSettings fpReductionProcessor_GetVertexWeightSettings = nullptr;
		FP_ReductionProcessor_GetResultDeviation fpReductionProcessor_GetResultDeviation = nullptr;
		FP_RemeshingLegacySettings_SetOnScreenSize fpRemeshingLegacySettings_SetOnScreenSize = nullptr;
		FP_RemeshingLegacySettings_GetOnScreenSize fpRemeshingLegacySettings_GetOnScreenSize = nullptr;
		FP_RemeshingLegacySettings_SetMergeDistance fpRemeshingLegacySettings_SetMergeDistance = nullptr;
		FP_RemeshingLegacySettings_GetMergeDistance fpRemeshingLegacySettings_GetMergeDistance = nullptr;
		FP_RemeshingLegacySettings_SetMergeBoldness fpRemeshingLegacySettings_SetMergeBoldness = nullptr;
		FP_RemeshingLegacySettings_GetMergeBoldness fpRemeshingLegacySettings_GetMergeBoldness = nullptr;
		FP_RemeshingLegacySettings_SetMaxTriangleSize fpRemeshingLegacySettings_SetMaxTriangleSize = nullptr;
		FP_RemeshingLegacySettings_GetMaxTriangleSize fpRemeshingLegacySettings_GetMaxTriangleSize = nullptr;
		FP_RemeshingLegacySettings_SetSurfaceTransferMode fpRemeshingLegacySettings_SetSurfaceTransferMode = nullptr;
		FP_RemeshingLegacySettings_GetSurfaceTransferMode fpRemeshingLegacySettings_GetSurfaceTransferMode = nullptr;
		FP_RemeshingLegacySettings_SetUseCuttingPlanes fpRemeshingLegacySettings_SetUseCuttingPlanes = nullptr;
		FP_RemeshingLegacySettings_GetUseCuttingPlanes fpRemeshingLegacySettings_GetUseCuttingPlanes = nullptr;
		FP_RemeshingLegacySettings_SetHardEdgeAngle fpRemeshingLegacySettings_SetHardEdgeAngle = nullptr;
		FP_RemeshingLegacySettings_GetHardEdgeAngle fpRemeshingLegacySettings_GetHardEdgeAngle = nullptr;
		FP_RemeshingLegacySettings_SetTransferNormals fpRemeshingLegacySettings_SetTransferNormals = nullptr;
		FP_RemeshingLegacySettings_GetTransferNormals fpRemeshingLegacySettings_GetTransferNormals = nullptr;
		FP_RemeshingLegacySettings_SetTransferColors fpRemeshingLegacySettings_SetTransferColors = nullptr;
		FP_RemeshingLegacySettings_GetTransferColors fpRemeshingLegacySettings_GetTransferColors = nullptr;
		FP_RemeshingLegacySettings_SetUseClippingGeometry fpRemeshingLegacySettings_SetUseClippingGeometry = nullptr;
		FP_RemeshingLegacySettings_GetUseClippingGeometry fpRemeshingLegacySettings_GetUseClippingGeometry = nullptr;
		FP_RemeshingLegacySettings_SetUseEmptySpaceOverride fpRemeshingLegacySettings_SetUseEmptySpaceOverride = nullptr;
		FP_RemeshingLegacySettings_GetUseEmptySpaceOverride fpRemeshingLegacySettings_GetUseEmptySpaceOverride = nullptr;
		FP_RemeshingLegacySettings_SetEmptySpaceOverride fpRemeshingLegacySettings_SetEmptySpaceOverride = nullptr;
		FP_RemeshingLegacySettings_GetEmptySpaceOverride fpRemeshingLegacySettings_GetEmptySpaceOverride = nullptr;
		FP_RemeshingLegacySettings_SetProcessSelectionSetID fpRemeshingLegacySettings_SetProcessSelectionSetID = nullptr;
		FP_RemeshingLegacySettings_GetProcessSelectionSetID fpRemeshingLegacySettings_GetProcessSelectionSetID = nullptr;
		FP_RemeshingLegacySettings_SetProcessSelectionSetName fpRemeshingLegacySettings_SetProcessSelectionSetName = nullptr;
		FP_RemeshingLegacySettings_GetProcessSelectionSetName fpRemeshingLegacySettings_GetProcessSelectionSetName = nullptr;
		FP_RemeshingLegacySettings_SetCuttingPlaneSelectionSetID fpRemeshingLegacySettings_SetCuttingPlaneSelectionSetID = nullptr;
		FP_RemeshingLegacySettings_GetCuttingPlaneSelectionSetID fpRemeshingLegacySettings_GetCuttingPlaneSelectionSetID = nullptr;
		FP_RemeshingLegacySettings_SetCuttingPlaneSelectionSetName fpRemeshingLegacySettings_SetCuttingPlaneSelectionSetName = nullptr;
		FP_RemeshingLegacySettings_GetCuttingPlaneSelectionSetName fpRemeshingLegacySettings_GetCuttingPlaneSelectionSetName = nullptr;
		FP_RemeshingLegacySettings_SetClippingGeometrySelectionSetID fpRemeshingLegacySettings_SetClippingGeometrySelectionSetID = nullptr;
		FP_RemeshingLegacySettings_GetClippingGeometrySelectionSetID fpRemeshingLegacySettings_GetClippingGeometrySelectionSetID = nullptr;
		FP_RemeshingLegacySettings_SetClippingGeometrySelectionSetName fpRemeshingLegacySettings_SetClippingGeometrySelectionSetName = nullptr;
		FP_RemeshingLegacySettings_GetClippingGeometrySelectionSetName fpRemeshingLegacySettings_GetClippingGeometrySelectionSetName = nullptr;
		FP_RemeshingLegacySettings_SetUseClippingGeometryEmptySpaceOverride fpRemeshingLegacySettings_SetUseClippingGeometryEmptySpaceOverride = nullptr;
		FP_RemeshingLegacySettings_GetUseClippingGeometryEmptySpaceOverride fpRemeshingLegacySettings_GetUseClippingGeometryEmptySpaceOverride = nullptr;
		FP_RemeshingLegacySettings_SetUsePreviewMode fpRemeshingLegacySettings_SetUsePreviewMode = nullptr;
		FP_RemeshingLegacySettings_GetUsePreviewMode fpRemeshingLegacySettings_GetUsePreviewMode = nullptr;
		FP_RemeshingLegacySettings_SetRespectWindingDirection fpRemeshingLegacySettings_SetRespectWindingDirection = nullptr;
		FP_RemeshingLegacySettings_GetRespectWindingDirection fpRemeshingLegacySettings_GetRespectWindingDirection = nullptr;
		FP_RemeshingLegacySettings_SetClippingGeometryEmptySpaceOverride fpRemeshingLegacySettings_SetClippingGeometryEmptySpaceOverride = nullptr;
		FP_RemeshingLegacySettings_GetClippingGeometryEmptySpaceOverride fpRemeshingLegacySettings_GetClippingGeometryEmptySpaceOverride = nullptr;
		FP_RemeshingLegacySettings_SetOutputSceneNodeName fpRemeshingLegacySettings_SetOutputSceneNodeName = nullptr;
		FP_RemeshingLegacySettings_GetOutputSceneNodeName fpRemeshingLegacySettings_GetOutputSceneNodeName = nullptr;
		FP_RemeshingSettings_SetOnScreenSize fpRemeshingSettings_SetOnScreenSize = nullptr;
		FP_RemeshingSettings_GetOnScreenSize fpRemeshingSettings_GetOnScreenSize = nullptr;
		FP_RemeshingSettings_SetRemeshingMode fpRemeshingSettings_SetRemeshingMode = nullptr;
		FP_RemeshingSettings_GetRemeshingMode fpRemeshingSettings_GetRemeshingMode = nullptr;
		FP_RemeshingSettings_SetHoleFilling fpRemeshingSettings_SetHoleFilling = nullptr;
		FP_RemeshingSettings_GetHoleFilling fpRemeshingSettings_GetHoleFilling = nullptr;
		FP_RemeshingSettings_SetSurfaceTransferMode fpRemeshingSettings_SetSurfaceTransferMode = nullptr;
		FP_RemeshingSettings_GetSurfaceTransferMode fpRemeshingSettings_GetSurfaceTransferMode = nullptr;
		FP_RemeshingSettings_SetHardEdgeAngle fpRemeshingSettings_SetHardEdgeAngle = nullptr;
		FP_RemeshingSettings_GetHardEdgeAngle fpRemeshingSettings_GetHardEdgeAngle = nullptr;
		FP_RemeshingSettings_SetForceSoftEdgesWithinTextureCharts fpRemeshingSettings_SetForceSoftEdgesWithinTextureCharts = nullptr;
		FP_RemeshingSettings_GetForceSoftEdgesWithinTextureCharts fpRemeshingSettings_GetForceSoftEdgesWithinTextureCharts = nullptr;
		FP_RemeshingSettings_SetTransferNormals fpRemeshingSettings_SetTransferNormals = nullptr;
		FP_RemeshingSettings_GetTransferNormals fpRemeshingSettings_GetTransferNormals = nullptr;
		FP_RemeshingSettings_SetTransferColors fpRemeshingSettings_SetTransferColors = nullptr;
		FP_RemeshingSettings_GetTransferColors fpRemeshingSettings_GetTransferColors = nullptr;
		FP_RemeshingSettings_SetProcessSelectionSetID fpRemeshingSettings_SetProcessSelectionSetID = nullptr;
		FP_RemeshingSettings_GetProcessSelectionSetID fpRemeshingSettings_GetProcessSelectionSetID = nullptr;
		FP_RemeshingSettings_SetProcessSelectionSetName fpRemeshingSettings_SetProcessSelectionSetName = nullptr;
		FP_RemeshingSettings_GetProcessSelectionSetName fpRemeshingSettings_GetProcessSelectionSetName = nullptr;
		FP_RemeshingSettings_SetKeepUnprocessedSceneMeshes fpRemeshingSettings_SetKeepUnprocessedSceneMeshes = nullptr;
		FP_RemeshingSettings_GetKeepUnprocessedSceneMeshes fpRemeshingSettings_GetKeepUnprocessedSceneMeshes = nullptr;
		FP_RemeshingSettings_SetRemeshingModeManualPositionX fpRemeshingSettings_SetRemeshingModeManualPositionX = nullptr;
		FP_RemeshingSettings_GetRemeshingModeManualPositionX fpRemeshingSettings_GetRemeshingModeManualPositionX = nullptr;
		FP_RemeshingSettings_SetRemeshingModeManualPositionY fpRemeshingSettings_SetRemeshingModeManualPositionY = nullptr;
		FP_RemeshingSettings_GetRemeshingModeManualPositionY fpRemeshingSettings_GetRemeshingModeManualPositionY = nullptr;
		FP_RemeshingSettings_SetRemeshingModeManualPositionZ fpRemeshingSettings_SetRemeshingModeManualPositionZ = nullptr;
		FP_RemeshingSettings_GetRemeshingModeManualPositionZ fpRemeshingSettings_GetRemeshingModeManualPositionZ = nullptr;
		FP_CreateRemeshingLegacyProcessor fpCreateRemeshingLegacyProcessor = nullptr;
		FP_RemeshingLegacyProcessor_SetScene fpRemeshingLegacyProcessor_SetScene = nullptr;
		FP_RemeshingLegacyProcessor_GetScene fpRemeshingLegacyProcessor_GetScene = nullptr;
		FP_RemeshingLegacyProcessor_GetMappingImage fpRemeshingLegacyProcessor_GetMappingImage = nullptr;
		FP_RemeshingLegacyProcessor_GetMappingImageForImageIndex fpRemeshingLegacyProcessor_GetMappingImageForImageIndex = nullptr;
		FP_RemeshingLegacyProcessor_GetRemeshingLegacySettings fpRemeshingLegacyProcessor_GetRemeshingLegacySettings = nullptr;
		FP_RemeshingLegacyProcessor_GetMappingImageSettings fpRemeshingLegacyProcessor_GetMappingImageSettings = nullptr;
		FP_RemeshingLegacyProcessor_GetBoneSettings fpRemeshingLegacyProcessor_GetBoneSettings = nullptr;
		FP_RemeshingLegacyProcessor_GetVisibilitySettings fpRemeshingLegacyProcessor_GetVisibilitySettings = nullptr;
		FP_RemeshingLegacyProcessor_GetResultSelectionSetId fpRemeshingLegacyProcessor_GetResultSelectionSetId = nullptr;
		FP_CreateRemeshingProcessor fpCreateRemeshingProcessor = nullptr;
		FP_RemeshingProcessor_SetScene fpRemeshingProcessor_SetScene = nullptr;
		FP_RemeshingProcessor_GetScene fpRemeshingProcessor_GetScene = nullptr;
		FP_RemeshingProcessor_GetMappingImage fpRemeshingProcessor_GetMappingImage = nullptr;
		FP_RemeshingProcessor_GetMappingImageForImageIndex fpRemeshingProcessor_GetMappingImageForImageIndex = nullptr;
		FP_RemeshingProcessor_GetRemeshingSettings fpRemeshingProcessor_GetRemeshingSettings = nullptr;
		FP_RemeshingProcessor_GetMappingImageSettings fpRemeshingProcessor_GetMappingImageSettings = nullptr;
		FP_RemeshingProcessor_GetBoneSettings fpRemeshingProcessor_GetBoneSettings = nullptr;
		FP_RemeshingProcessor_GetGeometryCullingSettings fpRemeshingProcessor_GetGeometryCullingSettings = nullptr;
		FP_RemeshingProcessor_GetVisibilitySettings fpRemeshingProcessor_GetVisibilitySettings = nullptr;
		FP_CreateScene fpCreateScene = nullptr;
		FP_Scene_GetRootNode fpScene_GetRootNode = nullptr;
		FP_Scene_GetMaterialTable fpScene_GetMaterialTable = nullptr;
		FP_Scene_GetBoneTable fpScene_GetBoneTable = nullptr;
		FP_Scene_GetSelectionSetTable fpScene_GetSelectionSetTable = nullptr;
		FP_Scene_GetTextureTable fpScene_GetTextureTable = nullptr;
		FP_Scene_GetMappingImage fpScene_GetMappingImage = nullptr;
		FP_Scene_RemoveSceneNodesInSelectionSet fpScene_RemoveSceneNodesInSelectionSet = nullptr;
		FP_Scene_RemoveSceneNodes fpScene_RemoveSceneNodes = nullptr;
		FP_Scene_RemoveSceneNodesOfType fpScene_RemoveSceneNodesOfType = nullptr;
		FP_Scene_CreateAABB fpScene_CreateAABB = nullptr;
		FP_Scene_Clear fpScene_Clear = nullptr;
		FP_Scene_LoadFromFile fpScene_LoadFromFile = nullptr;
		FP_Scene_SaveToFile fpScene_SaveToFile = nullptr;
		FP_Scene_EvaluateDefaultGlobalTransformation fpScene_EvaluateDefaultGlobalTransformation = nullptr;
		FP_Scene_GetInf fpScene_GetInf = nullptr;
		FP_Scene_GetSup fpScene_GetSup = nullptr;
		FP_Scene_GetRadius fpScene_GetRadius = nullptr;
		FP_Scene_CalculateExtents fpScene_CalculateExtents = nullptr;
		FP_Scene_GetNodeFromPath fpScene_GetNodeFromPath = nullptr;
		FP_Scene_GetNodeByGUID fpScene_GetNodeByGUID = nullptr;
		FP_Scene_GetSubNodeByGUID fpScene_GetSubNodeByGUID = nullptr;
		FP_Scene_AddCustomField fpScene_AddCustomField = nullptr;
		FP_Scene_RemoveCustomField fpScene_RemoveCustomField = nullptr;
		FP_Scene_GetCustomField fpScene_GetCustomField = nullptr;
		FP_Scene_HasCustomField fpScene_HasCustomField = nullptr;
		FP_Scene_RemoveUnlinkedBones fpScene_RemoveUnlinkedBones = nullptr;
		FP_Scene_Compact fpScene_Compact = nullptr;
		FP_Scene_Append fpScene_Append = nullptr;
		FP_Scene_NewCombinedGeometryFromSelectionSet fpScene_NewCombinedGeometryFromSelectionSet = nullptr;
		FP_Scene_NewCombinedGeometry fpScene_NewCombinedGeometry = nullptr;
		FP_Scene_SelectNodes fpScene_SelectNodes = nullptr;
		FP_Scene_DeepCopy fpScene_DeepCopy = nullptr;
		FP_Scene_NewCopy fpScene_NewCopy = nullptr;
		FP_Scene_GetTriangleCount fpScene_GetTriangleCount = nullptr;
		FP_Scene_StandardizeMaterials fpScene_StandardizeMaterials = nullptr;
		FP_Scene_GetCascadedSceneCount fpScene_GetCascadedSceneCount = nullptr;
		FP_Scene_GetCascadedSceneForIndex fpScene_GetCascadedSceneForIndex = nullptr;
		FP_Scene_GetMaterialChannels fpScene_GetMaterialChannels = nullptr;
		FP_Scene_GetMaterialChannelsWithTextureInputs fpScene_GetMaterialChannelsWithTextureInputs = nullptr;
		FP_CreateSceneNode fpCreateSceneNode = nullptr;
		FP_SceneNode_GetScene fpSceneNode_GetScene = nullptr;
		FP_SceneNode_GetParent fpSceneNode_GetParent = nullptr;
		FP_SceneNode_GetRelativeTransform fpSceneNode_GetRelativeTransform = nullptr;
		FP_SceneNode_SetOriginalName fpSceneNode_SetOriginalName = nullptr;
		FP_SceneNode_GetOriginalName fpSceneNode_GetOriginalName = nullptr;
		FP_SceneNode_SetIsVisible fpSceneNode_SetIsVisible = nullptr;
		FP_SceneNode_GetIsVisible fpSceneNode_GetIsVisible = nullptr;
		FP_SceneNode_SetIsFrozen fpSceneNode_SetIsFrozen = nullptr;
		FP_SceneNode_GetIsFrozen fpSceneNode_GetIsFrozen = nullptr;
		FP_SceneNode_SetIsModified fpSceneNode_SetIsModified = nullptr;
		FP_SceneNode_GetIsModified fpSceneNode_GetIsModified = nullptr;
		FP_SceneNode_SetNodeGUID fpSceneNode_SetNodeGUID = nullptr;
		FP_SceneNode_GetNodeGUID fpSceneNode_GetNodeGUID = nullptr;
		FP_SceneNode_GetInf fpSceneNode_GetInf = nullptr;
		FP_SceneNode_GetSup fpSceneNode_GetSup = nullptr;
		FP_SceneNode_GetChildCount fpSceneNode_GetChildCount = nullptr;
		FP_SceneNode_GetChild fpSceneNode_GetChild = nullptr;
		FP_SceneNode_FindNamedChild fpSceneNode_FindNamedChild = nullptr;
		FP_SceneNode_AddChild fpSceneNode_AddChild = nullptr;
		FP_SceneNode_CreateChildMesh fpSceneNode_CreateChildMesh = nullptr;
		FP_SceneNode_CreateChildPlane fpSceneNode_CreateChildPlane = nullptr;
		FP_SceneNode_RemoveChild fpSceneNode_RemoveChild = nullptr;
		FP_SceneNode_RemoveChildren fpSceneNode_RemoveChildren = nullptr;
		FP_SceneNode_RemoveFromParent fpSceneNode_RemoveFromParent = nullptr;
		FP_SceneNode_HasChild fpSceneNode_HasChild = nullptr;
		FP_SceneNode_NewCopy fpSceneNode_NewCopy = nullptr;
		FP_SceneNode_NewClone fpSceneNode_NewClone = nullptr;
		FP_SceneNode_EvaluateDefaultGlobalTransformation fpSceneNode_EvaluateDefaultGlobalTransformation = nullptr;
		FP_SceneNode_CalculateExtents fpSceneNode_CalculateExtents = nullptr;
		FP_SceneNode_GetPath fpSceneNode_GetPath = nullptr;
		FP_CreateSceneNodeCollection fpCreateSceneNodeCollection = nullptr;
		FP_SceneNodeCollection_AddSceneNode fpSceneNodeCollection_AddSceneNode = nullptr;
		FP_SceneNodeCollection_GetSceneNode fpSceneNodeCollection_GetSceneNode = nullptr;
		FP_SceneNodeCollection_RemoveSceneNode fpSceneNodeCollection_RemoveSceneNode = nullptr;
		FP_SceneNodeCollection_FindSceneNode fpSceneNodeCollection_FindSceneNode = nullptr;
		FP_SceneNodeCollection_GetNextItemAsSceneNode fpSceneNodeCollection_GetNextItemAsSceneNode = nullptr;
		FP_SceneNodeCollection_IsSceneNodeInCollection fpSceneNodeCollection_IsSceneNodeInCollection = nullptr;
		FP_CreateSceneMesh fpCreateSceneMesh = nullptr;
		FP_SceneMesh_SetGeometry fpSceneMesh_SetGeometry = nullptr;
		FP_SceneMesh_GetGeometry fpSceneMesh_GetGeometry = nullptr;
		FP_CreateSceneLodGroup fpCreateSceneLodGroup = nullptr;
		FP_SceneLodGroup_GetThresholds fpSceneLodGroup_GetThresholds = nullptr;
		FP_SceneLodGroup_GetLodForDistance fpSceneLodGroup_GetLodForDistance = nullptr;
		FP_CreateSceneBone fpCreateSceneBone = nullptr;
		FP_SceneBone_GetParentBone fpSceneBone_GetParentBone = nullptr;
		FP_SceneBone_CollectAllChildBones fpSceneBone_CollectAllChildBones = nullptr;
		FP_SceneBone_GetBoneId fpSceneBone_GetBoneId = nullptr;
		FP_CreateSceneBoneTable fpCreateSceneBoneTable = nullptr;
		FP_SceneBoneTable_AddBone fpSceneBoneTable_AddBone = nullptr;
		FP_SceneBoneTable_FindBone fpSceneBoneTable_FindBone = nullptr;
		FP_SceneBoneTable_FindBoneId fpSceneBoneTable_FindBoneId = nullptr;
		FP_SceneBoneTable_GetBone fpSceneBoneTable_GetBone = nullptr;
		FP_SceneBoneTable_RemoveBone fpSceneBoneTable_RemoveBone = nullptr;
		FP_SceneBoneTable_GetBonesCount fpSceneBoneTable_GetBonesCount = nullptr;
		FP_CreateScenePlane fpCreateScenePlane = nullptr;
		FP_ScenePlane_GetPosition fpScenePlane_GetPosition = nullptr;
		FP_ScenePlane_SetPosition fpScenePlane_SetPosition = nullptr;
		FP_ScenePlane_GetNormal fpScenePlane_GetNormal = nullptr;
		FP_ScenePlane_SetNormal fpScenePlane_SetNormal = nullptr;
		FP_CreateSceneCamera fpCreateSceneCamera = nullptr;
		FP_SceneCamera_SetCameraType fpSceneCamera_SetCameraType = nullptr;
		FP_SceneCamera_GetCameraType fpSceneCamera_GetCameraType = nullptr;
		FP_SceneCamera_GetCameraPositions fpSceneCamera_GetCameraPositions = nullptr;
		FP_SceneCamera_GetTargetPositions fpSceneCamera_GetTargetPositions = nullptr;
		FP_SceneCamera_SetUseNormalizedCoordinates fpSceneCamera_SetUseNormalizedCoordinates = nullptr;
		FP_SceneCamera_GetUseNormalizedCoordinates fpSceneCamera_GetUseNormalizedCoordinates = nullptr;
		FP_SceneCamera_SetOrthographicCameraPixelSize fpSceneCamera_SetOrthographicCameraPixelSize = nullptr;
		FP_SceneCamera_GetOrthographicCameraPixelSize fpSceneCamera_GetOrthographicCameraPixelSize = nullptr;
		FP_SceneCamera_SetFieldOfView fpSceneCamera_SetFieldOfView = nullptr;
		FP_SceneCamera_GetFieldOfView fpSceneCamera_GetFieldOfView = nullptr;
		FP_SceneCamera_SetPixelFieldOfView fpSceneCamera_SetPixelFieldOfView = nullptr;
		FP_SceneCamera_GetPixelFieldOfView fpSceneCamera_GetPixelFieldOfView = nullptr;
		FP_SceneCamera_GetNumberOfViews fpSceneCamera_GetNumberOfViews = nullptr;
		FP_SceneCamera_ValidateCamera fpSceneCamera_ValidateCamera = nullptr;
		FP_SceneCamera_SetCustomSphereCameraPath fpSceneCamera_SetCustomSphereCameraPath = nullptr;
		FP_CreateSceneExporter fpCreateSceneExporter = nullptr;
		FP_SceneExporter_SetExportFilePath fpSceneExporter_SetExportFilePath = nullptr;
		FP_SceneExporter_GetExportFilePath fpSceneExporter_GetExportFilePath = nullptr;
		FP_SceneExporter_SetPrimaryTexCoordName fpSceneExporter_SetPrimaryTexCoordName = nullptr;
		FP_SceneExporter_GetPrimaryTexCoordName fpSceneExporter_GetPrimaryTexCoordName = nullptr;
		FP_SceneExporter_SetScene fpSceneExporter_SetScene = nullptr;
		FP_SceneExporter_RunExport fpSceneExporter_RunExport = nullptr;
		FP_SceneExporter_Clear fpSceneExporter_Clear = nullptr;
		FP_SceneExporter_SetEmbedReferences fpSceneExporter_SetEmbedReferences = nullptr;
		FP_SceneExporter_GetEmbedReferences fpSceneExporter_GetEmbedReferences = nullptr;
		FP_SceneExporter_SetExportCascadedScenes fpSceneExporter_SetExportCascadedScenes = nullptr;
		FP_SceneExporter_GetExportCascadedScenes fpSceneExporter_GetExportCascadedScenes = nullptr;
		FP_CreateSceneImporter fpCreateSceneImporter = nullptr;
		FP_SceneImporter_SetImportFilePath fpSceneImporter_SetImportFilePath = nullptr;
		FP_SceneImporter_GetImportFilePath fpSceneImporter_GetImportFilePath = nullptr;
		FP_SceneImporter_GetScene fpSceneImporter_GetScene = nullptr;
		FP_SceneImporter_RunImport fpSceneImporter_RunImport = nullptr;
		FP_SceneImporter_Clear fpSceneImporter_Clear = nullptr;
		FP_CreateSelectionSet fpCreateSelectionSet = nullptr;
		FP_SelectionSet_AddItem fpSelectionSet_AddItem = nullptr;
		FP_SelectionSet_RemoveItem fpSelectionSet_RemoveItem = nullptr;
		FP_SelectionSet_AddHierarchy fpSelectionSet_AddHierarchy = nullptr;
		FP_SelectionSet_RemoveHierarchy fpSelectionSet_RemoveHierarchy = nullptr;
		FP_SelectionSet_Clear fpSelectionSet_Clear = nullptr;
		FP_SelectionSet_GetItemCount fpSelectionSet_GetItemCount = nullptr;
		FP_SelectionSet_GetItem fpSelectionSet_GetItem = nullptr;
		FP_CreateSelectionSetTable fpCreateSelectionSetTable = nullptr;
		FP_SelectionSetTable_AddSelectionSet fpSelectionSetTable_AddSelectionSet = nullptr;
		FP_SelectionSetTable_FindSelectionSet fpSelectionSetTable_FindSelectionSet = nullptr;
		FP_SelectionSetTable_FindSelectionSetId fpSelectionSetTable_FindSelectionSetId = nullptr;
		FP_SelectionSetTable_GetSelectionSet fpSelectionSetTable_GetSelectionSet = nullptr;
		FP_SelectionSetTable_RemoveSelectionSet fpSelectionSetTable_RemoveSelectionSet = nullptr;
		FP_SelectionSetTable_RemoveNamedSelectionSet fpSelectionSetTable_RemoveNamedSelectionSet = nullptr;
		FP_SelectionSetTable_GetSelectionSetCount fpSelectionSetTable_GetSelectionSetCount = nullptr;
		FP_CreateTexture fpCreateTexture = nullptr;
		FP_Texture_SetFilePath fpTexture_SetFilePath = nullptr;
		FP_Texture_GetFilePath fpTexture_GetFilePath = nullptr;
		FP_Texture_SetImageData fpTexture_SetImageData = nullptr;
		FP_Texture_GetImageData fpTexture_GetImageData = nullptr;
		FP_Texture_ChangeTexturePrefixPath fpTexture_ChangeTexturePrefixPath = nullptr;
		FP_Texture_ExportImageData fpTexture_ExportImageData = nullptr;
		FP_CreateTextureTable fpCreateTextureTable = nullptr;
		FP_TextureTable_AddTexture fpTextureTable_AddTexture = nullptr;
		FP_TextureTable_FindTexture fpTextureTable_FindTexture = nullptr;
		FP_TextureTable_FindTextureUsingPath fpTextureTable_FindTextureUsingPath = nullptr;
		FP_TextureTable_FindTextureId fpTextureTable_FindTextureId = nullptr;
		FP_TextureTable_SetTexture fpTextureTable_SetTexture = nullptr;
		FP_TextureTable_GetTexture fpTextureTable_GetTexture = nullptr;
		FP_TextureTable_RemoveTexture fpTextureTable_RemoveTexture = nullptr;
		FP_TextureTable_GetTexturesCount fpTextureTable_GetTexturesCount = nullptr;
		FP_TextureTable_ChangeTexturePrefixPath fpTextureTable_ChangeTexturePrefixPath = nullptr;
		FP_GeometryCullingSettings_SetUseClippingPlanes fpGeometryCullingSettings_SetUseClippingPlanes = nullptr;
		FP_GeometryCullingSettings_GetUseClippingPlanes fpGeometryCullingSettings_GetUseClippingPlanes = nullptr;
		FP_GeometryCullingSettings_SetUseClippingGeometry fpGeometryCullingSettings_SetUseClippingGeometry = nullptr;
		FP_GeometryCullingSettings_GetUseClippingGeometry fpGeometryCullingSettings_GetUseClippingGeometry = nullptr;
		FP_GeometryCullingSettings_SetClippingPlaneSelectionSetID fpGeometryCullingSettings_SetClippingPlaneSelectionSetID = nullptr;
		FP_GeometryCullingSettings_GetClippingPlaneSelectionSetID fpGeometryCullingSettings_GetClippingPlaneSelectionSetID = nullptr;
		FP_GeometryCullingSettings_SetClippingPlaneSelectionSetName fpGeometryCullingSettings_SetClippingPlaneSelectionSetName = nullptr;
		FP_GeometryCullingSettings_GetClippingPlaneSelectionSetName fpGeometryCullingSettings_GetClippingPlaneSelectionSetName = nullptr;
		FP_GeometryCullingSettings_SetClippingGeometrySelectionSetID fpGeometryCullingSettings_SetClippingGeometrySelectionSetID = nullptr;
		FP_GeometryCullingSettings_GetClippingGeometrySelectionSetID fpGeometryCullingSettings_GetClippingGeometrySelectionSetID = nullptr;
		FP_GeometryCullingSettings_SetClippingGeometrySelectionSetName fpGeometryCullingSettings_SetClippingGeometrySelectionSetName = nullptr;
		FP_GeometryCullingSettings_GetClippingGeometrySelectionSetName fpGeometryCullingSettings_GetClippingGeometrySelectionSetName = nullptr;
		FP_CreateImageDataImporter fpCreateImageDataImporter = nullptr;
		FP_ImageDataImporter_SetImportFilePath fpImageDataImporter_SetImportFilePath = nullptr;
		FP_ImageDataImporter_GetImportFilePath fpImageDataImporter_GetImportFilePath = nullptr;
		FP_ImageDataImporter_SetExtensionOverride fpImageDataImporter_SetExtensionOverride = nullptr;
		FP_ImageDataImporter_GetExtensionOverride fpImageDataImporter_GetExtensionOverride = nullptr;
		FP_ImageDataImporter_GetImage fpImageDataImporter_GetImage = nullptr;
		FP_ImageDataImporter_SetCapToPowerOfTwo fpImageDataImporter_SetCapToPowerOfTwo = nullptr;
		FP_ImageDataImporter_GetCapToPowerOfTwo fpImageDataImporter_GetCapToPowerOfTwo = nullptr;
		FP_ImageDataImporter_SetMaxWidth fpImageDataImporter_SetMaxWidth = nullptr;
		FP_ImageDataImporter_GetMaxWidth fpImageDataImporter_GetMaxWidth = nullptr;
		FP_ImageDataImporter_SetMaxHeight fpImageDataImporter_SetMaxHeight = nullptr;
		FP_ImageDataImporter_GetMaxHeight fpImageDataImporter_GetMaxHeight = nullptr;
		FP_ImageDataImporter_SetImportOnlyHeader fpImageDataImporter_SetImportOnlyHeader = nullptr;
		FP_ImageDataImporter_GetImportOnlyHeader fpImageDataImporter_GetImportOnlyHeader = nullptr;
		FP_ImageDataImporter_GetNumberOfChannels fpImageDataImporter_GetNumberOfChannels = nullptr;
		FP_ImageDataImporter_GetBitsPerPixel fpImageDataImporter_GetBitsPerPixel = nullptr;
		FP_ImageDataImporter_GetImageFileFormat fpImageDataImporter_GetImageFileFormat = nullptr;
		FP_ImageDataImporter_RunImport fpImageDataImporter_RunImport = nullptr;
		FP_ImageDataImporter_Clear fpImageDataImporter_Clear = nullptr;
		FP_MappingImageMeshData_GetMappedGeometriesCount fpMappingImageMeshData_GetMappedGeometriesCount = nullptr;
		FP_MappingImageMeshData_GetStartTriangleIdOfGeometry fpMappingImageMeshData_GetStartTriangleIdOfGeometry = nullptr;
		FP_MappingImageMeshData_GetScenePathOfGeometry fpMappingImageMeshData_GetScenePathOfGeometry = nullptr;
		FP_MappingImageMeshData_GetNodeGuidOfGeometry fpMappingImageMeshData_GetNodeGuidOfGeometry = nullptr;
		FP_MappingImageMeshData_Clear fpMappingImageMeshData_Clear = nullptr;
		FP_ShadingNode_GetParameterCount fpShadingNode_GetParameterCount = nullptr;
		FP_ShadingNode_GetParameterName fpShadingNode_GetParameterName = nullptr;
		FP_ShadingNode_SetDefaultParameter fpShadingNode_SetDefaultParameter = nullptr;
		FP_ShadingNode_GetDefaultParameterRed fpShadingNode_GetDefaultParameterRed = nullptr;
		FP_ShadingNode_GetDefaultParameterGreen fpShadingNode_GetDefaultParameterGreen = nullptr;
		FP_ShadingNode_GetDefaultParameterBlue fpShadingNode_GetDefaultParameterBlue = nullptr;
		FP_ShadingNode_GetDefaultParameterAlpha fpShadingNode_GetDefaultParameterAlpha = nullptr;
		FP_ShadingFilterNode_SetInput fpShadingFilterNode_SetInput = nullptr;
		FP_ShadingFilterNode_GetInput fpShadingFilterNode_GetInput = nullptr;
		FP_ShadingFilterNode_GetParameterIsInputable fpShadingFilterNode_GetParameterIsInputable = nullptr;
		FP_CreateShadingTextureNode fpCreateShadingTextureNode = nullptr;
		FP_ShadingTextureNode_SetTextureName fpShadingTextureNode_SetTextureName = nullptr;
		FP_ShadingTextureNode_GetTextureName fpShadingTextureNode_GetTextureName = nullptr;
		FP_ShadingTextureNode_SetTexCoordName fpShadingTextureNode_SetTexCoordName = nullptr;
		FP_ShadingTextureNode_GetTexCoordName fpShadingTextureNode_GetTexCoordName = nullptr;
		FP_ShadingTextureNode_SetTexCoordLevel fpShadingTextureNode_SetTexCoordLevel = nullptr;
		FP_ShadingTextureNode_GetTexCoordLevel fpShadingTextureNode_GetTexCoordLevel = nullptr;
		FP_ShadingTextureNode_SetUseSRGB fpShadingTextureNode_SetUseSRGB = nullptr;
		FP_ShadingTextureNode_GetUseSRGB fpShadingTextureNode_GetUseSRGB = nullptr;
		FP_ShadingTextureNode_SetTileU fpShadingTextureNode_SetTileU = nullptr;
		FP_ShadingTextureNode_GetTileU fpShadingTextureNode_GetTileU = nullptr;
		FP_ShadingTextureNode_SetTileV fpShadingTextureNode_SetTileV = nullptr;
		FP_ShadingTextureNode_GetTileV fpShadingTextureNode_GetTileV = nullptr;
		FP_ShadingTextureNode_SetOffsetU fpShadingTextureNode_SetOffsetU = nullptr;
		FP_ShadingTextureNode_GetOffsetU fpShadingTextureNode_GetOffsetU = nullptr;
		FP_ShadingTextureNode_SetOffsetV fpShadingTextureNode_SetOffsetV = nullptr;
		FP_ShadingTextureNode_GetOffsetV fpShadingTextureNode_GetOffsetV = nullptr;
		FP_ShadingTextureNode_SetTextureWrapMode fpShadingTextureNode_SetTextureWrapMode = nullptr;
		FP_ShadingTextureNode_GetTextureWrapMode fpShadingTextureNode_GetTextureWrapMode = nullptr;
		FP_ShadingTextureNode_SetTextureWrapModeU fpShadingTextureNode_SetTextureWrapModeU = nullptr;
		FP_ShadingTextureNode_GetTextureWrapModeU fpShadingTextureNode_GetTextureWrapModeU = nullptr;
		FP_ShadingTextureNode_SetTextureWrapModeV fpShadingTextureNode_SetTextureWrapModeV = nullptr;
		FP_ShadingTextureNode_GetTextureWrapModeV fpShadingTextureNode_GetTextureWrapModeV = nullptr;
		FP_ShadingTextureNode_SetRotation fpShadingTextureNode_SetRotation = nullptr;
		FP_ShadingTextureNode_GetRotation fpShadingTextureNode_GetRotation = nullptr;
		FP_CreateShadingSwizzlingNode fpCreateShadingSwizzlingNode = nullptr;
		FP_ShadingSwizzlingNode_SetRedComponent fpShadingSwizzlingNode_SetRedComponent = nullptr;
		FP_ShadingSwizzlingNode_GetRedComponent fpShadingSwizzlingNode_GetRedComponent = nullptr;
		FP_ShadingSwizzlingNode_SetGreenComponent fpShadingSwizzlingNode_SetGreenComponent = nullptr;
		FP_ShadingSwizzlingNode_GetGreenComponent fpShadingSwizzlingNode_GetGreenComponent = nullptr;
		FP_ShadingSwizzlingNode_SetBlueComponent fpShadingSwizzlingNode_SetBlueComponent = nullptr;
		FP_ShadingSwizzlingNode_GetBlueComponent fpShadingSwizzlingNode_GetBlueComponent = nullptr;
		FP_ShadingSwizzlingNode_SetAlphaComponent fpShadingSwizzlingNode_SetAlphaComponent = nullptr;
		FP_ShadingSwizzlingNode_GetAlphaComponent fpShadingSwizzlingNode_GetAlphaComponent = nullptr;
		FP_CreateShadingColorNode fpCreateShadingColorNode = nullptr;
		FP_ShadingColorNode_SetColor fpShadingColorNode_SetColor = nullptr;
		FP_CreateShadingAddNode fpCreateShadingAddNode = nullptr;
		FP_CreateShadingSubtractNode fpCreateShadingSubtractNode = nullptr;
		FP_CreateShadingMultiplyNode fpCreateShadingMultiplyNode = nullptr;
		FP_CreateShadingColorCorrectionNode fpCreateShadingColorCorrectionNode = nullptr;
		FP_CreateShadingPowNode fpCreateShadingPowNode = nullptr;
		FP_CreateShadingDivideNode fpCreateShadingDivideNode = nullptr;
		FP_CreateShadingClampNode fpCreateShadingClampNode = nullptr;
		FP_CreateShadingMaxNode fpCreateShadingMaxNode = nullptr;
		FP_CreateShadingMinNode fpCreateShadingMinNode = nullptr;
		FP_CreateShadingStepNode fpCreateShadingStepNode = nullptr;
		FP_CreateShadingEqualNode fpCreateShadingEqualNode = nullptr;
		FP_CreateShadingNotEqualNode fpCreateShadingNotEqualNode = nullptr;
		FP_CreateShadingVertexColorNode fpCreateShadingVertexColorNode = nullptr;
		FP_ShadingVertexColorNode_SetVertexColorIndex fpShadingVertexColorNode_SetVertexColorIndex = nullptr;
		FP_ShadingVertexColorNode_GetVertexColorIndex fpShadingVertexColorNode_GetVertexColorIndex = nullptr;
		FP_ShadingVertexColorNode_SetVertexColorSet fpShadingVertexColorNode_SetVertexColorSet = nullptr;
		FP_ShadingVertexColorNode_GetVertexColorSet fpShadingVertexColorNode_GetVertexColorSet = nullptr;
		FP_CreateShadingInterpolateNode fpCreateShadingInterpolateNode = nullptr;
		FP_CreateShadingCustomNode fpCreateShadingCustomNode = nullptr;
		FP_ShadingCustomNode_SetInputCount fpShadingCustomNode_SetInputCount = nullptr;
		FP_ShadingCustomNode_GetInputCount fpShadingCustomNode_GetInputCount = nullptr;
		FP_ShadingCustomNode_GetInputValue fpShadingCustomNode_GetInputValue = nullptr;
		FP_ShadingCustomNode_SetCustomShaderCode fpShadingCustomNode_SetCustomShaderCode = nullptr;
		FP_CreateShadingLayeredBlendNode fpCreateShadingLayeredBlendNode = nullptr;
		FP_ShadingLayeredBlendNode_SetInputCount fpShadingLayeredBlendNode_SetInputCount = nullptr;
		FP_ShadingLayeredBlendNode_GetInputCount fpShadingLayeredBlendNode_GetInputCount = nullptr;
		FP_ShadingLayeredBlendNode_SetPerInputBlendType fpShadingLayeredBlendNode_SetPerInputBlendType = nullptr;
		FP_ShadingLayeredBlendNode_GetPerInputBlendType fpShadingLayeredBlendNode_GetPerInputBlendType = nullptr;
		FP_CreateShadingNormalize3Node fpCreateShadingNormalize3Node = nullptr;
		FP_CreateShadingSqrtNode fpCreateShadingSqrtNode = nullptr;
		FP_CreateShadingDot3Node fpCreateShadingDot3Node = nullptr;
		FP_CreateShadingCross3Node fpCreateShadingCross3Node = nullptr;
		FP_CreateShadingCosNode fpCreateShadingCosNode = nullptr;
		FP_CreateShadingSinNode fpCreateShadingSinNode = nullptr;
		FP_CreateShadingGreaterThanNode fpCreateShadingGreaterThanNode = nullptr;
		FP_CreateShadingLessThanNode fpCreateShadingLessThanNode = nullptr;
		FP_CreateShadingGeometryFieldNode fpCreateShadingGeometryFieldNode = nullptr;
		FP_ShadingGeometryFieldNode_SetFieldType fpShadingGeometryFieldNode_SetFieldType = nullptr;
		FP_ShadingGeometryFieldNode_GetFieldType fpShadingGeometryFieldNode_GetFieldType = nullptr;
		FP_ShadingGeometryFieldNode_SetFieldIndex fpShadingGeometryFieldNode_SetFieldIndex = nullptr;
		FP_ShadingGeometryFieldNode_GetFieldIndex fpShadingGeometryFieldNode_GetFieldIndex = nullptr;
		FP_ShadingGeometryFieldNode_SetFieldName fpShadingGeometryFieldNode_SetFieldName = nullptr;
		FP_ShadingGeometryFieldNode_GetFieldName fpShadingGeometryFieldNode_GetFieldName = nullptr;
		FP_CreateShaderGenerator fpCreateShaderGenerator = nullptr;
		FP_ShaderGenerator_SetMaterial fpShaderGenerator_SetMaterial = nullptr;
		FP_ShaderGenerator_GetMaterial fpShaderGenerator_GetMaterial = nullptr;
		FP_ShaderGenerator_SetIdentifersPrefix fpShaderGenerator_SetIdentifersPrefix = nullptr;
		FP_ShaderGenerator_GetIdentifersPrefix fpShaderGenerator_GetIdentifersPrefix = nullptr;
		FP_ShaderGenerator_SetGenerateFullShader fpShaderGenerator_SetGenerateFullShader = nullptr;
		FP_ShaderGenerator_GetGenerateFullShader fpShaderGenerator_GetGenerateFullShader = nullptr;
		FP_ShaderGenerator_SetGenerateTextureSamplerData fpShaderGenerator_SetGenerateTextureSamplerData = nullptr;
		FP_ShaderGenerator_GetGenerateTextureSamplerData fpShaderGenerator_GetGenerateTextureSamplerData = nullptr;
		FP_ShaderGenerator_GenerateShaderData fpShaderGenerator_GenerateShaderData = nullptr;
		FP_ShaderGenerator_GetHLSLCode fpShaderGenerator_GetHLSLCode = nullptr;
		FP_ShaderGenerator_GetGLSLVertexCode fpShaderGenerator_GetGLSLVertexCode = nullptr;
		FP_ShaderGenerator_GetGLSLFragmentCode fpShaderGenerator_GetGLSLFragmentCode = nullptr;
		FP_ShaderGenerator_GetShaderInputTexturePathsCount fpShaderGenerator_GetShaderInputTexturePathsCount = nullptr;
		FP_ShaderGenerator_GetShaderInputTexturePath fpShaderGenerator_GetShaderInputTexturePath = nullptr;
		FP_ShaderGenerator_GetShaderInputUVSetsCount fpShaderGenerator_GetShaderInputUVSetsCount = nullptr;
		FP_ShaderGenerator_GetShaderInputUVSet fpShaderGenerator_GetShaderInputUVSet = nullptr;
		FP_ShaderGenerator_GetShaderInputUVIndex fpShaderGenerator_GetShaderInputUVIndex = nullptr;
		FP_ShaderGenerator_GetShaderInputVertexColorsCount fpShaderGenerator_GetShaderInputVertexColorsCount = nullptr;
		FP_ShaderGenerator_GetShaderInputVertexColor fpShaderGenerator_GetShaderInputVertexColor = nullptr;
		FP_ShaderGenerator_GetShaderInputVertexColorsIndex fpShaderGenerator_GetShaderInputVertexColorsIndex = nullptr;
		FP_ShaderGenerator_UnloadData fpShaderGenerator_UnloadData = nullptr;
		FP_CreateAggregationProcessor fpCreateAggregationProcessor = nullptr;
		FP_AggregationProcessor_SetScene fpAggregationProcessor_SetScene = nullptr;
		FP_AggregationProcessor_GetScene fpAggregationProcessor_GetScene = nullptr;
		FP_AggregationProcessor_GetMappingImage fpAggregationProcessor_GetMappingImage = nullptr;
		FP_AggregationProcessor_GetMappingImageForImageIndex fpAggregationProcessor_GetMappingImageForImageIndex = nullptr;
		FP_AggregationProcessor_GetAggregationSettings fpAggregationProcessor_GetAggregationSettings = nullptr;
		FP_AggregationProcessor_GetMappingImageSettings fpAggregationProcessor_GetMappingImageSettings = nullptr;
		FP_AggregationProcessor_GetVisibilitySettings fpAggregationProcessor_GetVisibilitySettings = nullptr;
		FP_AggregationProcessor_GetGeometryCullingSettings fpAggregationProcessor_GetGeometryCullingSettings = nullptr;
		FP_AggregationProcessor_GetVertexWeightSettings fpAggregationProcessor_GetVertexWeightSettings = nullptr;
		FP_CreateAggregationSettings fpCreateAggregationSettings = nullptr;
		FP_AggregationSettings_SetProcessSelectionSetID fpAggregationSettings_SetProcessSelectionSetID = nullptr;
		FP_AggregationSettings_GetProcessSelectionSetID fpAggregationSettings_GetProcessSelectionSetID = nullptr;
		FP_AggregationSettings_SetProcessSelectionSetName fpAggregationSettings_SetProcessSelectionSetName = nullptr;
		FP_AggregationSettings_GetProcessSelectionSetName fpAggregationSettings_GetProcessSelectionSetName = nullptr;
		FP_AggregationSettings_SetKeepUnprocessedSceneMeshes fpAggregationSettings_SetKeepUnprocessedSceneMeshes = nullptr;
		FP_AggregationSettings_GetKeepUnprocessedSceneMeshes fpAggregationSettings_GetKeepUnprocessedSceneMeshes = nullptr;
		FP_AggregationSettings_SetMergeGeometries fpAggregationSettings_SetMergeGeometries = nullptr;
		FP_AggregationSettings_GetMergeGeometries fpAggregationSettings_GetMergeGeometries = nullptr;
		FP_AggregationSettings_SetEnableGeometryCulling fpAggregationSettings_SetEnableGeometryCulling = nullptr;
		FP_AggregationSettings_GetEnableGeometryCulling fpAggregationSettings_GetEnableGeometryCulling = nullptr;
		FP_AggregationSettings_SetGeometryCullingPrecision fpAggregationSettings_SetGeometryCullingPrecision = nullptr;
		FP_AggregationSettings_GetGeometryCullingPrecision fpAggregationSettings_GetGeometryCullingPrecision = nullptr;
		FP_AggregationSettings_SetSubdivideGeometryBasedOnUVTiles fpAggregationSettings_SetSubdivideGeometryBasedOnUVTiles = nullptr;
		FP_AggregationSettings_GetSubdivideGeometryBasedOnUVTiles fpAggregationSettings_GetSubdivideGeometryBasedOnUVTiles = nullptr;
		FP_AggregationSettings_SetSubdivisionTileSize fpAggregationSettings_SetSubdivisionTileSize = nullptr;
		FP_AggregationSettings_GetSubdivisionTileSize fpAggregationSettings_GetSubdivisionTileSize = nullptr;
		FP_CreateChartAggregator fpCreateChartAggregator = nullptr;
		FP_ChartAggregator_Parameterize fpChartAggregator_Parameterize = nullptr;
		FP_ChartAggregator_SetInputMaterialCount fpChartAggregator_SetInputMaterialCount = nullptr;
		FP_ChartAggregator_GetInputMaterialCount fpChartAggregator_GetInputMaterialCount = nullptr;
		FP_ChartAggregator_SetOutputMaterialCount fpChartAggregator_SetOutputMaterialCount = nullptr;
		FP_ChartAggregator_GetOutputMaterialCount fpChartAggregator_GetOutputMaterialCount = nullptr;
		FP_ChartAggregator_SetInputOutputMaterialMapping fpChartAggregator_SetInputOutputMaterialMapping = nullptr;
		FP_ChartAggregator_GetInputOutputMaterialMapping fpChartAggregator_GetInputOutputMaterialMapping = nullptr;
		FP_ChartAggregator_SetTextureWidth fpChartAggregator_SetTextureWidth = nullptr;
		FP_ChartAggregator_GetTextureWidth fpChartAggregator_GetTextureWidth = nullptr;
		FP_ChartAggregator_SetTextureWidthForMaterialIndex fpChartAggregator_SetTextureWidthForMaterialIndex = nullptr;
		FP_ChartAggregator_GetTextureWidthForMaterialIndex fpChartAggregator_GetTextureWidthForMaterialIndex = nullptr;
		FP_ChartAggregator_SetTextureHeight fpChartAggregator_SetTextureHeight = nullptr;
		FP_ChartAggregator_GetTextureHeight fpChartAggregator_GetTextureHeight = nullptr;
		FP_ChartAggregator_SetTextureHeightForMaterialIndex fpChartAggregator_SetTextureHeightForMaterialIndex = nullptr;
		FP_ChartAggregator_GetTextureHeightForMaterialIndex fpChartAggregator_GetTextureHeightForMaterialIndex = nullptr;
		FP_ChartAggregator_SetGutterSpace fpChartAggregator_SetGutterSpace = nullptr;
		FP_ChartAggregator_GetGutterSpace fpChartAggregator_GetGutterSpace = nullptr;
		FP_ChartAggregator_SetGutterSpaceForMaterialIndex fpChartAggregator_SetGutterSpaceForMaterialIndex = nullptr;
		FP_ChartAggregator_GetGutterSpaceForMaterialIndex fpChartAggregator_GetGutterSpaceForMaterialIndex = nullptr;
		FP_ChartAggregator_SetUseAutomaticTextureSize fpChartAggregator_SetUseAutomaticTextureSize = nullptr;
		FP_ChartAggregator_GetUseAutomaticTextureSize fpChartAggregator_GetUseAutomaticTextureSize = nullptr;
		FP_ChartAggregator_SetAutomaticTextureSizeMultiplier fpChartAggregator_SetAutomaticTextureSizeMultiplier = nullptr;
		FP_ChartAggregator_GetAutomaticTextureSizeMultiplier fpChartAggregator_GetAutomaticTextureSizeMultiplier = nullptr;
		FP_ChartAggregator_SetForcePower2Texture fpChartAggregator_SetForcePower2Texture = nullptr;
		FP_ChartAggregator_GetForcePower2Texture fpChartAggregator_GetForcePower2Texture = nullptr;
		FP_ChartAggregator_SetTexCoordLevel fpChartAggregator_SetTexCoordLevel = nullptr;
		FP_ChartAggregator_GetTexCoordLevel fpChartAggregator_GetTexCoordLevel = nullptr;
		FP_ChartAggregator_SetTexCoordName fpChartAggregator_SetTexCoordName = nullptr;
		FP_ChartAggregator_GetTexCoordName fpChartAggregator_GetTexCoordName = nullptr;
		FP_ChartAggregator_SetChartAggregatorMode fpChartAggregator_SetChartAggregatorMode = nullptr;
		FP_ChartAggregator_GetChartAggregatorMode fpChartAggregator_GetChartAggregatorMode = nullptr;
		FP_ChartAggregator_SetSurfaceAreaScale fpChartAggregator_SetSurfaceAreaScale = nullptr;
		FP_ChartAggregator_GetSurfaceAreaScale fpChartAggregator_GetSurfaceAreaScale = nullptr;
		FP_ChartAggregator_SetSeparateOverlappingCharts fpChartAggregator_SetSeparateOverlappingCharts = nullptr;
		FP_ChartAggregator_SetMaterialTable fpChartAggregator_SetMaterialTable = nullptr;
		FP_ChartAggregator_SetTextureTable fpChartAggregator_SetTextureTable = nullptr;
		FP_ChartAggregator_GetKeepOriginalChartSizesTextureWidth fpChartAggregator_GetKeepOriginalChartSizesTextureWidth = nullptr;
		FP_ChartAggregator_GetKeepOriginalChartSizesTextureWidthForMaterialIndex fpChartAggregator_GetKeepOriginalChartSizesTextureWidthForMaterialIndex = nullptr;
		FP_ChartAggregator_GetKeepOriginalChartSizesTextureHeight fpChartAggregator_GetKeepOriginalChartSizesTextureHeight = nullptr;
		FP_ChartAggregator_GetKeepOriginalChartSizesTextureHeightForMaterialIndex fpChartAggregator_GetKeepOriginalChartSizesTextureHeightForMaterialIndex = nullptr;
		FP_ChartAggregator_SetOriginalChartProportionsChannel fpChartAggregator_SetOriginalChartProportionsChannel = nullptr;
		FP_ChartAggregator_GetOriginalChartProportionsChannel fpChartAggregator_GetOriginalChartProportionsChannel = nullptr;
		FP_ChartAggregator_SetUseVertexWeights fpChartAggregator_SetUseVertexWeights = nullptr;
		FP_ChartAggregator_GetUseVertexWeights fpChartAggregator_GetUseVertexWeights = nullptr;
		FP_ChartAggregator_SetLockUVRotation fpChartAggregator_SetLockUVRotation = nullptr;
		FP_ChartAggregator_GetLockUVRotation fpChartAggregator_GetLockUVRotation = nullptr;
		FP_ChartAggregator_SetExpandZeroAreaUVs fpChartAggregator_SetExpandZeroAreaUVs = nullptr;
		FP_ChartAggregator_GetExpandZeroAreaUVs fpChartAggregator_GetExpandZeroAreaUVs = nullptr;
		FP_CreateVertexColorCasterSettings fpCreateVertexColorCasterSettings = nullptr;
		FP_VertexColorCasterSettings_SetOutputColorLevel fpVertexColorCasterSettings_SetOutputColorLevel = nullptr;
		FP_VertexColorCasterSettings_GetOutputColorLevel fpVertexColorCasterSettings_GetOutputColorLevel = nullptr;
		FP_VertexColorCasterSettings_SetOutputColorName fpVertexColorCasterSettings_SetOutputColorName = nullptr;
		FP_VertexColorCasterSettings_GetOutputColorName fpVertexColorCasterSettings_GetOutputColorName = nullptr;
		FP_VertexColorCasterSettings_SetColorSpaceEdgeThreshold fpVertexColorCasterSettings_SetColorSpaceEdgeThreshold = nullptr;
		FP_VertexColorCasterSettings_GetColorSpaceEdgeThreshold fpVertexColorCasterSettings_GetColorSpaceEdgeThreshold = nullptr;
		FP_CreateVertexColorCaster fpCreateVertexColorCaster = nullptr;
		FP_VertexColorCaster_SetScene fpVertexColorCaster_SetScene = nullptr;
		FP_VertexColorCaster_GetVertexColorCasterSettings fpVertexColorCaster_GetVertexColorCasterSettings = nullptr;
		FP_CreateImageDataExporter fpCreateImageDataExporter = nullptr;
		FP_ImageDataExporter_SetExportFilePath fpImageDataExporter_SetExportFilePath = nullptr;
		FP_ImageDataExporter_GetExportFilePath fpImageDataExporter_GetExportFilePath = nullptr;
		FP_ImageDataExporter_SetImage fpImageDataExporter_SetImage = nullptr;
		FP_ImageDataExporter_RunExport fpImageDataExporter_RunExport = nullptr;
		FP_ImageDataExporter_SetImageFileFormat fpImageDataExporter_SetImageFileFormat = nullptr;
		FP_ImageDataExporter_GetImageFileFormat fpImageDataExporter_GetImageFileFormat = nullptr;
		FP_ImageDataExporter_SetDDSCompressionType fpImageDataExporter_SetDDSCompressionType = nullptr;
		FP_ImageDataExporter_GetDDSCompressionType fpImageDataExporter_GetDDSCompressionType = nullptr;
		FP_ImageDataExporter_Clear fpImageDataExporter_Clear = nullptr;
		FP_CreateAmbientOcclusionCaster fpCreateAmbientOcclusionCaster = nullptr;
		FP_AmbientOcclusionCaster_SetAdditionalSourceScene fpAmbientOcclusionCaster_SetAdditionalSourceScene = nullptr;
		FP_AmbientOcclusionCaster_GetAmbientOcclusionCasterSettings fpAmbientOcclusionCaster_GetAmbientOcclusionCasterSettings = nullptr;
		FP_CreateAmbientOcclusionCasterSettings fpCreateAmbientOcclusionCasterSettings = nullptr;
		FP_AmbientOcclusionCasterSettings_SetRaysPerPixel fpAmbientOcclusionCasterSettings_SetRaysPerPixel = nullptr;
		FP_AmbientOcclusionCasterSettings_GetRaysPerPixel fpAmbientOcclusionCasterSettings_GetRaysPerPixel = nullptr;
		FP_AmbientOcclusionCasterSettings_SetOcclusionFalloff fpAmbientOcclusionCasterSettings_SetOcclusionFalloff = nullptr;
		FP_AmbientOcclusionCasterSettings_GetOcclusionFalloff fpAmbientOcclusionCasterSettings_GetOcclusionFalloff = nullptr;
		FP_AmbientOcclusionCasterSettings_SetOcclusionMultiplier fpAmbientOcclusionCasterSettings_SetOcclusionMultiplier = nullptr;
		FP_AmbientOcclusionCasterSettings_GetOcclusionMultiplier fpAmbientOcclusionCasterSettings_GetOcclusionMultiplier = nullptr;
		FP_AmbientOcclusionCasterSettings_SetUseSimpleOcclusionMode fpAmbientOcclusionCasterSettings_SetUseSimpleOcclusionMode = nullptr;
		FP_AmbientOcclusionCasterSettings_GetUseSimpleOcclusionMode fpAmbientOcclusionCasterSettings_GetUseSimpleOcclusionMode = nullptr;
		FP_CreateImpostorProcessor fpCreateImpostorProcessor = nullptr;
		FP_ImpostorProcessor_SetScene fpImpostorProcessor_SetScene = nullptr;
		FP_ImpostorProcessor_GetScene fpImpostorProcessor_GetScene = nullptr;
		FP_ImpostorProcessor_GetImpostorSettings fpImpostorProcessor_GetImpostorSettings = nullptr;
		FP_ImpostorProcessor_GetMappingImageSettings fpImpostorProcessor_GetMappingImageSettings = nullptr;
		FP_ImpostorProcessor_GetMappingImage fpImpostorProcessor_GetMappingImage = nullptr;
		FP_ImpostorProcessor_GetImpostorGeometryFromSingleView fpImpostorProcessor_GetImpostorGeometryFromSingleView = nullptr;
		FP_ImpostorProcessor_GetSingleViewAspectRatio fpImpostorProcessor_GetSingleViewAspectRatio = nullptr;
		FP_ImpostorProcessor_GetBillboardCloudMaterialId fpImpostorProcessor_GetBillboardCloudMaterialId = nullptr;
		FP_CreateImpostorSettings fpCreateImpostorSettings = nullptr;
		FP_ImpostorSettings_SetImpostorType fpImpostorSettings_SetImpostorType = nullptr;
		FP_ImpostorSettings_GetImpostorType fpImpostorSettings_GetImpostorType = nullptr;
		FP_ImpostorSettings_SetProcessSelectionSetID fpImpostorSettings_SetProcessSelectionSetID = nullptr;
		FP_ImpostorSettings_GetProcessSelectionSetID fpImpostorSettings_GetProcessSelectionSetID = nullptr;
		FP_ImpostorSettings_SetProcessSelectionSetName fpImpostorSettings_SetProcessSelectionSetName = nullptr;
		FP_ImpostorSettings_GetProcessSelectionSetName fpImpostorSettings_GetProcessSelectionSetName = nullptr;
		FP_ImpostorSettings_GetBillboardCloudSettings fpImpostorSettings_GetBillboardCloudSettings = nullptr;
		FP_ImpostorSettings_GetFlipbookSettings fpImpostorSettings_GetFlipbookSettings = nullptr;
		FP_ImpostorSettings_GetImpostorFromSingleViewSettings fpImpostorSettings_GetImpostorFromSingleViewSettings = nullptr;
		FP_CreateSurfaceMapper fpCreateSurfaceMapper = nullptr;
		FP_SurfaceMapper_SetSourceScene fpSurfaceMapper_SetSourceScene = nullptr;
		FP_SurfaceMapper_GetSourceScene fpSurfaceMapper_GetSourceScene = nullptr;
		FP_SurfaceMapper_SetDestinationScene fpSurfaceMapper_SetDestinationScene = nullptr;
		FP_SurfaceMapper_GetDestinationScene fpSurfaceMapper_GetDestinationScene = nullptr;
		FP_SurfaceMapper_SetSourceGeometry fpSurfaceMapper_SetSourceGeometry = nullptr;
		FP_SurfaceMapper_GetSourceGeometry fpSurfaceMapper_GetSourceGeometry = nullptr;
		FP_SurfaceMapper_SetDestinationGeometry fpSurfaceMapper_SetDestinationGeometry = nullptr;
		FP_SurfaceMapper_GetDestinationGeometry fpSurfaceMapper_GetDestinationGeometry = nullptr;
		FP_SurfaceMapper_GetMappingImageSettings fpSurfaceMapper_GetMappingImageSettings = nullptr;
		FP_SurfaceMapper_GetMappingImage fpSurfaceMapper_GetMappingImage = nullptr;
		FP_SurfaceMapper_SetRecalculateSearchDirection fpSurfaceMapper_SetRecalculateSearchDirection = nullptr;
		FP_SurfaceMapper_GetRecalculateSearchDirection fpSurfaceMapper_GetRecalculateSearchDirection = nullptr;
		FP_SurfaceMapper_SetSearchDirectionHardEdgeAngle fpSurfaceMapper_SetSearchDirectionHardEdgeAngle = nullptr;
		FP_SurfaceMapper_GetSearchDirectionHardEdgeAngle fpSurfaceMapper_GetSearchDirectionHardEdgeAngle = nullptr;
		FP_SurfaceMapper_SetSearchDistance fpSurfaceMapper_SetSearchDistance = nullptr;
		FP_SurfaceMapper_GetSearchDistance fpSurfaceMapper_GetSearchDistance = nullptr;
		FP_SurfaceMapper_SetSearchOffset fpSurfaceMapper_SetSearchOffset = nullptr;
		FP_SurfaceMapper_GetSearchOffset fpSurfaceMapper_GetSearchOffset = nullptr;
		FP_SurfaceMapper_RunSurfaceMapping fpSurfaceMapper_RunSurfaceMapping = nullptr;
		FP_CreateOcclusionMeshProcessor fpCreateOcclusionMeshProcessor = nullptr;
		FP_OcclusionMeshProcessor_SetScene fpOcclusionMeshProcessor_SetScene = nullptr;
		FP_OcclusionMeshProcessor_GetScene fpOcclusionMeshProcessor_GetScene = nullptr;
		FP_OcclusionMeshProcessor_GetOcclusionMeshSettings fpOcclusionMeshProcessor_GetOcclusionMeshSettings = nullptr;
		FP_OcclusionMeshSettings_SetOnScreenSize fpOcclusionMeshSettings_SetOnScreenSize = nullptr;
		FP_OcclusionMeshSettings_GetOnScreenSize fpOcclusionMeshSettings_GetOnScreenSize = nullptr;
		FP_OcclusionMeshSettings_SetOnScreenErrorTolerance fpOcclusionMeshSettings_SetOnScreenErrorTolerance = nullptr;
		FP_OcclusionMeshSettings_GetOnScreenErrorTolerance fpOcclusionMeshSettings_GetOnScreenErrorTolerance = nullptr;
		FP_OcclusionMeshSettings_SetInvertOutputMesh fpOcclusionMeshSettings_SetInvertOutputMesh = nullptr;
		FP_OcclusionMeshSettings_GetInvertOutputMesh fpOcclusionMeshSettings_GetInvertOutputMesh = nullptr;
		FP_OcclusionMeshSettings_SetTransferSkinning fpOcclusionMeshSettings_SetTransferSkinning = nullptr;
		FP_OcclusionMeshSettings_GetTransferSkinning fpOcclusionMeshSettings_GetTransferSkinning = nullptr;
		FP_OcclusionMeshSettings_SetUseCameras fpOcclusionMeshSettings_SetUseCameras = nullptr;
		FP_OcclusionMeshSettings_GetUseCameras fpOcclusionMeshSettings_GetUseCameras = nullptr;
		FP_OcclusionMeshSettings_SetCameraSelectionSetId fpOcclusionMeshSettings_SetCameraSelectionSetId = nullptr;
		FP_OcclusionMeshSettings_GetCameraSelectionSetId fpOcclusionMeshSettings_GetCameraSelectionSetId = nullptr;
		FP_OcclusionMeshSettings_SetCameraSelectionSetName fpOcclusionMeshSettings_SetCameraSelectionSetName = nullptr;
		FP_OcclusionMeshSettings_GetCameraSelectionSetName fpOcclusionMeshSettings_GetCameraSelectionSetName = nullptr;
		FP_OcclusionMeshSettings_SetOcclusionMode fpOcclusionMeshSettings_SetOcclusionMode = nullptr;
		FP_OcclusionMeshSettings_GetOcclusionMode fpOcclusionMeshSettings_GetOcclusionMode = nullptr;
		FP_CreateImageComparer fpCreateImageComparer = nullptr;
		FP_ImageComparer_SetImages fpImageComparer_SetImages = nullptr;
		FP_ImageComparer_SetImageMasks fpImageComparer_SetImageMasks = nullptr;
		FP_ImageComparer_CompareImages fpImageComparer_CompareImages = nullptr;
		FP_ImageComparer_SetImagePathBeforeImg fpImageComparer_SetImagePathBeforeImg = nullptr;
		FP_ImageComparer_SetImagePathAfterImg fpImageComparer_SetImagePathAfterImg = nullptr;
		FP_ImageComparer_SetImageDiffExportPath fpImageComparer_SetImageDiffExportPath = nullptr;
		FP_ImageComparer_SetDiffHighlightsExportPath fpImageComparer_SetDiffHighlightsExportPath = nullptr;
		FP_ImageComparer_GetImageDiff fpImageComparer_GetImageDiff = nullptr;
		FP_ImageComparer_GetDiffHighlights fpImageComparer_GetDiffHighlights = nullptr;
		FP_ImageComparer_GetTotalMaskCoverage fpImageComparer_GetTotalMaskCoverage = nullptr;
		FP_ImageComparer_GetMaxPixelError fpImageComparer_GetMaxPixelError = nullptr;
		FP_ImageComparer_GetTotalPixelError fpImageComparer_GetTotalPixelError = nullptr;
		FP_ImageComparer_GetHighlightAreaCoverage fpImageComparer_GetHighlightAreaCoverage = nullptr;
		FP_ImageComparer_SetSilhouetteDifferenceError fpImageComparer_SetSilhouetteDifferenceError = nullptr;
		FP_CreateRecommendedTextureSizeCalculator fpCreateRecommendedTextureSizeCalculator = nullptr;
		FP_RecommendedTextureSizeCalculator_SetForcePower2Texture fpRecommendedTextureSizeCalculator_SetForcePower2Texture = nullptr;
		FP_RecommendedTextureSizeCalculator_GetForcePower2Texture fpRecommendedTextureSizeCalculator_GetForcePower2Texture = nullptr;
		FP_RecommendedTextureSizeCalculator_SetRecommendedTextureSizeMultiplier fpRecommendedTextureSizeCalculator_SetRecommendedTextureSizeMultiplier = nullptr;
		FP_RecommendedTextureSizeCalculator_GetRecommendedTextureSizeMultiplier fpRecommendedTextureSizeCalculator_GetRecommendedTextureSizeMultiplier = nullptr;
		FP_RecommendedTextureSizeCalculator_GetRecommendedWidth fpRecommendedTextureSizeCalculator_GetRecommendedWidth = nullptr;
		FP_RecommendedTextureSizeCalculator_GetRecommendedHeight fpRecommendedTextureSizeCalculator_GetRecommendedHeight = nullptr;
		FP_RecommendedTextureSizeCalculator_CalculateBasedOnDeviation fpRecommendedTextureSizeCalculator_CalculateBasedOnDeviation = nullptr;
		FP_RecommendedTextureSizeCalculator_CalculateBasedOnOnScreenSize fpRecommendedTextureSizeCalculator_CalculateBasedOnOnScreenSize = nullptr;
		FP_CreatePartRemover fpCreatePartRemover = nullptr;
		FP_PartRemover_RunPartRemoval fpPartRemover_RunPartRemoval = nullptr;
		FP_PartRemover_SetGeometry fpPartRemover_SetGeometry = nullptr;
		FP_PartRemover_GetGeometry fpPartRemover_GetGeometry = nullptr;
		FP_PartRemover_SetScene fpPartRemover_SetScene = nullptr;
		FP_PartRemover_GetScene fpPartRemover_GetScene = nullptr;
		FP_PartRemover_SetSizeThreshold fpPartRemover_SetSizeThreshold = nullptr;
		FP_PartRemover_GetSizeThreshold fpPartRemover_GetSizeThreshold = nullptr;
		FP_PartRemover_SetUsePerMaterialSizeThresholds fpPartRemover_SetUsePerMaterialSizeThresholds = nullptr;
		FP_PartRemover_GetUsePerMaterialSizeThresholds fpPartRemover_GetUsePerMaterialSizeThresholds = nullptr;
		FP_PartRemover_GetPerMaterialSizeThresholds fpPartRemover_GetPerMaterialSizeThresholds = nullptr;
		FP_CreateWelder fpCreateWelder = nullptr;
		FP_Welder_SetScene fpWelder_SetScene = nullptr;
		FP_Welder_GetScene fpWelder_GetScene = nullptr;
		FP_Welder_SetProcessSelectionSetID fpWelder_SetProcessSelectionSetID = nullptr;
		FP_Welder_GetProcessSelectionSetID fpWelder_GetProcessSelectionSetID = nullptr;
		FP_Welder_SetProcessSelectionSetName fpWelder_SetProcessSelectionSetName = nullptr;
		FP_Welder_GetProcessSelectionSetName fpWelder_GetProcessSelectionSetName = nullptr;
		FP_Welder_SetWeldDist fpWelder_SetWeldDist = nullptr;
		FP_Welder_GetWeldDist fpWelder_GetWeldDist = nullptr;
		FP_Welder_WeldGeometry fpWelder_WeldGeometry = nullptr;
		FP_Welder_SetUpdateExtents fpWelder_SetUpdateExtents = nullptr;
		FP_Welder_GetUpdateExtents fpWelder_GetUpdateExtents = nullptr;
		FP_Welder_SetProgressivePasses fpWelder_SetProgressivePasses = nullptr;
		FP_Welder_GetProgressivePasses fpWelder_GetProgressivePasses = nullptr;
		FP_Welder_SetIgnoreVertexLocks fpWelder_SetIgnoreVertexLocks = nullptr;
		FP_Welder_GetIgnoreVertexLocks fpWelder_GetIgnoreVertexLocks = nullptr;
		FP_Welder_SetCompactMesh fpWelder_SetCompactMesh = nullptr;
		FP_Welder_GetCompactMesh fpWelder_GetCompactMesh = nullptr;
		FP_Welder_SetOnlyBorders fpWelder_SetOnlyBorders = nullptr;
		FP_Welder_GetOnlyBorders fpWelder_GetOnlyBorders = nullptr;
		FP_Welder_SetOnlyWithinMaterial fpWelder_SetOnlyWithinMaterial = nullptr;
		FP_Welder_GetOnlyWithinMaterial fpWelder_GetOnlyWithinMaterial = nullptr;
		FP_Welder_SetOnlyWithinSceneNode fpWelder_SetOnlyWithinSceneNode = nullptr;
		FP_Welder_GetOnlyWithinSceneNode fpWelder_GetOnlyWithinSceneNode = nullptr;
		FP_Welder_SetOnlyBetweenSceneNodes fpWelder_SetOnlyBetweenSceneNodes = nullptr;
		FP_Welder_GetOnlyBetweenSceneNodes fpWelder_GetOnlyBetweenSceneNodes = nullptr;
		FP_CreateTJunctionEliminator fpCreateTJunctionEliminator = nullptr;
		FP_TJunctionEliminator_SetScene fpTJunctionEliminator_SetScene = nullptr;
		FP_TJunctionEliminator_GetScene fpTJunctionEliminator_GetScene = nullptr;
		FP_TJunctionEliminator_RemoveTJunctionsInGeometry fpTJunctionEliminator_RemoveTJunctionsInGeometry = nullptr;
		FP_TJunctionEliminator_RemoveTJunctions fpTJunctionEliminator_RemoveTJunctions = nullptr;
		FP_TJunctionEliminator_SetWeldDist fpTJunctionEliminator_SetWeldDist = nullptr;
		FP_TJunctionEliminator_GetWeldDist fpTJunctionEliminator_GetWeldDist = nullptr;
		FP_TJunctionEliminator_SetOnlyObjectBoundaryFlag fpTJunctionEliminator_SetOnlyObjectBoundaryFlag = nullptr;
		FP_TJunctionEliminator_GetOnlyObjectBoundaryFlag fpTJunctionEliminator_GetOnlyObjectBoundaryFlag = nullptr;
		FP_TJunctionEliminator_SetProcessSelectionSetID fpTJunctionEliminator_SetProcessSelectionSetID = nullptr;
		FP_TJunctionEliminator_GetProcessSelectionSetID fpTJunctionEliminator_GetProcessSelectionSetID = nullptr;
		FP_TJunctionEliminator_SetProcessSelectionSetName fpTJunctionEliminator_SetProcessSelectionSetName = nullptr;
		FP_TJunctionEliminator_GetProcessSelectionSetName fpTJunctionEliminator_GetProcessSelectionSetName = nullptr;
		FP_TJunctionEliminator_SetOnlyWithinMaterialFlag fpTJunctionEliminator_SetOnlyWithinMaterialFlag = nullptr;
		FP_TJunctionEliminator_GetOnlyWithinMaterialFlag fpTJunctionEliminator_GetOnlyWithinMaterialFlag = nullptr;
		FP_TJunctionEliminator_SetOnlyWithinSceneNode fpTJunctionEliminator_SetOnlyWithinSceneNode = nullptr;
		FP_TJunctionEliminator_GetOnlyWithinSceneNode fpTJunctionEliminator_GetOnlyWithinSceneNode = nullptr;
		FP_Pipeline_RunSceneFromFile fpPipeline_RunSceneFromFile = nullptr;
		FP_Pipeline_RunScene fpPipeline_RunScene = nullptr;
		FP_Pipeline_AddMaterialCaster fpPipeline_AddMaterialCaster = nullptr;
		FP_Pipeline_AddMaterialCasterByType fpPipeline_AddMaterialCasterByType = nullptr;
		FP_Pipeline_GetMaterialCasters fpPipeline_GetMaterialCasters = nullptr;
		FP_Pipeline_GetMaterialCasterCount fpPipeline_GetMaterialCasterCount = nullptr;
		FP_Pipeline_GetMaterialCasterByIndex fpPipeline_GetMaterialCasterByIndex = nullptr;
		FP_Pipeline_GetPipelineSettings fpPipeline_GetPipelineSettings = nullptr;
		FP_Pipeline_SetBoolParameter fpPipeline_SetBoolParameter = nullptr;
		FP_Pipeline_SetIntParameter fpPipeline_SetIntParameter = nullptr;
		FP_Pipeline_SetUIntParameter fpPipeline_SetUIntParameter = nullptr;
		FP_Pipeline_SetDoubleParameter fpPipeline_SetDoubleParameter = nullptr;
		FP_Pipeline_SetStringParameter fpPipeline_SetStringParameter = nullptr;
		FP_Pipeline_SetEnumParameter fpPipeline_SetEnumParameter = nullptr;
		FP_Pipeline_SetParameterFromString fpPipeline_SetParameterFromString = nullptr;
		FP_Pipeline_GetBoolParameter fpPipeline_GetBoolParameter = nullptr;
		FP_Pipeline_GetIntParameter fpPipeline_GetIntParameter = nullptr;
		FP_Pipeline_GetUIntParameter fpPipeline_GetUIntParameter = nullptr;
		FP_Pipeline_GetDoubleParameter fpPipeline_GetDoubleParameter = nullptr;
		FP_Pipeline_GetStringParameter fpPipeline_GetStringParameter = nullptr;
		FP_Pipeline_GetEnumParameter fpPipeline_GetEnumParameter = nullptr;
		FP_Pipeline_GetParameterType fpPipeline_GetParameterType = nullptr;
		FP_Pipeline_GetMappingImageSettings fpPipeline_GetMappingImageSettings = nullptr;
		FP_Pipeline_GetMappingImage fpPipeline_GetMappingImage = nullptr;
		FP_Pipeline_GetCascadedPipelineByIndex fpPipeline_GetCascadedPipelineByIndex = nullptr;
		FP_Pipeline_AddCascadedPipeline fpPipeline_AddCascadedPipeline = nullptr;
		FP_Pipeline_RemoveCascadedPipeline fpPipeline_RemoveCascadedPipeline = nullptr;
		FP_Pipeline_GetCascadedPipelineCount fpPipeline_GetCascadedPipelineCount = nullptr;
		FP_Pipeline_GetProcessedScene fpPipeline_GetProcessedScene = nullptr;
		FP_Pipeline_GetPercentDone fpPipeline_GetPercentDone = nullptr;
		FP_Pipeline_GetActiveSelectionSets fpPipeline_GetActiveSelectionSets = nullptr;
		FP_Pipeline_NewCopy fpPipeline_NewCopy = nullptr;
		FP_CreatePipelineBatch fpCreatePipelineBatch = nullptr;
		FP_PipelineBatch_SetStoragePath fpPipelineBatch_SetStoragePath = nullptr;
		FP_PipelineBatch_GetStoragePath fpPipelineBatch_GetStoragePath = nullptr;
		FP_PipelineBatch_Queue fpPipelineBatch_Queue = nullptr;
		FP_PipelineBatch_QueueFile fpPipelineBatch_QueueFile = nullptr;
		FP_PipelineBatch_Run fpPipelineBatch_Run = nullptr;
		FP_PipelineBatch_LoadProcessedScene fpPipelineBatch_LoadProcessedScene = nullptr;
		FP_PipelineBatch_GetBatchCount fpPipelineBatch_GetBatchCount = nullptr;
		FP_PipelineBatch_GetPipelinePath fpPipelineBatch_GetPipelinePath = nullptr;
		FP_PipelineBatch_GetScenePath fpPipelineBatch_GetScenePath = nullptr;
		FP_PipelineBatch_GetOutputPath fpPipelineBatch_GetOutputPath = nullptr;
		FP_PipelineBatch_Clear fpPipelineBatch_Clear = nullptr;
		FP_PipelineBatch_SetCascadedRunMode fpPipelineBatch_SetCascadedRunMode = nullptr;
		FP_PipelineBatch_GetCascadedRunMode fpPipelineBatch_GetCascadedRunMode = nullptr;
		FP_PipelineBatch_SetSimplygonBatchPath fpPipelineBatch_SetSimplygonBatchPath = nullptr;
		FP_PipelineBatch_GetSimplygonBatchPath fpPipelineBatch_GetSimplygonBatchPath = nullptr;
		FP_CreatePipelineSerializer fpCreatePipelineSerializer = nullptr;
		FP_PipelineSerializer_LoadPipelineFromFile fpPipelineSerializer_LoadPipelineFromFile = nullptr;
		FP_PipelineSerializer_SavePipelineToFile fpPipelineSerializer_SavePipelineToFile = nullptr;
		FP_PipelineSerializer_LoadPipelineBatchFromFile fpPipelineSerializer_LoadPipelineBatchFromFile = nullptr;
		FP_PipelineSerializer_SavePipelineBatchToFile fpPipelineSerializer_SavePipelineBatchToFile = nullptr;
		FP_CreateReductionPipeline fpCreateReductionPipeline = nullptr;
		FP_ReductionPipeline_GetReductionSettings fpReductionPipeline_GetReductionSettings = nullptr;
		FP_ReductionPipeline_GetRepairSettings fpReductionPipeline_GetRepairSettings = nullptr;
		FP_ReductionPipeline_GetNormalCalculationSettings fpReductionPipeline_GetNormalCalculationSettings = nullptr;
		FP_ReductionPipeline_GetVisibilitySettings fpReductionPipeline_GetVisibilitySettings = nullptr;
		FP_ReductionPipeline_GetBoneSettings fpReductionPipeline_GetBoneSettings = nullptr;
		FP_ReductionPipeline_GetVertexWeightSettings fpReductionPipeline_GetVertexWeightSettings = nullptr;
		FP_ReductionPipeline_GetResultDeviation fpReductionPipeline_GetResultDeviation = nullptr;
		FP_CreateRemeshingLegacyPipeline fpCreateRemeshingLegacyPipeline = nullptr;
		FP_RemeshingLegacyPipeline_GetRemeshingLegacySettings fpRemeshingLegacyPipeline_GetRemeshingLegacySettings = nullptr;
		FP_RemeshingLegacyPipeline_GetVisibilitySettings fpRemeshingLegacyPipeline_GetVisibilitySettings = nullptr;
		FP_RemeshingLegacyPipeline_GetBoneSettings fpRemeshingLegacyPipeline_GetBoneSettings = nullptr;
		FP_CreateAggregationPipeline fpCreateAggregationPipeline = nullptr;
		FP_AggregationPipeline_GetAggregationSettings fpAggregationPipeline_GetAggregationSettings = nullptr;
		FP_AggregationPipeline_GetVisibilitySettings fpAggregationPipeline_GetVisibilitySettings = nullptr;
		FP_AggregationPipeline_GetGeometryCullingSettings fpAggregationPipeline_GetGeometryCullingSettings = nullptr;
		FP_AggregationPipeline_GetVertexWeightSettings fpAggregationPipeline_GetVertexWeightSettings = nullptr;
		FP_AggregationPipeline_GetGenerateLightmapTexCoordSettings fpAggregationPipeline_GetGenerateLightmapTexCoordSettings = nullptr;
		FP_CreatePipelineSettings fpCreatePipelineSettings = nullptr;
		FP_PipelineSettings_SetTextureOutputPath fpPipelineSettings_SetTextureOutputPath = nullptr;
		FP_PipelineSettings_GetTextureOutputPath fpPipelineSettings_GetTextureOutputPath = nullptr;
		FP_PipelineSettings_SetSimplygonBatchPath fpPipelineSettings_SetSimplygonBatchPath = nullptr;
		FP_PipelineSettings_GetSimplygonBatchPath fpPipelineSettings_GetSimplygonBatchPath = nullptr;
		FP_PipelineSettings_SetOutputMaterialName fpPipelineSettings_SetOutputMaterialName = nullptr;
		FP_PipelineSettings_GetOutputMaterialName fpPipelineSettings_GetOutputMaterialName = nullptr;
		FP_PipelineSettings_SetOutputUniqueMaterialNames fpPipelineSettings_SetOutputUniqueMaterialNames = nullptr;
		FP_PipelineSettings_GetOutputUniqueMaterialNames fpPipelineSettings_GetOutputUniqueMaterialNames = nullptr;
		FP_PipelineSettings_SetEmbedReferences fpPipelineSettings_SetEmbedReferences = nullptr;
		FP_PipelineSettings_GetEmbedReferences fpPipelineSettings_GetEmbedReferences = nullptr;
		FP_PipelineSettings_SetIntermediateStep fpPipelineSettings_SetIntermediateStep = nullptr;
		FP_PipelineSettings_GetIntermediateStep fpPipelineSettings_GetIntermediateStep = nullptr;
		FP_PipelineSettings_SetCascadedRunMode fpPipelineSettings_SetCascadedRunMode = nullptr;
		FP_PipelineSettings_GetCascadedRunMode fpPipelineSettings_GetCascadedRunMode = nullptr;
		FP_CreateRemeshingPipeline fpCreateRemeshingPipeline = nullptr;
		FP_RemeshingPipeline_GetRemeshingSettings fpRemeshingPipeline_GetRemeshingSettings = nullptr;
		FP_RemeshingPipeline_GetBoneSettings fpRemeshingPipeline_GetBoneSettings = nullptr;
		FP_RemeshingPipeline_GetGeometryCullingSettings fpRemeshingPipeline_GetGeometryCullingSettings = nullptr;
		FP_RemeshingPipeline_GetVisibilitySettings fpRemeshingPipeline_GetVisibilitySettings = nullptr;
		FP_CreatePassthroughPipeline fpCreatePassthroughPipeline = nullptr;
		FP_CreateGeometryDataCaster fpCreateGeometryDataCaster = nullptr;
		FP_GeometryDataCaster_GetGeometryDataCasterSettings fpGeometryDataCaster_GetGeometryDataCasterSettings = nullptr;
		FP_CreateGeometryDataCasterSettings fpCreateGeometryDataCasterSettings = nullptr;
		FP_GeometryDataCasterSettings_SetGeometryDataFieldType fpGeometryDataCasterSettings_SetGeometryDataFieldType = nullptr;
		FP_GeometryDataCasterSettings_GetGeometryDataFieldType fpGeometryDataCasterSettings_GetGeometryDataFieldType = nullptr;
		FP_GeometryDataCasterSettings_SetGeometryDataFieldIndex fpGeometryDataCasterSettings_SetGeometryDataFieldIndex = nullptr;
		FP_GeometryDataCasterSettings_GetGeometryDataFieldIndex fpGeometryDataCasterSettings_GetGeometryDataFieldIndex = nullptr;
		FP_GeometryDataCasterSettings_SetMappingInfR fpGeometryDataCasterSettings_SetMappingInfR = nullptr;
		FP_GeometryDataCasterSettings_GetMappingInfR fpGeometryDataCasterSettings_GetMappingInfR = nullptr;
		FP_GeometryDataCasterSettings_SetMappingSupR fpGeometryDataCasterSettings_SetMappingSupR = nullptr;
		FP_GeometryDataCasterSettings_GetMappingSupR fpGeometryDataCasterSettings_GetMappingSupR = nullptr;
		FP_GeometryDataCasterSettings_SetMappingInfG fpGeometryDataCasterSettings_SetMappingInfG = nullptr;
		FP_GeometryDataCasterSettings_GetMappingInfG fpGeometryDataCasterSettings_GetMappingInfG = nullptr;
		FP_GeometryDataCasterSettings_SetMappingSupG fpGeometryDataCasterSettings_SetMappingSupG = nullptr;
		FP_GeometryDataCasterSettings_GetMappingSupG fpGeometryDataCasterSettings_GetMappingSupG = nullptr;
		FP_GeometryDataCasterSettings_SetMappingInfB fpGeometryDataCasterSettings_SetMappingInfB = nullptr;
		FP_GeometryDataCasterSettings_GetMappingInfB fpGeometryDataCasterSettings_GetMappingInfB = nullptr;
		FP_GeometryDataCasterSettings_SetMappingSupB fpGeometryDataCasterSettings_SetMappingSupB = nullptr;
		FP_GeometryDataCasterSettings_GetMappingSupB fpGeometryDataCasterSettings_GetMappingSupB = nullptr;
		FP_GeometryDataCasterSettings_SetMappingInfA fpGeometryDataCasterSettings_SetMappingInfA = nullptr;
		FP_GeometryDataCasterSettings_GetMappingInfA fpGeometryDataCasterSettings_GetMappingInfA = nullptr;
		FP_GeometryDataCasterSettings_SetMappingSupA fpGeometryDataCasterSettings_SetMappingSupA = nullptr;
		FP_GeometryDataCasterSettings_GetMappingSupA fpGeometryDataCasterSettings_GetMappingSupA = nullptr;
		FP_GeometryDataCasterSettings_SetMappingInf fpGeometryDataCasterSettings_SetMappingInf = nullptr;
		FP_GeometryDataCasterSettings_GetMappingInf fpGeometryDataCasterSettings_GetMappingInf = nullptr;
		FP_GeometryDataCasterSettings_SetMappingSup fpGeometryDataCasterSettings_SetMappingSup = nullptr;
		FP_GeometryDataCasterSettings_GetMappingSup fpGeometryDataCasterSettings_GetMappingSup = nullptr;
		FP_VertexWeightSettings_SetUseVertexWeightsInReducer fpVertexWeightSettings_SetUseVertexWeightsInReducer = nullptr;
		FP_VertexWeightSettings_GetUseVertexWeightsInReducer fpVertexWeightSettings_GetUseVertexWeightsInReducer = nullptr;
		FP_VertexWeightSettings_SetUseVertexWeightsInTexcoordGenerator fpVertexWeightSettings_SetUseVertexWeightsInTexcoordGenerator = nullptr;
		FP_VertexWeightSettings_GetUseVertexWeightsInTexcoordGenerator fpVertexWeightSettings_GetUseVertexWeightsInTexcoordGenerator = nullptr;
		FP_VertexWeightSettings_SetWeightsFromColorName fpVertexWeightSettings_SetWeightsFromColorName = nullptr;
		FP_VertexWeightSettings_GetWeightsFromColorName fpVertexWeightSettings_GetWeightsFromColorName = nullptr;
		FP_VertexWeightSettings_SetWeightsFromColorLevel fpVertexWeightSettings_SetWeightsFromColorLevel = nullptr;
		FP_VertexWeightSettings_GetWeightsFromColorLevel fpVertexWeightSettings_GetWeightsFromColorLevel = nullptr;
		FP_VertexWeightSettings_SetWeightsFromColorComponent fpVertexWeightSettings_SetWeightsFromColorComponent = nullptr;
		FP_VertexWeightSettings_GetWeightsFromColorComponent fpVertexWeightSettings_GetWeightsFromColorComponent = nullptr;
		FP_VertexWeightSettings_SetWeightsFromColorMultiplier fpVertexWeightSettings_SetWeightsFromColorMultiplier = nullptr;
		FP_VertexWeightSettings_GetWeightsFromColorMultiplier fpVertexWeightSettings_GetWeightsFromColorMultiplier = nullptr;
		FP_VertexWeightSettings_SetWeightsFromColorMode fpVertexWeightSettings_SetWeightsFromColorMode = nullptr;
		FP_VertexWeightSettings_GetWeightsFromColorMode fpVertexWeightSettings_GetWeightsFromColorMode = nullptr;
		FP_CreateGenerateLightmapTexCoordSettings fpCreateGenerateLightmapTexCoordSettings = nullptr;
		FP_GenerateLightmapTexCoordSettings_SetGenerateLightmapTexCoord fpGenerateLightmapTexCoordSettings_SetGenerateLightmapTexCoord = nullptr;
		FP_GenerateLightmapTexCoordSettings_GetGenerateLightmapTexCoord fpGenerateLightmapTexCoordSettings_GetGenerateLightmapTexCoord = nullptr;
		FP_GenerateLightmapTexCoordSettings_SetLightmapTexCoordLevel fpGenerateLightmapTexCoordSettings_SetLightmapTexCoordLevel = nullptr;
		FP_GenerateLightmapTexCoordSettings_GetLightmapTexCoordLevel fpGenerateLightmapTexCoordSettings_GetLightmapTexCoordLevel = nullptr;
		FP_GenerateLightmapTexCoordSettings_SetLightmapTexCoordName fpGenerateLightmapTexCoordSettings_SetLightmapTexCoordName = nullptr;
		FP_GenerateLightmapTexCoordSettings_GetLightmapTexCoordName fpGenerateLightmapTexCoordSettings_GetLightmapTexCoordName = nullptr;
		FP_GenerateLightmapTexCoordSettings_SetChartAggregatorMode fpGenerateLightmapTexCoordSettings_SetChartAggregatorMode = nullptr;
		FP_GenerateLightmapTexCoordSettings_GetChartAggregatorMode fpGenerateLightmapTexCoordSettings_GetChartAggregatorMode = nullptr;
		FP_GenerateLightmapTexCoordSettings_SetTextureWidth fpGenerateLightmapTexCoordSettings_SetTextureWidth = nullptr;
		FP_GenerateLightmapTexCoordSettings_GetTextureWidth fpGenerateLightmapTexCoordSettings_GetTextureWidth = nullptr;
		FP_GenerateLightmapTexCoordSettings_SetTextureHeight fpGenerateLightmapTexCoordSettings_SetTextureHeight = nullptr;
		FP_GenerateLightmapTexCoordSettings_GetTextureHeight fpGenerateLightmapTexCoordSettings_GetTextureHeight = nullptr;
		FP_GenerateLightmapTexCoordSettings_SetGutterSpace fpGenerateLightmapTexCoordSettings_SetGutterSpace = nullptr;
		FP_GenerateLightmapTexCoordSettings_GetGutterSpace fpGenerateLightmapTexCoordSettings_GetGutterSpace = nullptr;
		FP_ChartAggregatorSettings_SetChartAggregatorMode fpChartAggregatorSettings_SetChartAggregatorMode = nullptr;
		FP_ChartAggregatorSettings_GetChartAggregatorMode fpChartAggregatorSettings_GetChartAggregatorMode = nullptr;
		FP_ChartAggregatorSettings_SetSurfaceAreaScale fpChartAggregatorSettings_SetSurfaceAreaScale = nullptr;
		FP_ChartAggregatorSettings_GetSurfaceAreaScale fpChartAggregatorSettings_GetSurfaceAreaScale = nullptr;
		FP_ChartAggregatorSettings_SetOriginalTexCoordLevel fpChartAggregatorSettings_SetOriginalTexCoordLevel = nullptr;
		FP_ChartAggregatorSettings_GetOriginalTexCoordLevel fpChartAggregatorSettings_GetOriginalTexCoordLevel = nullptr;
		FP_ChartAggregatorSettings_SetOriginalTexCoordName fpChartAggregatorSettings_SetOriginalTexCoordName = nullptr;
		FP_ChartAggregatorSettings_GetOriginalTexCoordName fpChartAggregatorSettings_GetOriginalTexCoordName = nullptr;
		FP_ChartAggregatorSettings_SetSeparateOverlappingCharts fpChartAggregatorSettings_SetSeparateOverlappingCharts = nullptr;
		FP_ChartAggregatorSettings_GetSeparateOverlappingCharts fpChartAggregatorSettings_GetSeparateOverlappingCharts = nullptr;
		FP_ChartAggregatorSettings_SetOriginalChartProportionsChannel fpChartAggregatorSettings_SetOriginalChartProportionsChannel = nullptr;
		FP_ChartAggregatorSettings_GetOriginalChartProportionsChannel fpChartAggregatorSettings_GetOriginalChartProportionsChannel = nullptr;
		FP_ChartAggregatorSettings_SetLockUVRotation fpChartAggregatorSettings_SetLockUVRotation = nullptr;
		FP_ChartAggregatorSettings_GetLockUVRotation fpChartAggregatorSettings_GetLockUVRotation = nullptr;
		FP_ParameterizerSettings_SetMaxStretch fpParameterizerSettings_SetMaxStretch = nullptr;
		FP_ParameterizerSettings_GetMaxStretch fpParameterizerSettings_GetMaxStretch = nullptr;
		FP_ParameterizerSettings_SetLargeChartsImportance fpParameterizerSettings_SetLargeChartsImportance = nullptr;
		FP_ParameterizerSettings_GetLargeChartsImportance fpParameterizerSettings_GetLargeChartsImportance = nullptr;
		FP_CreateBillboardCloudSettings fpCreateBillboardCloudSettings = nullptr;
		FP_BillboardCloudSettings_SetBillboardMode fpBillboardCloudSettings_SetBillboardMode = nullptr;
		FP_BillboardCloudSettings_GetBillboardMode fpBillboardCloudSettings_GetBillboardMode = nullptr;
		FP_BillboardCloudSettings_SetFavorVerticalPlanes fpBillboardCloudSettings_SetFavorVerticalPlanes = nullptr;
		FP_BillboardCloudSettings_GetFavorVerticalPlanes fpBillboardCloudSettings_GetFavorVerticalPlanes = nullptr;
		FP_BillboardCloudSettings_SetTwoSided fpBillboardCloudSettings_SetTwoSided = nullptr;
		FP_BillboardCloudSettings_GetTwoSided fpBillboardCloudSettings_GetTwoSided = nullptr;
		FP_BillboardCloudSettings_SetUseVisibilityWeights fpBillboardCloudSettings_SetUseVisibilityWeights = nullptr;
		FP_BillboardCloudSettings_GetUseVisibilityWeights fpBillboardCloudSettings_GetUseVisibilityWeights = nullptr;
		FP_BillboardCloudSettings_SetBillboardDensity fpBillboardCloudSettings_SetBillboardDensity = nullptr;
		FP_BillboardCloudSettings_GetBillboardDensity fpBillboardCloudSettings_GetBillboardDensity = nullptr;
		FP_BillboardCloudSettings_SetMaxPlaneCount fpBillboardCloudSettings_SetMaxPlaneCount = nullptr;
		FP_BillboardCloudSettings_GetMaxPlaneCount fpBillboardCloudSettings_GetMaxPlaneCount = nullptr;
		FP_BillboardCloudSettings_SetGeometricComplexity fpBillboardCloudSettings_SetGeometricComplexity = nullptr;
		FP_BillboardCloudSettings_GetGeometricComplexity fpBillboardCloudSettings_GetGeometricComplexity = nullptr;
		FP_BillboardCloudSettings_SetUpVector fpBillboardCloudSettings_SetUpVector = nullptr;
		FP_BillboardCloudSettings_GetUpVector fpBillboardCloudSettings_GetUpVector = nullptr;
		FP_BillboardCloudSettings_SetUpVectorX fpBillboardCloudSettings_SetUpVectorX = nullptr;
		FP_BillboardCloudSettings_GetUpVectorX fpBillboardCloudSettings_GetUpVectorX = nullptr;
		FP_BillboardCloudSettings_SetUpVectorY fpBillboardCloudSettings_SetUpVectorY = nullptr;
		FP_BillboardCloudSettings_GetUpVectorY fpBillboardCloudSettings_GetUpVectorY = nullptr;
		FP_BillboardCloudSettings_SetUpVectorZ fpBillboardCloudSettings_SetUpVectorZ = nullptr;
		FP_BillboardCloudSettings_GetUpVectorZ fpBillboardCloudSettings_GetUpVectorZ = nullptr;
		FP_BillboardCloudSettings_GetFoliageSettings fpBillboardCloudSettings_GetFoliageSettings = nullptr;
		FP_CreateFlipbookSettings fpCreateFlipbookSettings = nullptr;
		FP_FlipbookSettings_SetNumberOfViews fpFlipbookSettings_SetNumberOfViews = nullptr;
		FP_FlipbookSettings_GetNumberOfViews fpFlipbookSettings_GetNumberOfViews = nullptr;
		FP_FlipbookSettings_SetViewDirection fpFlipbookSettings_SetViewDirection = nullptr;
		FP_FlipbookSettings_GetViewDirection fpFlipbookSettings_GetViewDirection = nullptr;
		FP_FlipbookSettings_SetViewDirectionX fpFlipbookSettings_SetViewDirectionX = nullptr;
		FP_FlipbookSettings_GetViewDirectionX fpFlipbookSettings_GetViewDirectionX = nullptr;
		FP_FlipbookSettings_SetViewDirectionY fpFlipbookSettings_SetViewDirectionY = nullptr;
		FP_FlipbookSettings_GetViewDirectionY fpFlipbookSettings_GetViewDirectionY = nullptr;
		FP_FlipbookSettings_SetViewDirectionZ fpFlipbookSettings_SetViewDirectionZ = nullptr;
		FP_FlipbookSettings_GetViewDirectionZ fpFlipbookSettings_GetViewDirectionZ = nullptr;
		FP_FlipbookSettings_SetUpVector fpFlipbookSettings_SetUpVector = nullptr;
		FP_FlipbookSettings_GetUpVector fpFlipbookSettings_GetUpVector = nullptr;
		FP_FlipbookSettings_SetUpVectorX fpFlipbookSettings_SetUpVectorX = nullptr;
		FP_FlipbookSettings_GetUpVectorX fpFlipbookSettings_GetUpVectorX = nullptr;
		FP_FlipbookSettings_SetUpVectorY fpFlipbookSettings_SetUpVectorY = nullptr;
		FP_FlipbookSettings_GetUpVectorY fpFlipbookSettings_GetUpVectorY = nullptr;
		FP_FlipbookSettings_SetUpVectorZ fpFlipbookSettings_SetUpVectorZ = nullptr;
		FP_FlipbookSettings_GetUpVectorZ fpFlipbookSettings_GetUpVectorZ = nullptr;
		FP_FlipbookSettings_SetVerticalAngle fpFlipbookSettings_SetVerticalAngle = nullptr;
		FP_FlipbookSettings_GetVerticalAngle fpFlipbookSettings_GetVerticalAngle = nullptr;
		FP_CreateImpostorFromSingleViewSettings fpCreateImpostorFromSingleViewSettings = nullptr;
		FP_ImpostorFromSingleViewSettings_SetUseTightFitting fpImpostorFromSingleViewSettings_SetUseTightFitting = nullptr;
		FP_ImpostorFromSingleViewSettings_GetUseTightFitting fpImpostorFromSingleViewSettings_GetUseTightFitting = nullptr;
		FP_ImpostorFromSingleViewSettings_SetTightFittingDepthOffset fpImpostorFromSingleViewSettings_SetTightFittingDepthOffset = nullptr;
		FP_ImpostorFromSingleViewSettings_GetTightFittingDepthOffset fpImpostorFromSingleViewSettings_GetTightFittingDepthOffset = nullptr;
		FP_ImpostorFromSingleViewSettings_SetTwoSided fpImpostorFromSingleViewSettings_SetTwoSided = nullptr;
		FP_ImpostorFromSingleViewSettings_GetTwoSided fpImpostorFromSingleViewSettings_GetTwoSided = nullptr;
		FP_ImpostorFromSingleViewSettings_SetViewDirection fpImpostorFromSingleViewSettings_SetViewDirection = nullptr;
		FP_ImpostorFromSingleViewSettings_GetViewDirection fpImpostorFromSingleViewSettings_GetViewDirection = nullptr;
		FP_ImpostorFromSingleViewSettings_SetViewDirectionX fpImpostorFromSingleViewSettings_SetViewDirectionX = nullptr;
		FP_ImpostorFromSingleViewSettings_GetViewDirectionX fpImpostorFromSingleViewSettings_GetViewDirectionX = nullptr;
		FP_ImpostorFromSingleViewSettings_SetViewDirectionY fpImpostorFromSingleViewSettings_SetViewDirectionY = nullptr;
		FP_ImpostorFromSingleViewSettings_GetViewDirectionY fpImpostorFromSingleViewSettings_GetViewDirectionY = nullptr;
		FP_ImpostorFromSingleViewSettings_SetViewDirectionZ fpImpostorFromSingleViewSettings_SetViewDirectionZ = nullptr;
		FP_ImpostorFromSingleViewSettings_GetViewDirectionZ fpImpostorFromSingleViewSettings_GetViewDirectionZ = nullptr;
		FP_ImpostorFromSingleViewSettings_SetTexCoordPadding fpImpostorFromSingleViewSettings_SetTexCoordPadding = nullptr;
		FP_ImpostorFromSingleViewSettings_GetTexCoordPadding fpImpostorFromSingleViewSettings_GetTexCoordPadding = nullptr;
		FP_CreateImpostorFromSingleViewPipeline fpCreateImpostorFromSingleViewPipeline = nullptr;
		FP_ImpostorFromSingleViewPipeline_GetImpostorFromSingleViewSettings fpImpostorFromSingleViewPipeline_GetImpostorFromSingleViewSettings = nullptr;
		FP_CreateBillboardCloudPipeline fpCreateBillboardCloudPipeline = nullptr;
		FP_BillboardCloudPipeline_GetBillboardCloudSettings fpBillboardCloudPipeline_GetBillboardCloudSettings = nullptr;
		FP_CreateBillboardCloudVegetationPipeline fpCreateBillboardCloudVegetationPipeline = nullptr;
		FP_BillboardCloudVegetationPipeline_GetBillboardCloudSettings fpBillboardCloudVegetationPipeline_GetBillboardCloudSettings = nullptr;
		FP_CreateFlipbookPipeline fpCreateFlipbookPipeline = nullptr;
		FP_FlipbookPipeline_GetFlipbookSettings fpFlipbookPipeline_GetFlipbookSettings = nullptr;
		FP_FoliageSettings_SetSeparateTrunkAndFoliage fpFoliageSettings_SetSeparateTrunkAndFoliage = nullptr;
		FP_FoliageSettings_GetSeparateTrunkAndFoliage fpFoliageSettings_GetSeparateTrunkAndFoliage = nullptr;
		FP_FoliageSettings_SetSeparateFoliageTriangleRatio fpFoliageSettings_SetSeparateFoliageTriangleRatio = nullptr;
		FP_FoliageSettings_GetSeparateFoliageTriangleRatio fpFoliageSettings_GetSeparateFoliageTriangleRatio = nullptr;
		FP_FoliageSettings_SetSeparateFoliageTriangleThreshold fpFoliageSettings_SetSeparateFoliageTriangleThreshold = nullptr;
		FP_FoliageSettings_GetSeparateFoliageTriangleThreshold fpFoliageSettings_GetSeparateFoliageTriangleThreshold = nullptr;
		FP_FoliageSettings_SetSeparateFoliageAreaThreshold fpFoliageSettings_SetSeparateFoliageAreaThreshold = nullptr;
		FP_FoliageSettings_GetSeparateFoliageAreaThreshold fpFoliageSettings_GetSeparateFoliageAreaThreshold = nullptr;
		FP_FoliageSettings_SetSeparateFoliageSizeThreshold fpFoliageSettings_SetSeparateFoliageSizeThreshold = nullptr;
		FP_FoliageSettings_GetSeparateFoliageSizeThreshold fpFoliageSettings_GetSeparateFoliageSizeThreshold = nullptr;
		FP_FoliageSettings_SetTrunkReductionRatio fpFoliageSettings_SetTrunkReductionRatio = nullptr;
		FP_FoliageSettings_GetTrunkReductionRatio fpFoliageSettings_GetTrunkReductionRatio = nullptr;
		FP_CreateStringArray fpCreateStringArray = nullptr;
		FP_StringArray_AddItem fpStringArray_AddItem = nullptr;
		FP_StringArray_SetItem fpStringArray_SetItem = nullptr;
		FP_StringArray_GetItem fpStringArray_GetItem = nullptr;
		FP_CreateOcclusionMeshPipeline fpCreateOcclusionMeshPipeline = nullptr;
		FP_OcclusionMeshPipeline_GetOcclusionMeshSettings fpOcclusionMeshPipeline_GetOcclusionMeshSettings = nullptr;
		FP_Simplygon_SetErrorHandler fpSimplygon_SetErrorHandler = nullptr;
		FP_Simplygon_GetVersion fpSimplygon_GetVersion = nullptr;
		FP_Simplygon_SendTelemetry fpSimplygon_SendTelemetry = nullptr;
		FP_Simplygon_WarningOccurred fpSimplygon_WarningOccurred = nullptr;
		FP_Simplygon_ErrorOccurred fpSimplygon_ErrorOccurred = nullptr;
		FP_Simplygon_GetWarningMessages fpSimplygon_GetWarningMessages = nullptr;
		FP_Simplygon_GetErrorMessages fpSimplygon_GetErrorMessages = nullptr;
		FP_Simplygon_ClearWarningMessages fpSimplygon_ClearWarningMessages = nullptr;
		FP_Simplygon_ClearErrorMessages fpSimplygon_ClearErrorMessages = nullptr;
		FP_Simplygon_SetGlobalBoolSetting fpSimplygon_SetGlobalBoolSetting = nullptr;
		FP_Simplygon_SetGlobalIntSetting fpSimplygon_SetGlobalIntSetting = nullptr;
		FP_Simplygon_SetGlobalFloatSetting fpSimplygon_SetGlobalFloatSetting = nullptr;
		FP_Simplygon_SetGlobalStringSetting fpSimplygon_SetGlobalStringSetting = nullptr;
		FP_Simplygon_GetGlobalBoolSetting fpSimplygon_GetGlobalBoolSetting = nullptr;
		FP_Simplygon_GetGlobalIntSetting fpSimplygon_GetGlobalIntSetting = nullptr;
		FP_Simplygon_GetGlobalFloatSetting fpSimplygon_GetGlobalFloatSetting = nullptr;
		FP_Simplygon_GetGlobalStringSetting fpSimplygon_GetGlobalStringSetting = nullptr;
		FP_Simplygon_SetThreadLocalStringSetting fpSimplygon_SetThreadLocalStringSetting = nullptr;
		FP_Simplygon_GetThreadLocalStringSetting fpSimplygon_GetThreadLocalStringSetting = nullptr;
		FP_Simplygon_EnableLogToFile fpSimplygon_EnableLogToFile = nullptr;

		template<class T> bool LoadFunctionPointer( void *hLib , const char *fName , T& FuncPtr )
		{
			FuncPtr = (T)((void*)(GetProcAddress( (HINSTANCE)hLib, fName )));
			return (FuncPtr != nullptr);
		}

		bool LoadAPIPtrs( void *hLib );
	};

	/**
	 * The rdata class is used to retrieve array data from the interface. 
	 */
	class rdata
	{
		public:
#ifndef SWIG
		/**
		 * Constructs a rdata from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the rdata object point at nothing.
		 */
		rdata( const APIInterfacePtrs *intf , hRMem p ) : sgapi( intf ) , ptr( p )  { this->addref_ptr(); }
#endif//SWIG
		rdata() : rdata( nullptr , nullptr ) {}

		/**
		 * Points an rdata at content of another rdata. Adds reference count 
		 * @param p is a rdata that points at an API object.
		 */
		rdata( const rdata& p ) : rdata( p.sgapi , p.ptr ) {}

		/**
		 * Destructs the rdata, and releases one reference to the data object, if the rdata currently points at an object.
		 */
		~rdata() { this->release_ptr(); }

		/**
		 * Tells whether the rdata points at an object, or nothing.
		 * @return true if the pointer points at nothing, or the object has no data
		 */
		bool IsNullOrEmpty() const
		{
			if( this->ptr == nullptr )
			{
				return true;
			}
			if( this->sgapi->fpReturnData_GetByteSize( this->ptr ) == 0 )
			{
				return true;
			}
			return false;
		}

		/**
		 * Tells whether the rdata points at an object, or nothing.
		 * @return true if the pointer points at someting, which also contains data
		 */
		bool NonEmpty() const { return !this->IsNullOrEmpty(); }

		protected:
		void addref_ptr()
		{
			if( this->ptr != nullptr )
			{
				sgapi->fpReturnData_AddRef( this->ptr );
			}
		}
		void release_ptr()
		{
			if( this->ptr != nullptr )
			{
				sgapi->fpReturnData_Release( this->ptr );
				this->ptr = nullptr;
			}
		}

		void replace_ptr( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hRMem p )
		{
			if( this->ptr != p )
			{
				this->release_ptr();
				this->ptr = p;
				this->sgapi = _sg;
				this->addref_ptr();
			}
		}

		const APIInterfacePtrs* sgapi;
		hRMem ptr;
	};

	/** spString is the return data accessor for strings */
	class spString
	{
		public:
		/**
		 * Constructs a string from an IReturnData interface pointer.
		 * @param p is a pointer to an IReturnData object, or null to make the string object point at nothing.
		 */
#ifndef SWIG
		spString( const APIInterfacePtrs* intf, hRMem p ) : sgapi( intf ) , ptr( p ) { addref_ptr(); }
		spString( const _NilStruct & ) : spString( nullptr, nullptr ) {};
#endif//SWIG
		spString() : spString( nullptr, nullptr ) {}

		/**
		 * Points a string at content of another string. Adds reference count ot the IReturnData object
		 * @param p is a string that points at an IReturnData object.
		 */
		spString( const spString& p ) : spString( p.sgapi , p.ptr ) {}

		/**
		 * Destructs the spString, and releases one reference to the IReturnData object, if the string currently points at an object.
		 */
		~spString() { release_ptr(); }

		/**
		 * Tells whether the string points at an object, or nothing, or points at a text which is zero lenght (empty)
		 * @return true if the pointer points at nothing, or the object is zero lenght
		 */
		bool IsNullOrEmpty() const;

		/**
		 * Tells whether the rdata points at an object, or nothing.
		 * @return true if the pointer points at someting, which also is not zero lenght
		 */
		bool NonEmpty() const { return !this->IsNullOrEmpty(); }

		/**
		 * Operator that sets the string to point at the same string as the other string
		 */
		spString& operator=( const spString& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the IReturnData object, or null if the string does not point at an object.
		 */
		const char* Data() const;

		/**
		 * Operator to retrieve a data item using an index
		 */
		char operator[]( unsigned int index ) const;

		/**
		 * Operator to retrieve the data.
		 */
		operator const char*() const { return this->Data(); }

		/**
		 * Method to retrieve the null-terminated string (this is an alias for Data())
		 */
		const char* c_str() const { return this->Data(); }

		/**
		 * Method to retrieve the data size. This is the whole allocated size of the string, including trailing null character.
		 */
		unsigned int GetItemCount() const;

		protected:
		void addref_ptr();
		void release_ptr();
		void replace_ptr( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hRMem p );

		const APIInterfacePtrs* sgapi;
		hRMem ptr;
	};

	/** 
	 * Shading color class.
	 */
	class ShadingColor
	{
		public:

		ShadingColor( )
		{
			r = 0.0f;
			g = 0.0f;
			b = 0.0f;
			a = 0.0f;
		}

		ShadingColor( real _r, real _g, real _b, real _a )
		{
			r = _r;
			g = _g;
			b = _b;
			a = _a;
		}

		real r;
		real g;
		real b;
		real a;
	};


	/** spBoolData is the IReturnData accessor for bool data */
	/**
	 * The spBoolData class is used to retrieve array data from the interface. 
	 */
	class spBoolData : public rdata
	{
		public:
		/**
		 * Constructs a spBoolData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spBoolData object point at nothing.
		 */
		spBoolData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spBoolData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spBoolData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spBoolData at content of another spBoolData. Adds reference count 
		 * @param p is a spBoolData that points at an API object.
		 */
		spBoolData( const spBoolData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spBoolData object does not point at an object.
		 */
		const bool* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const bool*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		bool GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spBoolData to point at the same spBoolData as the source spBoolData
		 */
		spBoolData& operator=( const spBoolData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		bool operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const bool*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( bool ) );
		}
	};

	/** spCharData is the IReturnData accessor for char data */
	/**
	 * The spCharData class is used to retrieve array data from the interface. 
	 */
	class spCharData : public rdata
	{
		public:
		/**
		 * Constructs a spCharData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spCharData object point at nothing.
		 */
		spCharData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spCharData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spCharData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spCharData at content of another spCharData. Adds reference count 
		 * @param p is a spCharData that points at an API object.
		 */
		spCharData( const spCharData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spCharData object does not point at an object.
		 */
		const char* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const char*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		char GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spCharData to point at the same spCharData as the source spCharData
		 */
		spCharData& operator=( const spCharData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		char operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const char*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( char ) );
		}
	};

	/** spUnsignedCharData is the IReturnData accessor for unsigned char data */
	/**
	 * The spUnsignedCharData class is used to retrieve array data from the interface. 
	 */
	class spUnsignedCharData : public rdata
	{
		public:
		/**
		 * Constructs a spUnsignedCharData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spUnsignedCharData object point at nothing.
		 */
		spUnsignedCharData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spUnsignedCharData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spUnsignedCharData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spUnsignedCharData at content of another spUnsignedCharData. Adds reference count 
		 * @param p is a spUnsignedCharData that points at an API object.
		 */
		spUnsignedCharData( const spUnsignedCharData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spUnsignedCharData object does not point at an object.
		 */
		const unsigned char* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const unsigned char*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		unsigned char GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spUnsignedCharData to point at the same spUnsignedCharData as the source spUnsignedCharData
		 */
		spUnsignedCharData& operator=( const spUnsignedCharData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		unsigned char operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const unsigned char*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( unsigned char ) );
		}
	};

	/** spShortData is the IReturnData accessor for short data */
	/**
	 * The spShortData class is used to retrieve array data from the interface. 
	 */
	class spShortData : public rdata
	{
		public:
		/**
		 * Constructs a spShortData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spShortData object point at nothing.
		 */
		spShortData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spShortData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spShortData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spShortData at content of another spShortData. Adds reference count 
		 * @param p is a spShortData that points at an API object.
		 */
		spShortData( const spShortData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spShortData object does not point at an object.
		 */
		const short* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const short*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		short GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spShortData to point at the same spShortData as the source spShortData
		 */
		spShortData& operator=( const spShortData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		short operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const short*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( short ) );
		}
	};

	/** spUnsignedShortData is the IReturnData accessor for unsigned short data */
	/**
	 * The spUnsignedShortData class is used to retrieve array data from the interface. 
	 */
	class spUnsignedShortData : public rdata
	{
		public:
		/**
		 * Constructs a spUnsignedShortData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spUnsignedShortData object point at nothing.
		 */
		spUnsignedShortData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spUnsignedShortData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spUnsignedShortData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spUnsignedShortData at content of another spUnsignedShortData. Adds reference count 
		 * @param p is a spUnsignedShortData that points at an API object.
		 */
		spUnsignedShortData( const spUnsignedShortData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spUnsignedShortData object does not point at an object.
		 */
		const unsigned short* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const unsigned short*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		unsigned short GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spUnsignedShortData to point at the same spUnsignedShortData as the source spUnsignedShortData
		 */
		spUnsignedShortData& operator=( const spUnsignedShortData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		unsigned short operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const unsigned short*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( unsigned short ) );
		}
	};

	/** spIntData is the IReturnData accessor for int data */
	/**
	 * The spIntData class is used to retrieve array data from the interface. 
	 */
	class spIntData : public rdata
	{
		public:
		/**
		 * Constructs a spIntData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spIntData object point at nothing.
		 */
		spIntData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spIntData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spIntData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spIntData at content of another spIntData. Adds reference count 
		 * @param p is a spIntData that points at an API object.
		 */
		spIntData( const spIntData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spIntData object does not point at an object.
		 */
		const int* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const int*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		int GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spIntData to point at the same spIntData as the source spIntData
		 */
		spIntData& operator=( const spIntData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		int operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const int*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( int ) );
		}
	};

	/** spUnsignedIntData is the IReturnData accessor for unsigned int data */
	/**
	 * The spUnsignedIntData class is used to retrieve array data from the interface. 
	 */
	class spUnsignedIntData : public rdata
	{
		public:
		/**
		 * Constructs a spUnsignedIntData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spUnsignedIntData object point at nothing.
		 */
		spUnsignedIntData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spUnsignedIntData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spUnsignedIntData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spUnsignedIntData at content of another spUnsignedIntData. Adds reference count 
		 * @param p is a spUnsignedIntData that points at an API object.
		 */
		spUnsignedIntData( const spUnsignedIntData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spUnsignedIntData object does not point at an object.
		 */
		const unsigned int* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const unsigned int*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		unsigned int GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spUnsignedIntData to point at the same spUnsignedIntData as the source spUnsignedIntData
		 */
		spUnsignedIntData& operator=( const spUnsignedIntData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		unsigned int operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const unsigned int*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( unsigned int ) );
		}
	};

	/** spLongData is the IReturnData accessor for long data */
	/**
	 * The spLongData class is used to retrieve array data from the interface. 
	 */
	class spLongData : public rdata
	{
		public:
		/**
		 * Constructs a spLongData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spLongData object point at nothing.
		 */
		spLongData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spLongData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spLongData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spLongData at content of another spLongData. Adds reference count 
		 * @param p is a spLongData that points at an API object.
		 */
		spLongData( const spLongData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spLongData object does not point at an object.
		 */
		const long* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const long*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		long GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spLongData to point at the same spLongData as the source spLongData
		 */
		spLongData& operator=( const spLongData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		long operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const long*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( long ) );
		}
	};

	/** spUnsignedLongData is the IReturnData accessor for unsigned long data */
	/**
	 * The spUnsignedLongData class is used to retrieve array data from the interface. 
	 */
	class spUnsignedLongData : public rdata
	{
		public:
		/**
		 * Constructs a spUnsignedLongData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spUnsignedLongData object point at nothing.
		 */
		spUnsignedLongData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spUnsignedLongData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spUnsignedLongData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spUnsignedLongData at content of another spUnsignedLongData. Adds reference count 
		 * @param p is a spUnsignedLongData that points at an API object.
		 */
		spUnsignedLongData( const spUnsignedLongData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spUnsignedLongData object does not point at an object.
		 */
		const unsigned long* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const unsigned long*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		unsigned long GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spUnsignedLongData to point at the same spUnsignedLongData as the source spUnsignedLongData
		 */
		spUnsignedLongData& operator=( const spUnsignedLongData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		unsigned long operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const unsigned long*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( unsigned long ) );
		}
	};

	/** spFloatData is the IReturnData accessor for float data */
	/**
	 * The spFloatData class is used to retrieve array data from the interface. 
	 */
	class spFloatData : public rdata
	{
		public:
		/**
		 * Constructs a spFloatData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spFloatData object point at nothing.
		 */
		spFloatData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spFloatData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spFloatData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spFloatData at content of another spFloatData. Adds reference count 
		 * @param p is a spFloatData that points at an API object.
		 */
		spFloatData( const spFloatData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spFloatData object does not point at an object.
		 */
		const float* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const float*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		float GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spFloatData to point at the same spFloatData as the source spFloatData
		 */
		spFloatData& operator=( const spFloatData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		float operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const float*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( float ) );
		}
	};

	/** spDoubleData is the IReturnData accessor for double data */
	/**
	 * The spDoubleData class is used to retrieve array data from the interface. 
	 */
	class spDoubleData : public rdata
	{
		public:
		/**
		 * Constructs a spDoubleData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spDoubleData object point at nothing.
		 */
		spDoubleData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spDoubleData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spDoubleData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spDoubleData at content of another spDoubleData. Adds reference count 
		 * @param p is a spDoubleData that points at an API object.
		 */
		spDoubleData( const spDoubleData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spDoubleData object does not point at an object.
		 */
		const double* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const double*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		double GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spDoubleData to point at the same spDoubleData as the source spDoubleData
		 */
		spDoubleData& operator=( const spDoubleData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		double operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const double*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( double ) );
		}
	};

	/** spRealData is the IReturnData accessor for real data */
	/**
	 * The spRealData class is used to retrieve array data from the interface. 
	 */
	class spRealData : public rdata
	{
		public:
		/**
		 * Constructs a spRealData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spRealData object point at nothing.
		 */
		spRealData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spRealData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spRealData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spRealData at content of another spRealData. Adds reference count 
		 * @param p is a spRealData that points at an API object.
		 */
		spRealData( const spRealData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spRealData object does not point at an object.
		 */
		const real* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const real*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		real GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spRealData to point at the same spRealData as the source spRealData
		 */
		spRealData& operator=( const spRealData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		real operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const real*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( real ) );
		}
	};

	/** spRidData is the IReturnData accessor for rid data */
	/**
	 * The spRidData class is used to retrieve array data from the interface. 
	 */
	class spRidData : public rdata
	{
		public:
		/**
		 * Constructs a spRidData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spRidData object point at nothing.
		 */
		spRidData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spRidData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spRidData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spRidData at content of another spRidData. Adds reference count 
		 * @param p is a spRidData that points at an API object.
		 */
		spRidData( const spRidData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spRidData object does not point at an object.
		 */
		const rid* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const rid*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		rid GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spRidData to point at the same spRidData as the source spRidData
		 */
		spRidData& operator=( const spRidData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		rid operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const rid*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( rid ) );
		}
	};

	/** spRhandleData is the IReturnData accessor for rhandle data */
	/**
	 * The spRhandleData class is used to retrieve array data from the interface. 
	 */
	class spRhandleData : public rdata
	{
		public:
		/**
		 * Constructs a spRhandleData from an ReturnData interface pointer.
		 * @param p is a pointer to an API object, or null to make the spRhandleData object point at nothing.
		 */
		spRhandleData( const APIInterfacePtrs *intf , hRMem p ) : rdata(intf,p) {}
		spRhandleData( const _NilStruct & ) : rdata(nullptr,nullptr) {}
		spRhandleData() : rdata(nullptr,nullptr) {}

		/**
		 * Points an spRhandleData at content of another spRhandleData. Adds reference count 
		 * @param p is a spRhandleData that points at an API object.
		 */
		spRhandleData( const spRhandleData& p ) : rdata(p) {}

		/**
		 * Method to retrieve the const data pointer.
		 * @return the pointer to the data values, or null if the spRhandleData object does not point at an object.
		 */
		const rhandle* Data() const
		{
			if( this->ptr == nullptr )
			{
				return nullptr;
			}
			return static_cast<const rhandle*>( this->sgapi->fpReturnData_GetRawPointer( this->ptr ) );
		}

		/**
		 * Method to retrieve a data item using an index
		 */
		rhandle GetItem( unsigned int index ) const { return ((this->Data())[ index ]); }

		/**
		 * Operator that sets the spRhandleData to point at the same spRhandleData as the source spRhandleData
		 */
		spRhandleData& operator=( const spRhandleData& p ) { this->replace_ptr( p.sgapi , p.ptr ); return *this; }

		/**
		 * Operator to retrieve a data item using an index
		 */
		rhandle operator[]( unsigned int index ) const { return GetItem(index); }

		/**
		 * Operator to retrieve the data.
		 */
		operator const rhandle*() const { return this->Data(); }

		/**
		 * Method to retrieve the data size.
		 */
		unsigned int GetItemCount() const
		{
			if( this->ptr == nullptr )
			{
				return 0;
			}
			return ( (unsigned int)( this->sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( rhandle ) );
		}
	};

	class spObject;
	class spArray;
	class spValueArray;
	class spBoolArray;
	class spCharArray;
	class spDoubleArray;
	class spFloatArray;
	class spIntArray;
	class spLongArray;
	class spRealArray;
	class spRidArray;
	class spShortArray;
	class spUnsignedCharArray;
	class spUnsignedIntArray;
	class spUnsignedLongArray;
	class spUnsignedShortArray;
	class spChunkedImageData;
	class spDirectXRenderer;
	class spFieldData;
	class spGeometryData;
	class spPackedGeometryData;
	class spImageData;
	class spTable;
	class spMaterial;
	class spMaterialTable;
	class spMatrix4x4;
	class spTransform3;
	class spMappingImage;
	class spProcessingObject;
	class spParameterizer;
	class spObjectCollection;
	class spGeometryDataCollection;
	class spGraphicsImporter;
	class spWavefrontImporter;
	class spGLTFImporter;
	class spFBXImporter;
	class spGraphicsExporter;
	class spWavefrontExporter;
	class spFBXExporter;
	class spGLTFExporter;
	class spBinaryImporter;
	class spBinaryExporter;
	class spGeometryValidator;
	class spSettingsObject;
	class spMaterialCaster;
	class spMaterialCasterSettings;
	class spColorCaster;
	class spColorCasterSettings;
	class spOpacityCaster;
	class spOpacityCasterSettings;
	class spNormalCaster;
	class spNormalCasterSettings;
	class spNormalRepairer;
	class spDisplacementCaster;
	class spDisplacementCasterSettings;
	class spTangentCalculator;
	class spRepairSettings;
	class spBoneSettings;
	class spReductionSettings;
	class spNormalCalculationSettings;
	class spMappingImageSettings;
	class spMappingImageInputMaterialSettings;
	class spMappingImageOutputMaterialSettings;
	class spVisibilitySettings;
	class spReductionProcessor;
	class spRemeshingLegacySettings;
	class spRemeshingSettings;
	class spRemeshingLegacyProcessor;
	class spRemeshingProcessor;
	class spScene;
	class spSceneNode;
	class spSceneNodeCollection;
	class spSceneMesh;
	class spSceneLodGroup;
	class spSceneBone;
	class spSceneBoneTable;
	class spScenePlane;
	class spSceneCamera;
	class spSceneExporter;
	class spSceneImporter;
	class spSelectionSet;
	class spSelectionSetTable;
	class spTexture;
	class spTextureTable;
	class spGeometryCullingSettings;
	class spImageDataImporter;
	class spMappingImageMeshData;
	class spShadingNode;
	class spShadingFilterNode;
	class spShadingTextureNode;
	class spShadingSwizzlingNode;
	class spShadingColorNode;
	class spShadingAddNode;
	class spShadingSubtractNode;
	class spShadingMultiplyNode;
	class spShadingColorCorrectionNode;
	class spShadingPowNode;
	class spShadingDivideNode;
	class spShadingClampNode;
	class spShadingMaxNode;
	class spShadingMinNode;
	class spShadingStepNode;
	class spShadingEqualNode;
	class spShadingNotEqualNode;
	class spShadingVertexColorNode;
	class spShadingInterpolateNode;
	class spShadingCustomNode;
	class spShadingLayeredBlendNode;
	class spShadingNormalize3Node;
	class spShadingSqrtNode;
	class spShadingDot3Node;
	class spShadingCross3Node;
	class spShadingCosNode;
	class spShadingSinNode;
	class spShadingGreaterThanNode;
	class spShadingLessThanNode;
	class spShadingGeometryFieldNode;
	class spShaderGenerator;
	class spAggregationProcessor;
	class spAggregationSettings;
	class spChartAggregator;
	class spVertexColorCasterSettings;
	class spVertexColorCaster;
	class spImageDataExporter;
	class spAmbientOcclusionCaster;
	class spAmbientOcclusionCasterSettings;
	class spImpostorProcessor;
	class spImpostorSettings;
	class spSurfaceMapper;
	class spOcclusionMeshProcessor;
	class spOcclusionMeshSettings;
	class spImageComparer;
	class spRecommendedTextureSizeCalculator;
	class spPartRemover;
	class spWelder;
	class spTJunctionEliminator;
	class spPipeline;
	class spPipelineBatch;
	class spPipelineSerializer;
	class spReductionPipeline;
	class spRemeshingLegacyPipeline;
	class spAggregationPipeline;
	class spPipelineSettings;
	class spRemeshingPipeline;
	class spPassthroughPipeline;
	class spGeometryDataCaster;
	class spGeometryDataCasterSettings;
	class spVertexWeightSettings;
	class spGenerateLightmapTexCoordSettings;
	class spChartAggregatorSettings;
	class spParameterizerSettings;
	class spBillboardCloudSettings;
	class spFlipbookSettings;
	class spImpostorFromSingleViewSettings;
	class spImpostorFromSingleViewPipeline;
	class spBillboardCloudPipeline;
	class spBillboardCloudVegetationPipeline;
	class spFlipbookPipeline;
	class spFoliageSettings;
	class spStringArray;
	class spOcclusionMeshPipeline;


	/**
	 * spObject is the base interface for all API interfaces defined within the API. The interfaces adds safe casting into any API object, reference counting support
	 * (best used with the CountedPointer reference counted pointer class), basic names for all objects, and event handling, using observers (using objects
	 * derived from Observer)
	 */
	class spObject 
	{
		public:
		spObject();
#ifndef SWIG
		spObject( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spObject( const _NilStruct & ) : spObject(nullptr,nullptr) {}
#endif//SWIG
		spObject( const spObject& p );
		~spObject();

		spObject& operator=( const spObject& p );
#ifndef SWIG
		const spObject* operator->() const;
		bool operator==( const _NilStruct& );
		bool operator!=( const _NilStruct& );
#endif//SWIG
		bool IsNull() const;
		bool NonNull() const;
		bool IsSameObjectAs( const spObject& p );
		bool operator==( const spObject& p );
		operator void*() const;


		/**
		 * GetClass returns the name of the class of the object.
		 * @return the name of the actual class of the object, as a spString
		 */
		spString GetClass() const;
		
		/** 
		 * The IsA function returns true if the object is a or is a descendant of the class named as the type parameter
		 * @param type is the name of the class to check if the object is, or is a descendant of
		 * @return true if the object is of the specified class, false if not
		 */
		bool IsA( const char *type ) const;
		
		/**
		 * The IsClassA function returns true if the class is a or is a descendant of the class named as the type parameter
		 * @param type is the name of the class to check if the class is, or is a descendant of
		 * @return true if the class is of the specified class, false if not
		 */
		static bool IsClassA( const char *type )
		{
			if( type && ((strcmp("IObject",type)==0) || (strcmp("spObject",type)==0)) )
				return true;
			return false;
		}

		/** 
		* SafeCast makes sure the pointer is of a class that can be cast into spObject, and if this is the case, returns the pointer cast into an spObject 
		* @param other is the handle to be cast into a pointer to an object of type spObject
		* @return a pointer to IObject, if the cast can be made
		*/
		static spObject SafeCast( spObject other );
		
		/**
		 * PrintInfo prints the contents/info of the object to the log
		 */
		void PrintInfo() const;

		/** 
		 * Sets the name of the object.
		 * @param Name is the new name of the object
		 */
		void SetName( const char *Name ) const;

		/** 
		 * Gets the name of the object.
		 * @return The name of the object
		 */
		spString GetName() const;

		/** 
		 * Adds a user-defined observer object to the interface, that will receive events from the interface.
		 * @param observer is the object that will receive events
		 * @return the id of the observer within the API object
		 */
		rid AddObserver( Simplygon::Observer *observer ) const;

		/** 
		 * Removes a previously added observer object
		 * @param observerId the id returned by AddObserver when the observer was added
		 */
		void RemoveObserver( rid observerId ) const;

		/** 
		 * Sets a named user data, that can be retrieved at a later stage from the object
		 */
		void SetUserData( const char* name, const void* data, unsigned int size ) const;
		
		/**
		 * Retrieves the named user data from the object.
		 */
		spUnsignedCharData GetUserData( const char* name ) const;
		
		/** Only used by the API */
		const Simplygon::APIInterfacePtrs *_GetAPI() const { return this->api.GetAPI(); }
		const Simplygon::hIntf _GetHandle() const { return this->api.GetHandle(); }

		protected:
		void addref_ptr();
		void release_ptr();
		void replace_ptr( const Simplygon::APIInterfacePtrs* _sg, const Simplygon::hIntf _intfptr );
		
		private:
		APIAccessor api;
	};

	/**
	 * Array is the base class for the array objects. The object contains a dynamically 
	 * allocated list of tuples of the same length, which can be specified before the 
	 * list is filled with values. 
	 */
	class spArray : public spObject
	{
		public:
		spArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spArray();
		spArray( const spArray &p );
		spArray & operator=( const spArray &p );
		const spArray* operator->() const;
		spArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spArray is a or is a descendant of the 
		 * class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IArray",type)==0) || (strcmp("spArray",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spArray handle 
		 * @return a handle to the spArray object, if the cast can be made, and a NULL 
		 * handle otherwise 
		 */
		static spArray SafeCast(spObject other);

		/**
		 * Creates a new array with the same underlying data type, size and tuple settings 
		 * as this array. To also copy the actual data, set copy_data to true. 
		 * @param copy_data If set, duplicate all the data. If cleared, return an empty 
		 * array of the same type. 
		 */
		spArray NewCopy( bool copy_data ) const;

		/**
		 * Like NewCopy, NewPackedCopy creates an array with the same underlying data 
		 * and tuple settings as the source array. However, NewPackedCopy only copies 
		 * unique tuples, and if the index_array parameter is set, this index array will 
		 * contain the same number of tuples as the source array, and with the ids of 
		 * a specific tuples within the new copy of the array. 
		 * @param index_array The optional array that will receive the indices of the 
		 * remapped tuples. 
		 */
		spArray NewPackedCopy( const spRidArray & index_array ) const;

		/**
		 * Copies data from another array. The arrays must have the same underlying data 
		 * types. 
		 * @param source The source array to copy from. Value cannot be equal to null. 
		 *  
		 */
		void DeepCopy( const spArray & source ) const;

		/**
		 * Copies tuples from a source array through an id table. The id table dictates 
		 * the order in which the tuples are to be copied to this array. E.g. If the first 
		 * item in the id table has the value 14, then the tuple with id 14 in the source 
		 * array will be copied to the first tuple in this array. Note: All ids in the 
		 * id table must be valid ids of tuples in the source array. The id table is assumed 
		 * to have a tuple size of 1. The source array and this array must have the same 
		 * underlying data type, and have the same tuple size. The array must be large 
		 * enough to hold the copied data. 
		 * @param source The array from which to copy tuples. Value cannot be equal to 
		 * null. 
		 * @param idtable The array with the tuple indices to copy. Value cannot be equal 
		 * to null. 
		 * @param startId The first tuple that will receive the copied values. 
		 */
		void IndexedCopy( const spArray & source , const spRidArray & idtable , rid startId ) const;

		/**
		 * The tuple size, meaning how many items of the underlying data type is in a 
		 * tuple. The tuple size must be set before the array is populated. 
		 * @param value The desired tuple size. Value cannot be less than 1. Value cannot 
		 * be greater than 1024. 
		 */
		void SetTupleSize( unsigned int value ) const;

		/**
		 * The tuple size, meaning how many items of the underlying data type is in a 
		 * tuple. The tuple size must be set before the array is populated. 
		 */
		unsigned int GetTupleSize(  ) const;

		/**
		 * The number of individual items in the array. Warning! Do not confuse this count 
		 * with the count of tuples, they are only the same if TupleSize is equal to 1, 
		 * i.e. when the tuples are exactly one component each. Also note that the item 
		 * count should be a multiple of TupleSize. Note that the total number of items 
		 * cannot exceed INT_MAX. 
		 * @param value The desired item count. Value cannot be less than 1. Value cannot 
		 * be greater than INT_MAX. 
		 */
		void SetItemCount( unsigned int value ) const;

		/**
		 * The number of individual items in the array. Warning! Do not confuse this count 
		 * with the count of tuples, they are only the same if TupleSize is equal to 1, 
		 * i.e. when the tuples are exactly one component each. Also note that the item 
		 * count should be a multiple of TupleSize. Note that the total number of items 
		 * cannot exceed INT_MAX. 
		 */
		unsigned int GetItemCount(  ) const;

		/**
		 * Returns the id of the last item that is in the array. The id returned is equal 
		 * to (ItemCount - 1). Warning! Do not confuse this id with the id of a tuple, 
		 * they are only the same if TupleSize is equal to one, i.e. when the tuples are 
		 * exactly one component each. 
		 */
		rid GetMaxItemId(  ) const;

		/**
		 * Clears the array and sets the tuple count to 0. Tuple size and name remains 
		 * the same though. 
		 */
		void Clear(  ) const;

		/**
		 * Returns true if the list is empty. 
		 */
		bool IsEmpty(  ) const;

		/**
		 * The tuple count, meaning how many tuples are in the array. If resized to larger 
		 * array, the new tuples will not be set to anything. 
		 * @param value The desired tuple count. Value cannot be less than 1. Value cannot 
		 * be greater than INT_MAX. 
		 */
		void SetTupleCount( unsigned int value ) const;

		/**
		 * The tuple count, meaning how many tuples are in the array. If resized to larger 
		 * array, the new tuples will not be set to anything. 
		 */
		unsigned int GetTupleCount(  ) const;

		/**
		 * Returns the id of the tuple last in the list. If the array is empty, the value 
		 * is unspecified. Note: GetMaxTupleId() always returns (GetTupleCount()-1) as 
		 * a signed id. 
		 */
		rid GetMaxTupleId(  ) const;

		/**
		 * Returns the id of the basic type that the array is based on The ids are listed 
		 * in the BaseTypes enumeration. 
		 */
		Simplygon::EBaseTypes GetBaseType(  ) const;

		/**
		 * Appends an array to this array. The array must be a descendant of ValueArray. 
		 * For best performance, append arrays of the same basic type. 
		 * @param source The array to append to this array. Value cannot be equal to null. 
		 *  
		 */
		void AppendArray( const spArray & source ) const;

		/**
		 * Extracts tuples from the array. Note that the destination array must have the 
		 * same classtype and have the same tuple size as the source array. (If both arrays 
		 * are decendants of ValueArray, they can be of different types, but the conversion 
		 * is slow). 
		 * @param dest The array that will store the extracted tuples. Value cannot be 
		 * equal to null. 
		 * @param start This array tuple index where the extraction starts. Value cannot 
		 * be less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param count The number of tuples to extract. Value cannot be greater than 
		 * INT_MAX. 
		 */
		void ExtractTuples( const spArray & dest , rid start , unsigned int count ) const;

		/**
		 * CopyTuple copies one tuple in a source array to a tuple in this array. Both 
		 * the dest_id and the source_id must exist in the arrays. This array can be used 
		 * as the source array to copy within the array. 
		 * @param sourceArray The source array to copy from. Value cannot be equal to 
		 * null. 
		 * @param dest_id The tuple index in this array to copy into. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param src_id The tuple index in the source array to copy from. Value cannot 
		 * be less than 0. 
		 */
		void CopyTuple( const spArray & sourceArray , rid dest_id , rid src_id ) const;

		/**
		 * CompareTuples compares a tuple in this array with a tuple in another array. 
		 * Returns 0 if the tuples are identical, 1 if an element in this array tuple 
		 * in ascending order is larger and -1 if smaller. 
		 * @param otherArray The other array to compare with. Value cannot be equal to 
		 * null. 
		 * @param tuple_id The tuple from this array to use for comparison. Value cannot 
		 * be less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param other_tuple_id The tuple from the other array to use for comparison. 
		 * Value cannot be less than 0. 
		 */
		int CompareTuples( const spArray & otherArray , rid tuple_id , rid other_tuple_id ) const;

		/**
		 * CopyRange copies a range of tuples from a source array into this array. The 
		 * arrays must have the same tuple size and base type. This array must be resized 
		 * to hold the tuples before copying. The basetypes are listed in EBaseTypes. 
		 * @param source_array The source array to copy from. 
		 * @param start_dest_id The first destination tuple id. 
		 * @param start_src_id The first source tuple id. 
		 * @param count The number of tuples to copy. 
		 */
		void CopyRange( const spArray & source_array , rid start_dest_id , rid start_src_id , unsigned int count ) const;

		/**
		 * A string that can be used to identify the array in collections. 
		 * @param value The new alternative name. 
		 */
		void SetAlternativeName( const char * value ) const;

		/**
		 * A string that can be used to identify the array in collections. 
		 */
		spString GetAlternativeName(  ) const;

	};

	/**
	 * ValueArray adds methods to arrays to generically add, set and get tuples, through 
	 * real values. 
	 */
	class spValueArray : public spArray
	{
		public:
		spValueArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spValueArray();
		spValueArray( const spValueArray &p );
		spValueArray & operator=( const spValueArray &p );
		const spValueArray* operator->() const;
		spValueArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spValueArray is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IValueArray",type)==0) || (strcmp("spValueArray",type)==0) )
				return true;
			return spArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spValueArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spValueArray handle 
		 * @return a handle to the spValueArray object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spValueArray SafeCast(spObject other);

		/**
		 * SetRealItem() sets the item at position id. The id is the id of the item, not 
		 * the tuple the item belongs to. SetRealItem() converts the value from real to 
		 * the actual underlying data type. 
		 * @param id The item to set. Value cannot be less than 0. Value cannot be greater 
		 * than the value returned by GetMaxItemId(). 
		 * @param value The real value to set the item to. 
		 */
		void SetRealItem( rid id , real value ) const;

		/**
		 * GetRealItem() retrieves the item at position id. The id is the id of the item, 
		 * not the tuple the item belongs to. GetRealItem() converts the value from the 
		 * actual underlying data type to a real. 
		 * @param id The item to get. Value cannot be less than 0. Value cannot be greater 
		 * than the value returned by GetMaxItemId(). 
		 * @return the converted real value of the item. 
		 */
		real GetRealItem( rid id ) const;

	};

	/**
	 * BoolArray is the bool implementation of ValueArray. See ValueArray for a description. 
	 */
	class spBoolArray : public spValueArray
	{
		public:
		spBoolArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spBoolArray();
		spBoolArray( const spBoolArray &p );
		spBoolArray & operator=( const spBoolArray &p );
		const spBoolArray* operator->() const;
		spBoolArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spBoolArray is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IBoolArray",type)==0) || (strcmp("spBoolArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spBoolArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spBoolArray handle 
		 * @return a handle to the spBoolArray object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spBoolArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( bool value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , bool value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		bool GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_boolInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const bool *tuple_boolInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_boolInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const bool *tuple_boolInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spBoolData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spBoolData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spBoolData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_boolInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const bool *source_items_boolInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_boolInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const bool *source_items_boolInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * CharArray is the char implementation of ValueArray. See ValueArray for a description. 
	 */
	class spCharArray : public spValueArray
	{
		public:
		spCharArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spCharArray();
		spCharArray( const spCharArray &p );
		spCharArray & operator=( const spCharArray &p );
		const spCharArray* operator->() const;
		spCharArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spCharArray is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ICharArray",type)==0) || (strcmp("spCharArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spCharArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spCharArray handle 
		 * @return a handle to the spCharArray object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spCharArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( char value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , char value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		char GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_charInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const char *tuple_charInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_charInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const char *tuple_charInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spCharData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spCharData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spCharData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_charInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const char *source_items_charInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_charInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const char *source_items_charInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * DoubleArray is the double implementation of ValueArray. See ValueArray for a 
	 * description. 
	 */
	class spDoubleArray : public spValueArray
	{
		public:
		spDoubleArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spDoubleArray();
		spDoubleArray( const spDoubleArray &p );
		spDoubleArray & operator=( const spDoubleArray &p );
		const spDoubleArray* operator->() const;
		spDoubleArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spDoubleArray is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IDoubleArray",type)==0) || (strcmp("spDoubleArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spDoubleArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spDoubleArray handle 
		 * @return a handle to the spDoubleArray object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spDoubleArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( double value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , double value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		double GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_doubleInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const double *tuple_doubleInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_doubleInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const double *tuple_doubleInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spDoubleData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spDoubleData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spDoubleData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_doubleInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const double *source_items_doubleInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_doubleInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const double *source_items_doubleInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * FloatArray is the float implementation of ValueArray. See ValueArray for a description. 
	 */
	class spFloatArray : public spValueArray
	{
		public:
		spFloatArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spFloatArray();
		spFloatArray( const spFloatArray &p );
		spFloatArray & operator=( const spFloatArray &p );
		const spFloatArray* operator->() const;
		spFloatArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spFloatArray is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IFloatArray",type)==0) || (strcmp("spFloatArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spFloatArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spFloatArray handle 
		 * @return a handle to the spFloatArray object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spFloatArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( float value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , float value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		float GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_floatInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const float *tuple_floatInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_floatInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const float *tuple_floatInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spFloatData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spFloatData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spFloatData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_floatInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const float *source_items_floatInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_floatInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const float *source_items_floatInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * IntArray is the int implementation of ValueArray. See ValueArray for a description. 
	 */
	class spIntArray : public spValueArray
	{
		public:
		spIntArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spIntArray();
		spIntArray( const spIntArray &p );
		spIntArray & operator=( const spIntArray &p );
		const spIntArray* operator->() const;
		spIntArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spIntArray is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IIntArray",type)==0) || (strcmp("spIntArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spIntArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spIntArray handle 
		 * @return a handle to the spIntArray object, if the cast can be made, and a NULL 
		 * handle otherwise 
		 */
		static spIntArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( int value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , int value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		int GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_intInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const int *tuple_intInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_intInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const int *tuple_intInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spIntData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spIntData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spIntData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_intInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const int *source_items_intInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_intInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const int *source_items_intInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * LongArray is the long implementation of ValueArray. See ValueArray for a description. 
	 */
	class spLongArray : public spValueArray
	{
		public:
		spLongArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spLongArray();
		spLongArray( const spLongArray &p );
		spLongArray & operator=( const spLongArray &p );
		const spLongArray* operator->() const;
		spLongArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spLongArray is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ILongArray",type)==0) || (strcmp("spLongArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spLongArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spLongArray handle 
		 * @return a handle to the spLongArray object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spLongArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( long value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , long value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		long GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_longInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const long *tuple_longInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_longInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const long *tuple_longInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spLongData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spLongData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spLongData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_longInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const long *source_items_longInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_longInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const long *source_items_longInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * RealArray is the real implementation of ValueArray. See ValueArray for a description. 
	 */
	class spRealArray : public spValueArray
	{
		public:
		spRealArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spRealArray();
		spRealArray( const spRealArray &p );
		spRealArray & operator=( const spRealArray &p );
		const spRealArray* operator->() const;
		spRealArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spRealArray is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IRealArray",type)==0) || (strcmp("spRealArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spRealArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spRealArray handle 
		 * @return a handle to the spRealArray object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spRealArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( real value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , real value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		real GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_realInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const real *tuple_realInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_realInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const real *tuple_realInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spRealData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spRealData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spRealData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_realInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const real *source_items_realInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_realInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const real *source_items_realInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * RidArray is the rid implementation of ValueArray. See ValueArray for a description. 
	 */
	class spRidArray : public spValueArray
	{
		public:
		spRidArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spRidArray();
		spRidArray( const spRidArray &p );
		spRidArray & operator=( const spRidArray &p );
		const spRidArray* operator->() const;
		spRidArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spRidArray is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IRidArray",type)==0) || (strcmp("spRidArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spRidArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spRidArray handle 
		 * @return a handle to the spRidArray object, if the cast can be made, and a NULL 
		 * handle otherwise 
		 */
		static spRidArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( rid value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , rid value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		rid GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_ridInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const rid *tuple_ridInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_ridInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const rid *tuple_ridInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spRidData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spRidData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spRidData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_ridInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const rid *source_items_ridInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_ridInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const rid *source_items_ridInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * ShortArray is the short implementation of ValueArray. See ValueArray for a description. 
	 */
	class spShortArray : public spValueArray
	{
		public:
		spShortArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShortArray();
		spShortArray( const spShortArray &p );
		spShortArray & operator=( const spShortArray &p );
		const spShortArray* operator->() const;
		spShortArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShortArray is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShortArray",type)==0) || (strcmp("spShortArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShortArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShortArray handle 
		 * @return a handle to the spShortArray object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spShortArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( short value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , short value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		short GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_shortInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const short *tuple_shortInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_shortInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const short *tuple_shortInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spShortData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spShortData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spShortData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_shortInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const short *source_items_shortInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_shortInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const short *source_items_shortInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * UnsignedCharArray is the uchar implementation of ValueArray. See ValueArray 
	 * for a description. 
	 */
	class spUnsignedCharArray : public spValueArray
	{
		public:
		spUnsignedCharArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spUnsignedCharArray();
		spUnsignedCharArray( const spUnsignedCharArray &p );
		spUnsignedCharArray & operator=( const spUnsignedCharArray &p );
		const spUnsignedCharArray* operator->() const;
		spUnsignedCharArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spUnsignedCharArray is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IUnsignedCharArray",type)==0) || (strcmp("spUnsignedCharArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spUnsignedCharArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spUnsignedCharArray handle 
		 * @return a handle to the spUnsignedCharArray object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spUnsignedCharArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( unsigned char value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , unsigned char value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		unsigned char GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_ucharInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const unsigned char *tuple_ucharInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_ucharInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const unsigned char *tuple_ucharInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedCharData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedCharData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedCharData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_ucharInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const unsigned char *source_items_ucharInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_ucharInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const unsigned char *source_items_ucharInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * UnsignedIntArray is the uint implementation of ValueArray. See ValueArray for 
	 * a description. 
	 */
	class spUnsignedIntArray : public spValueArray
	{
		public:
		spUnsignedIntArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spUnsignedIntArray();
		spUnsignedIntArray( const spUnsignedIntArray &p );
		spUnsignedIntArray & operator=( const spUnsignedIntArray &p );
		const spUnsignedIntArray* operator->() const;
		spUnsignedIntArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spUnsignedIntArray is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IUnsignedIntArray",type)==0) || (strcmp("spUnsignedIntArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spUnsignedIntArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spUnsignedIntArray handle 
		 * @return a handle to the spUnsignedIntArray object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spUnsignedIntArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( unsigned int value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , unsigned int value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		unsigned int GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_uintInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const unsigned int *tuple_uintInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_uintInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const unsigned int *tuple_uintInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedIntData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedIntData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedIntData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_uintInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const unsigned int *source_items_uintInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_uintInputDataPtr The array to copy from. Value cannot be 
		 * equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const unsigned int *source_items_uintInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * UnsignedLongArray is the ulong implementation of ValueArray. See ValueArray 
	 * for a description. 
	 */
	class spUnsignedLongArray : public spValueArray
	{
		public:
		spUnsignedLongArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spUnsignedLongArray();
		spUnsignedLongArray( const spUnsignedLongArray &p );
		spUnsignedLongArray & operator=( const spUnsignedLongArray &p );
		const spUnsignedLongArray* operator->() const;
		spUnsignedLongArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spUnsignedLongArray is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IUnsignedLongArray",type)==0) || (strcmp("spUnsignedLongArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spUnsignedLongArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spUnsignedLongArray handle 
		 * @return a handle to the spUnsignedLongArray object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spUnsignedLongArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( unsigned long value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , unsigned long value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		unsigned long GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_ulongInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const unsigned long *tuple_ulongInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_ulongInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const unsigned long *tuple_ulongInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedLongData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedLongData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedLongData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_ulongInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const unsigned long *source_items_ulongInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_ulongInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const unsigned long *source_items_ulongInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * UnsignedShortArray is the ushort implementation of ValueArray. See ValueArray 
	 * for a description. 
	 */
	class spUnsignedShortArray : public spValueArray
	{
		public:
		spUnsignedShortArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spUnsignedShortArray();
		spUnsignedShortArray( const spUnsignedShortArray &p );
		spUnsignedShortArray & operator=( const spUnsignedShortArray &p );
		const spUnsignedShortArray* operator->() const;
		spUnsignedShortArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spUnsignedShortArray is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IUnsignedShortArray",type)==0) || (strcmp("spUnsignedShortArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spUnsignedShortArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spUnsignedShortArray handle 
		 * @return a handle to the spUnsignedShortArray object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spUnsignedShortArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( unsigned short value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , unsigned short value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		unsigned short GetItem( rid id ) const;

		/**
		 * Adds a tuple to the list. Reallocates the list if needed. If many items are 
		 * being put into the list, use Resize to set the size of the new list (only one 
		 * reallocation needed) and then use SetItem() / SetRealTuple() to set the items 
		 * directly. 
		 * @param tuple_ushortInputDataPtr The value(s) of the tuple. 
		 */
		void AddTuple( const unsigned short *tuple_ushortInputDataPtr ) const;

		/**
		 * Sets a tuple in the list. The id is the id of the tuple that is being updated. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_ushortInputDataPtr The new value(s) of the tuple. 
		 */
		void SetTuple( rid id , const unsigned short *tuple_ushortInputDataPtr ) const;

		/**
		 * Gets a tuple in the list. The id is the id of the tuple that is being fetched. 
		 * Warning! No range checking is done. 
		 * @param id The id of the tuple. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxTupleId(). 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedShortData GetTuple( rid id ) const;

		/**
		 * Returns all tuples in the array as a single item array. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedShortData GetData(  ) const;

		/**
		 * Returns a range of tuples in the array. 
		 * @param start_tuple_id The first id in the range. Value cannot be less than 
		 * 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 * @param tuple_count The number of tuples in the range. 
		 * @return The returned data array. The array contains a dynamic number of items. 
		 * Check the lenght of the array. 
		 */
		spUnsignedShortData GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const;

		/**
		 * Set the array from a range of data values. Note that the array will be resized 
		 * to the size of the items. Note that the source_item_count is the number of 
		 * items to set, NOT the number of tuples. 
		 * @param source_items_ushortInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetData( const unsigned short *source_items_ushortInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set a part of the array from a range of data values. Note that the array will 
		 * be resized to contain the size of the items. Note that the source_item_count 
		 * is the number of items to set, NOT the number of tuples, but start_tuple_id 
		 * IS the first tuple index to update. 
		 * @param start_tuple_id where to start copy to in this array. Value cannot be 
		 * less than 0. Value cannot be greater than the value returned by GetMaxTupleId(). 
		 *  
		 * @param source_items_ushortInputDataPtr The array to copy from. Value cannot 
		 * be equal to null. 
		 * @param source_item_count The number of items in the array. 
		 */
		void SetDataRange( rid start_tuple_id , const unsigned short *source_items_ushortInputDataPtr , unsigned int source_item_count ) const;

		/**
		 * Set the array from a range of data values in a raw memory block. The array 
		 * will be resized to the size of the tuples. Please set the tuple size before 
		 * calling this method. Note! that the source_tuple_count is the number of TUPLES 
		 * to set, not the number of items. Note! This method is intended for advanced 
		 * users who want to get maximum performance. No range checking is done in this 
		 * method, and your code will crash if your read area is not large enough. 
		 * @param mem_area_voidInputDataPtr The array to copy from Value cannot be equal 
		 * to null. 
		 * @param source_tuple_count The number of items in the array 
		 * @param item_stride The number of bytes between the address of an item to the 
		 * address of the next. If items are consecutive in memory, this stride should 
		 * be the size of on item. 
		 * @param tuple_stride The number of bytes between the address of the first item 
		 * in one tuple to the address of the first item in the next tuple. E.g, if the 
		 * items are copied from an array of structs, this stride should be the size of 
		 * one of the struct objects in the array. 
		 */
		void SetDataFromMemoryPtr( void *mem_area_voidInputDataPtr , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const;

	};

	/**
	 * ChunkedImageData holds chunks for ImageData objects. ImageData objects can be 
	 * referenced, and swapped in/out of memory, to secondary storage. This is useful 
	 * for very large images that cannot be stored in-memory. ImageData objects can 
	 * be indexed in 1-,2- or 3D, and each ImageData chunk is cloned from a source 
	 * ImageData object, at setup. Fields added to ImageData chunks after setup will 
	 * only be added into that chunk, and is not recommended. 
	 */
	class spChunkedImageData : public spObject
	{
		public:
		spChunkedImageData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spChunkedImageData();
		spChunkedImageData( const spChunkedImageData &p );
		spChunkedImageData & operator=( const spChunkedImageData &p );
		const spChunkedImageData* operator->() const;
		spChunkedImageData( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spChunkedImageData is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IChunkedImageData",type)==0) || (strcmp("spChunkedImageData",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spChunkedImageData 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spChunkedImageData handle 
		 * @return a handle to the spChunkedImageData object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spChunkedImageData SafeCast(spObject other);

		/**
		 * Makes a new copy of the chunked image data This image must be fully unlocked 
		 * before copying. 
		 * @param copy_data If set, duplicate the data kept in the image data object. 
		 *  
		 */
		spChunkedImageData NewCopy( bool copy_data ) const;

		/**
		 * Deep copies (with template) the data from another image. The source image must 
		 * be fully unlocked before copying. 
		 * @param source Source object. 
		 * @param copy_data If set, duplicate the data kept in the source image data object. 
		 *  
		 */
		void DeepCopy( const spChunkedImageData & source , bool copy_data ) const;

		/**
		 * The template image to use as template for creating new chunks. The template 
		 * image is cloned, it can be released after the setup. Note that SetTemplateImage 
		 * must be called before allocating image chunks. 
		 * @param _template The template image object. 
		 */
		void SetTemplateImage( const spImageData & _template ) const;

		/**
		 * The X dimension size of the template image used to create the chunks. 
		 * @return The X dimension size of the template image used to create the chunks. 
		 *  
		 */
		unsigned int GetTemplateXSize(  ) const;

		/**
		 * The Y dimension size of the template image used to create the chunks. 
		 * @return The Y dimension size of the template image used to create the chunks. 
		 *  
		 */
		unsigned int GetTemplateYSize(  ) const;

		/**
		 * The Z dimension size of the template image used to create the chunks. 
		 * @return The Z dimension size of the template image used to create the chunks. 
		 *  
		 */
		unsigned int GetTemplateZSize(  ) const;

		/**
		 * The number of image chunks in the X dimension. 
		 * @return The number of image chunks in the X dimension. 
		 */
		unsigned int GetXSize(  ) const;

		/**
		 * The number of image chunks in the Y dimension. 
		 * @return The number of image chunks in the Y dimension. 
		 */
		unsigned int GetYSize(  ) const;

		/**
		 * The number of image chunks in the Z dimension. 
		 * @return The number of image chunks in the Z dimension. 
		 */
		unsigned int GetZSize(  ) const;

		/**
		 * The number of image chunks in the X dimension. 
		 * @param _xs The desired number of chunks in the X dimension. 
		 */
		void Set1DSize( unsigned int _xs ) const;

		/**
		 * The number of image chunks in the X and Y dimensions. 
		 * @param _xs The desired number of chunks in the X dimension. 
		 * @param _ys The desired number of chunks in the X dimension. 
		 */
		void Set2DSize( unsigned int _xs , unsigned int _ys ) const;

		/**
		 * The number of image chunks in the X, Y and Z dimensions. 
		 * @param _xs The desired number of chunks in the X dimension. 
		 * @param _ys The desired number of chunks in the X dimension. 
		 * @param _zs The desired number of chunks in the X dimension. 
		 */
		void Set3DSize( unsigned int _xs , unsigned int _ys , unsigned int _zs ) const;

		/**
		 * The total X dimension size of the full image. 
		 * @return The total X dimension size of the full image. 
		 */
		unsigned int GetTotalXSize(  ) const;

		/**
		 * The total Y dimension size of the full image. 
		 * @return The total Y dimension size of the full image. 
		 */
		unsigned int GetTotalYSize(  ) const;

		/**
		 * The total Z dimension size of the full image. 
		 * @return The total Z dimension size of the full image. 
		 */
		unsigned int GetTotalZSize(  ) const;

		/**
		 * Clears all data from the image, and removes all data fields. The template image 
		 * is kept, but can be replaced using SetTemplateImage before calling one of the 
		 * SetXDSize methods. Any lock that was hold in the image is automatically released. 
		 *  
		 */
		void Reset(  ) const;

		/**
		 * Locks a chunk for editing, and returns an image object to the caller. Only 
		 * one lock is allowed per chunk. Use IsChunkLocked to check if a chunk is locked 
		 * before trying to lock it. If the Lock failed, because the chunk is already 
		 * locked, null is returned. The method is thread-safe. 
		 * @param x X coordinate of the chunk. 
		 */
		spImageData LockChunk1D( rid x ) const;

		/**
		 * Locks a chunk for editing, and returns an image object to the caller. Only 
		 * one lock is allowed per chunk. Use IsChunkLocked to check if a chunk is locked 
		 * before trying to lock it. If the Lock failed, because the chunk is already 
		 * locked, null is returned. The method is thread-safe. 
		 * @param x X coordinate of the chunk. 
		 * @param y Y coordinate of the chunk. 
		 */
		spImageData LockChunk2D( rid x , rid y ) const;

		/**
		 * Locks a chunk for editing, and returns an image object to the caller. Only 
		 * one lock is allowed per chunk. Use IsChunkLocked to check if a chunk is locked 
		 * before trying to lock it. If the Lock failed, because the chunk is already 
		 * locked, null is returned. The method is thread-safe. 
		 * @param x X coordinate of the chunk. 
		 * @param y Y coordinate of the chunk. 
		 * @param z Z coordinate of the chunk. 
		 */
		spImageData LockChunk3D( rid x , rid y , rid z ) const;

		/**
		 * Returns true if a chunk is locked. The method is thread-safe. 
		 * @param x X coordinate of the chunk. 
		 */
		bool IsChunkLocked1D( rid x ) const;

		/**
		 * Returns true if a chunk is locked. The method is thread-safe. 
		 * @param x X coordinate of the chunk. 
		 * @param y Y coordinate of the chunk. 
		 */
		bool IsChunkLocked2D( rid x , rid y ) const;

		/**
		 * Returns true if a chunk is locked. The method is thread-safe. 
		 * @param x X coordinate of the chunk. 
		 * @param y Y coordinate of the chunk. 
		 * @param z Z coordinate of the chunk. 
		 */
		bool IsChunkLocked3D( rid x , rid y , rid z ) const;

		/**
		 * Unlocks a previously referenced chunk. All references to the object should 
		 * be released. The method is thread-safe. 
		 * @param x X coordinate of the chunk. 
		 */
		void UnlockChunk1D( rid x ) const;

		/**
		 * Unlocks a previously referenced chunk. All references to the object should 
		 * be released. The method is thread-safe. 
		 * @param x X coordinate of the chunk. 
		 * @param y Y coordinate of the chunk. 
		 */
		void UnlockChunk2D( rid x , rid y ) const;

		/**
		 * Unlocks a previously referenced chunk. All references to the object should 
		 * be released. The method is thread-safe. 
		 * @param x X coordinate of the chunk. 
		 * @param y Y coordinate of the chunk. 
		 * @param z Z coordinate of the chunk. 
		 */
		void UnlockChunk3D( rid x , rid y , rid z ) const;

	};

	/**
	 * A Renderer using DirectX 11 that can be used to preview a scene object containing 
	 * geometry data by rendering it from selected SceneCamera nodes within the given 
	 * scene and then storing the frames to disc. If using a Shading Node Network (having 
	 * an IShadingNode assigned to the IMaterial), then the material can be previewed 
	 * with the generated HLSL shader. 
	 */
	class spDirectXRenderer : public spObject
	{
		public:
		spDirectXRenderer( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spDirectXRenderer();
		spDirectXRenderer( const spDirectXRenderer &p );
		spDirectXRenderer & operator=( const spDirectXRenderer &p );
		const spDirectXRenderer* operator->() const;
		spDirectXRenderer( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spDirectXRenderer is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IDirectXRenderer",type)==0) || (strcmp("spDirectXRenderer",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spDirectXRenderer 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spDirectXRenderer handle 
		 * @return a handle to the spDirectXRenderer object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spDirectXRenderer SafeCast(spObject other);

		/**
		 * Creates a previewer with the specified window dimensions. 
		 * @param _width The window width. 
		 * @param _height The window height. 
		 * @return True if the previewer was successfully created. 
		 */
		bool CreatePreviewer( int _width , int _height ) const;

		/**
		 * Render from each camera view in the camera target direction specified in the 
		 * selection set with the scene cameras and stores the frame to the file path 
		 * specified. 
		 * @param cameraSelectionSetID The ID of the selection set with the scene cameras 
		 * to render from. 
		 * @param file_name_base The desired directory and file name. 
		 * @param format Picture format (PNG or RAW). 
		 */
		void RenderAlongCameraPathAndStorePics( int cameraSelectionSetID , const char * file_name_base , const char * format ) const;

		/**
		 * The render mode to wire frame. 
		 * @param flag True if render mode should be enabled. 
		 */
		void SetRenderWireFrameMode( bool flag ) const;

		/**
		 * The background color of the renderer. 
		 * @param r The red color component for the background color. Value cannot be 
		 * less than 0. Value cannot be greater than 1. 
		 * @param g The green color component for the background color. Value cannot be 
		 * less than 0. Value cannot be greater than 1. 
		 * @param b The blue color component for the background color. Value cannot be 
		 * less than 0. Value cannot be greater than 1. 
		 * @param a The alpha component for the background color. Value cannot be less 
		 * than 0. Value cannot be greater than 1. 
		 */
		void SetBackgroundColor( real r , real g , real b , real a ) const;

		/**
		 * The current background color of the renderer. 
		 * @return The returned data array. The array contains 4 items. 
		 */
		spRealData GetBackgroundColor(  ) const;

		/**
		 * Use in-memory shader generation instead of creating a temporary .fx file on 
		 * disk. Needs to be called after CreatePreviewer to have any effect. 
		 * @param flag The requested boolean value for the UseInMemoryShaderGeneration 
		 * setting. 
		 */
		void SetUseInMemoryShaderGeneration( bool flag ) const;

		/**
		 * Use in-memory shader generation instead of creating a temporary .fx file on 
		 * disk. Needs to be called after CreatePreviewer to have any effect. 
		 */
		bool GetUseInMemoryShaderGeneration(  ) const;

		/**
		 * @deprecated Method is marked as deprecated and will be removed in future version. 
		 * Use \link SetScene SetScene() \endlink instead. Loads a geometry data object 
		 * and its materials into the previewer. 
		 * @param geom The geometry data object to preview. 
		 * @param materials The material table of the geometry. Can be null if no material 
		 * table exists. 
		 * @return True if the geometry data was successfully loaded. 
		 */
		SGDEPRECATED bool LoadGeometryData( const spGeometryData & geom , const spMaterialTable & materials ) const;

		/**
		 * @deprecated Method is marked as deprecated and will be removed in future version. 
		 * Use \link SetScene SetScene() \endlink instead. Loads a scene into the previewer. 
		 * The material should have a shading network attached to it. 
		 * @param _scene The scene to preview. 
		 * @return True if the scene was successfully loaded. 
		 */
		SGDEPRECATED bool LoadGeometryDataWithMaterialShadingNetwork( const spScene & _scene ) const;

		/**
		 * Sets a scene into the previewer. Use InitializeSceneRenderData to generate 
		 * the material shaders. 
		 * @param _scene The scene to preview. 
		 * @return True if the scene was successfully loaded. 
		 */
		void SetScene( const spScene & _scene ) const;

		/**
		 * Initialize scene geometry's and generates material shaders for rendering. 
		 * @return True if the scene render data was correctly initialized. 
		 */
		bool InitializeSceneRenderData(  ) const;

	};

	/**
	 * FieldData represents multiple fields of data. Each field is implemented as an 
	 * ValueArray object, that has a unique name, and can have complex components (such 
	 * as scalars, vectors, quaternions, tensors or matrices). All fields are assumed 
	 * to be of the same length. IFieldData can be seen as an array with complex tuples, 
	 * where the component can be of different types. 
	 */
	class spFieldData : public spObject
	{
		public:
		spFieldData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spFieldData();
		spFieldData( const spFieldData &p );
		spFieldData & operator=( const spFieldData &p );
		const spFieldData* operator->() const;
		spFieldData( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spFieldData is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IFieldData",type)==0) || (strcmp("spFieldData",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spFieldData 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spFieldData handle 
		 * @return a handle to the spFieldData object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spFieldData SafeCast(spObject other);

		/**
		 * Creates another field data object with the same field setup. To also copy the 
		 * data to the new object, set copy_data to true. 
		 * @param copy_data True if data should be copied along with the field properties. 
		 *  
		 * @return A copy of this field data. 
		 */
		spFieldData NewCopy( bool copy_data ) const;

		/**
		 * Like NewCopy, NewPackedCopy creates a field data object with the same underlying 
		 * data and tuple settings as the source field data object. However, NewPackedCopy 
		 * only copies unique tuples, and if the index_array parameter is set, this index 
		 * array will contain the same number of tuples as the source field data object, 
		 * and with the ids of a specific tuples within the new copy of the field data 
		 * object. 
		 * @param index_array Will contain indices to the new packed field data values. 
		 *  
		 * @return A packed copy of this field data. 
		 */
		spFieldData NewPackedCopy( const spRidArray & index_array ) const;

		/**
		 * Copies the field setup and data from another object. To only copy the setup, 
		 * set copy_data to false. 
		 * @param source The source array to copy from. 
		 * @param copy_data True if the data should be copied along with the field data 
		 * properties. 
		 */
		void DeepCopy( const spFieldData & source , bool copy_data ) const;

		/**
		 * Compares the field setup of this field data object to another field data object. 
		 * If the setups are not identical, false is returned. Note! IsSetupIdenticalTo 
		 * will return false even if the same fields exist in both field data objects, 
		 * but are not in the same order. 
		 * @param other The other field data object used for comparison. 
		 * @return True if the field data objects are identical. 
		 */
		bool IsSetupIdenticalTo( const spFieldData & other ) const;

		/**
		 * Copies tuples from a source field data object through an id table. The id table 
		 * dictates the order in which the tuples are to be copied. E.g. If the first 
		 * item in the id table has the value 14, then the tuple with id 14 in the source 
		 * array will be copied to the first tuple in this array. Note! All ids in the 
		 * id table must be valid ids of tuples in the source field data object. The id 
		 * table is assumed to have a tuple size of 1. The source and this field data 
		 * object must have the same underlying data fields, of the same type and the 
		 * same tuple sizes. The FieldData must have enough tuples to hold the new data. 
		 * @param source The source field data object to copy from. Value cannot be equal 
		 * to null. 
		 * @param idtable Array containing the tuple indices to copy. Value cannot be 
		 * equal to null. 
		 * @param startId The first tuple to begin copy into. 
		 */
		void IndexedCopy( const spFieldData & source , const spRidArray & idtable , rid startId ) const;

		/**
		 * Works like IndexedCopy, but uses two consecutive ids in the idtable, and a 
		 * blend value from the blendtable. The idtable contains (idtable_cnt*2) indices 
		 * and blendtable contains idtable_cnt blend values. Does the blend: dest = src1*(1-blend) 
		 * + src2*blend The FieldData must have enough tuples to hold the new data. 
		 * @param source The field data to combine from. Value cannot be equal to null. 
		 *  
		 * @param idtable Array containing the tuple indices to combine. Value cannot 
		 * be equal to null. 
		 * @param blendtable Array containing the blend weights. Value cannot be equal 
		 * to null. 
		 * @param startId The tuple to begin putting the combinations into. 
		 */
		void IndexedCombine( const spFieldData & source , const spRidArray & idtable , const spRealArray & blendtable , rid startId ) const;

		/**
		 * Works like IndexedCombine(), but with three ids that are combined through two 
		 * blend values in the blendtable. The idtable contains (idtable_cnt*3) indices 
		 * and blendtable contains (idtable_cnt*2) blend values. Does the blend: dest 
		 * = src1*blend1 + src2*blend2 + src3*(1-(blend1+blend2)) The FieldData must have 
		 * enough tuples to hold the new data. 
		 * @param source The field data to combine from. Value cannot be equal to null. 
		 *  
		 * @param idtable Array containing the tuple indices to combine. Value cannot 
		 * be equal to null. 
		 * @param blendtable Array containing the blend weights. Value cannot be equal 
		 * to null. 
		 * @param startId The tuple to begin putting the combinations into. 
		 */
		void IndexedCombine3( const spFieldData & source , const spRidArray & idtable , const spRealArray & blendtable , rid startId ) const;

		/**
		 * Clears all tuples from the fields. The fields, however, are not removed. 
		 */
		void Clear(  ) const;

		/**
		 * Clears all fields from the object. Releases all data in the object. 
		 */
		void RemoveAllFields(  ) const;

		/**
		 * Returns 1 if no tuples exist in the field data. 
		 * @return 1 if empty, else 0 
		 */
		int IsEmpty(  ) const;

		/**
		 * Appends another field data object to this object. The fields are allowed to 
		 * be setup differently, but then comes at a significant performance penalty. 
		 * If fields in the other field data object is missing in this object, these will 
		 * be added, and the items in the old tuples will be set to 0. 
		 * @param other The field data object that is appended. Value cannot be equal 
		 * to null. 
		 * @param add_missing_fields If set to true, missing fields will be added to this 
		 * field data object. 
		 */
		void AppendTuples( const spFieldData & other , bool add_missing_fields ) const;

		/**
		 * Extracts a range of tuples from this object. The receiving object is assumed 
		 * to have exactly the same data fields as this object. 
		 * @param dest The destination object. Value cannot be equal to null. 
		 * @param start The id of the first tuple that is extracted. 
		 * @param count The number of tuples to extract. 
		 */
		void ExtractTuples( const spFieldData & dest , rid start , unsigned int count ) const;

		/**
		 * Adds a field. The field must have a unique name set. 
		 * @param field The array to add to the field data. 
		 */
		void AddField( const spValueArray & field ) const;

		/**
		 * Adds a field based on a base type. Only ValueArray objects are allowed. The 
		 * created and added object is returned. 
		 * @param base_type Should be a base type listed in BaseTypes. 
		 * @param tuple_size The desired tuple size. 
		 * @param name The name of the new field. 
		 * @return A pointer to the new field 
		 */
		spValueArray AddBaseTypeField( Simplygon::EBaseTypes base_type , unsigned int tuple_size , const char * name ) const;

		/**
		 * Retrieves a field. If the field was not found, null is returned. 
		 * @param name The name of the field to fetch. 
		 * @return The field if it exists, otherwise null. 
		 */
		spValueArray GetField( const char * name ) const;

		/**
		 * Retrieves a field from its index in the field data. 
		 * @param id The id of the field. 
		 * @return The field if it exists, otherwise null. 
		 */
		spValueArray GetFieldWithId( rid id ) const;

		/**
		 * Removes a field. Removing a field causes the remaining fields to be remapped 
		 * to new ids. Note that the field must exist. If not, the method will return 
		 * error. To remove a field that may not exist, use SafeRemoveField. 
		 * @param name The name of the field. 
		 */
		void RemoveField( const char * name ) const;

		/**
		 * Removes a field. Removing a field causes the remaining fields to be remapped 
		 * to new ids. 
		 * @param name The name of the field. 
		 */
		void SafeRemoveField( const char * name ) const;

		/**
		 * Returns the number of fields in the field data object. The ids of the fields 
		 * range from 0 through (GetFieldCount()-1). 
		 * @return The number of fields in the field data object. 
		 */
		unsigned int GetFieldCount(  ) const;

		/**
		 * Returns the id of the field with the highest id. NOTE! If no fields exist in 
		 * the field data object, the return is undefined. 
		 * @return The id of the field with the highest id. 
		 */
		rid GetMaxFieldId(  ) const;

		/**
		 * Returns the handle of the first field, or null if no fields are added to the 
		 * object. 
		 * @return The handle of the first field. 
		 */
		rhandle GetFirstFieldHandle(  ) const;

		/**
		 * Returns the next handle, or null if no more fields exist in the object. 
		 * @param hand The current handle. 
		 * @return The handle after the parameter handle. 
		 */
		rhandle GetNextFieldHandle( rhandle hand ) const;

		/**
		 * Returns the field associated with the specified handle. 
		 * @param hand The handle to the requested field. 
		 * @return The requested field 
		 */
		spValueArray GetFieldWithHandle( rhandle hand ) const;

		/**
		 * Resizes/Gets the list to the specified tuple count. If the list is enlarged, 
		 * the new tuples will contain unspecified data. 
		 * @param tuplecount The desired tuple count. Value cannot be less than 0. Value 
		 * cannot be greater than INT_MAX. 
		 */
		void SetTupleCount( unsigned int tuplecount ) const;

		/**
		 * Resizes/Gets the list to the specified tuple count. If the list is enlarged, 
		 * the new tuples will contain unspecified data. 
		 */
		unsigned int GetTupleCount(  ) const;

		/**
		 * Adds a number of tuples to the current tuple count. 
		 * @param tuplecount The desired number of tuples to add. Note that the total 
		 * TupleCount cannot exceed INT_MAX. Value cannot be less than 0. Value cannot 
		 * be greater than INT_MAX. 
		 */
		void AddTupleCount( unsigned int tuplecount ) const;

		/**
		 * Returns the id of the last tuple in the array. If the array is empty, the value 
		 * is undefined. 
		 * @return The id of the last tuple in the array 
		 */
		rid GetMaxTupleId(  ) const;

		/**
		 * CopyTuple() copies one tuple to another. Both the dest_id and the source_id 
		 * must exist in the array. This field data object can be used as the source field 
		 * data object to copy within the object. 
		 * @param source The source field data to copy from. 
		 * @param dest_id The tuple index to copy into in this field data. 
		 * @param src_id The tuple index to copy from in the source field data. 
		 */
		void CopyTuple( const spFieldData & source , rid dest_id , rid src_id ) const;

		/**
		 * CopyCombineTuples() combines the data from two tuples into a destination tuple. 
		 * This field data object can be used as the source field data object to copy 
		 * within the object. 
		 * @param source The field data source to combine from. 
		 * @param dest_id The tuple index to put the combined results into in this field 
		 * data. 
		 * @param src_id_1 The first tuple index to use for combining from the field data 
		 * source. 
		 * @param src_id_2 The second tuple index to use for combining from the field 
		 * data source. 
		 * @param alpha The interpolation value used for combining the source tuples. 
		 *  
		 */
		void CopyCombineTuples( const spFieldData & source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha ) const;

		/**
		 * CopyCombine3Tuples combines the data from three tuples into a destination tuple. 
		 * The call works like CombineTuples, but there is three source tuples, and two 
		 * alpha values. the destination will be weighted by the values: alpha_3 = 1-(alpha_1 
		 * + alpha_2) dest = src_1*alpha_1 + src_2*alpha_2 + src_3*alpha_3 This field 
		 * data object can be used as the source field data object to copy within the 
		 * object. 
		 * @param source The field data source to combine from. 
		 * @param dest_id The tuple index to put the combined results into in this field 
		 * data. 
		 * @param src_id_1 The first tuple index to use for combining from the field data 
		 * source. 
		 * @param src_id_2 The second tuple index to use for combining from the field 
		 * data source. 
		 * @param src_id_3 The third tuple index to use for combining from the field data 
		 * source. 
		 * @param alpha_1 The first interpolation value used for combining the source 
		 * tuples. 
		 * @param alpha_2 The second interpolation value used for combining the source 
		 * tuples. 
		 */
		void CopyCombine3Tuples( const spFieldData & source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 ) const;

		/**
		 * CopyRange() copies a range of tuples from a source field object into this field 
		 * object. The field objects must have the same field setup. This field object 
		 * must be resized to hold the tuples before copying. 
		 * @param source The source field object to copy from. 
		 * @param start_dest_id The first destination tuple id. 
		 * @param start_src_id The first source tuple id. 
		 * @param count The number of tuples to copy. 
		 */
		void CopyRange( const spFieldData & source , rid start_dest_id , rid start_src_id , unsigned int count ) const;

	};

	/**
	 * GeometryData represents a geometric structure consisting of point data (Vertices) 
	 * and topological data (Triangles). GeometryData may represent a whole geometric 
	 * object, but can also be used by streaming data filters, and in this way, only 
	 * represents a part of the object. Different fields in the Vertices and Triangles 
	 * fields data objects will contain point data and topological data. The standard 
	 * naming convention used in the filters/renderers are as follows: (Case sensitive 
	 * naming, other fields may also be present) 'Coords' Positional coordinates of 
	 * a vertex, expressed with a 3-component real field (XYZ). 'TexCoords0' - 'TexCoords255' 
	 *  Texture coordinates of a vertex, expressed with a 2 components real field. 
	 * By convention, the existing fields must be sequential, and must start with 'TexCoord0'. 
	 *  'Normals' Normal vector for the vertex, expressed with a 3-component real field, 
	 * a normalized (XYZ) vector. 'VertexIds' The id of the current vertex in the primitive. 
	 * This field is present even if the vertex data is directly specified in the primitive 
	 * data, to specify topology. The field is of type rid. 'MaterialIds' The material 
	 * of the primitive. The field is of type rid. The 'Coords' and 'VertexIds' fields 
	 * always exist in the object, but the other fields are optional. Also, there can 
	 * exist user fields. 
	 */
	class spGeometryData : public spObject
	{
		public:
		spGeometryData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGeometryData();
		spGeometryData( const spGeometryData &p );
		spGeometryData & operator=( const spGeometryData &p );
		const spGeometryData* operator->() const;
		spGeometryData( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGeometryData is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGeometryData",type)==0) || (strcmp("spGeometryData",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGeometryData 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGeometryData handle 
		 * @return a handle to the spGeometryData object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spGeometryData SafeCast(spObject other);

		/**
		 * Creates another geometry data object with the same field setup. To also copy 
		 * the data to the new object, set copy_data to true. 
		 * @param copy_data If true, copies the data along with the GeometryData properties. 
		 *  
		 * @return The new geometry data object. 
		 */
		spGeometryData NewCopy( bool copy_data ) const;

		/**
		 * Creates a "packed" PackedGeometryData object, where all fields in the Corner 
		 * field data object is moved to the vertex field data object. Please note that 
		 * the vertex field data object will be enlarged to accommodate for data in a 
		 * vertex shared by multiple triangles, where the corner data differs between 
		 * the triangles. The method will fail if a Corner field is named the same as 
		 * an existing Vertices field, please make sure to remove any such field before 
		 * calling the method. 
		 * @return The new PackedGeometryData object. 
		 */
		spPackedGeometryData NewPackedCopy(  ) const;

		/**
		 * Copies the field setup and data from another object into this object. To only 
		 * copy the setup, set copy_data to false. 
		 * @param source The GeometryData object to copy from. 
		 * @param copy_data If true, copies the data along with the GeometryData properties. 
		 *  
		 */
		void DeepCopy( const spGeometryData & source , bool copy_data ) const;

		/**
		 * The number of vertices in the geometry. 
		 * @param count The desired new vertex count. Value cannot be less than 0. Value 
		 * cannot be greater than INT_MAX. 
		 */
		void SetVertexCount( unsigned int count ) const;

		/**
		 * The number of vertices in the geometry. 
		 */
		unsigned int GetVertexCount(  ) const;

		/**
		 * Increases the vertex count by the specified value. 
		 * @param count The number of vertices to add. 
		 */
		void AddVertices( unsigned int count ) const;

		/**
		 * The number of triangles in the geometry. The number of corners is always set 
		 * to (TriangleCount*3), so there is no specific method to set the number of corners. 
		 * @param count The desired new triangle count. Value cannot be less than 0. Value 
		 * cannot be greater than INT_MAX. 
		 */
		void SetTriangleCount( unsigned int count ) const;

		/**
		 * The number of triangles in the geometry. The number of corners is always set 
		 * to (TriangleCount*3), so there is no specific method to set the number of corners. 
		 *  
		 */
		unsigned int GetTriangleCount(  ) const;

		/**
		 * AddTriangles increases the triangle count by the specified value. 
		 * @param count The number of new triangles to add. 
		 */
		void AddTriangles( unsigned int count ) const;

		/**
		 * Each tuple in the "vertex_pairs" array contains the start-vertex and end-vertex 
		 * of a half-edge in the geometry. If a half-edge is found from a tuple in the 
		 * "vertex_pairs" array, the edge-id of that half-edge will be stored in the edge_ids 
		 * array. Do note: the half-edges are directed, so if you want all half-edges 
		 * that contains 2 vertices, you need to add the tuple twice. 
		 * @param vertex_pairs An array with tuplesize 2, which contains start and end-vertex 
		 * of the edges you want to find. 
		 * @param edge_ids Will contain all edge-ids that were found from the vertex-pairs. 
		 * The function will replace all previous data in this array. 
		 */
		void FindEdgeIdsFromVertexPairs( const spRidArray & vertex_pairs , const spRidArray & edge_ids ) const;

		/**
		 * The Coords field in the vertices. (Field name: "Coords", Tuple size: 3 , Stored 
		 * as: Vertex attribute) 
		 * @return The array of coords. 
		 */
		spRealArray GetCoords(  ) const;

		/**
		 * Adds the VertexLocks field for the vertices. If the value for a vertex is true, 
		 * then the vertex should be locked, and not be removed in the collapse-process. 
		 * (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute) 
		 */
		void AddVertexLocks(  ) const;

		/**
		 * Removes the VertexLocks field for the vertices. If the value for a vertex is 
		 * true, then the vertex should be locked, and not be removed in the collapse-process. 
		 * (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute) 
		 */
		void RemoveVertexLocks(  ) const;

		/**
		 * The VertexLocks field for the vertices. If the value for a vertex is true, 
		 * then the vertex should be locked, and not be removed in the collapse-process. 
		 * (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute) 
		 */
		spBoolArray GetVertexLocks(  ) const;

		/**
		 * Adds the BoneWeights and BoneIds fields in the vertices. The BoneWeights and 
		 * BoneIds fields are added and removed in unison, and should always be the same 
		 * tuple size. (Field names: "BoneWeights" & "BoneIds", Tuple size: varying , 
		 * Stored as: Vertex attribute) 
		 * @param tuplesize The number of bones allowed per vertex. 
		 */
		void AddBoneWeights( unsigned int tuplesize ) const;

		/**
		 * Removes the BoneWeights and BoneIds fields in the vertices. The BoneWeights 
		 * and BoneIds fields are added and removed in unison, and should always be the 
		 * same tuple size. (Field names: "BoneWeights" & "BoneIds", Tuple size: varying 
		 * , Stored as: Vertex attribute) 
		 */
		void RemoveBoneWeights(  ) const;

		/**
		 * The BoneWeights field in the vertices. (Field name: "BoneWeights", Tuple size: 
		 * varying , Stored as: Vertex attribute) 
		 * @return The array containing the bone weights 
		 */
		spRealArray GetBoneWeights(  ) const;

		/**
		 * The BoneIds fields in the vertices. (Field name: "BoneIds", Tuple size: varying 
		 * , Stored as: Vertex attribute) 
		 * @return The array containing the bone ids, i.e. the bones per vertex that affects 
		 * them 
		 */
		spRidArray GetBoneIds(  ) const;

		/**
		 * Adds the VertexWeights field for the vertices. The weights are used to determine 
		 * how important it is to keep the vertices when the geometry is reduced. 1 means 
		 * the weight won't change the importance, values closer to 0 means it will be 
		 * less important, values > 1 means the vertex is more important and less probable 
		 * to be removed. (Field name: "VertexWeights", Tuple size: 1 , Stored as: Vertex 
		 * attribute) 
		 */
		void AddVertexWeights(  ) const;

		/**
		 * Removes the VertexWeights field for the vertices. The weights are used to determine 
		 * how important it is to keep the vertices when the geometry is reduced. 1 means 
		 * the weight won't change the importance, values closer to 0 means it will be 
		 * less important, values > 1 means the vertex is more important and less probable 
		 * to be removed. (Field name: "VertexWeights", Tuple size: 1 , Stored as: Vertex 
		 * attribute) 
		 */
		void RemoveVertexWeights(  ) const;

		/**
		 * The VertexWeights field for the vertices. The weights are used to determine 
		 * how important it is to keep the vertices when the geometry is reduced. 1 means 
		 * the weight won't change the importance, values closer to 0 means it will be 
		 * less important, values > 1 means the vertex is more important and less probable 
		 * to be removed. (Field name: "VertexWeights", Tuple size: 1 , Stored as: Vertex 
		 * attribute) 
		 * @return The array of vertex weights 
		 */
		spRealArray GetVertexWeights(  ) const;

		/**
		 * Adds a user-specified vertex field. To be able to add a field, it must have 
		 * a name that does not conflict with the existing vertex fields. 
		 * @param field The field to add to this GeometryData object. 
		 */
		void AddUserVertexField( const spValueArray & field ) const;

		/**
		 * Removes a user-specified vertex field. 
		 * @param name The name of the user vertex field to be removed from the GeometryData 
		 * object. 
		 */
		void RemoveUserVertexField( const char * name ) const;

		/**
		 * Gets a user-specified vertex field. 
		 * @param name The name of the user vertex field to be fetched from the GeometryData 
		 * object. 
		 * @return The requested user-specified vertex field. 
		 */
		spValueArray GetUserVertexField( const char * name ) const;

		/**
		 * Adds a user-specified vertex field. To be able to add a field, it must have 
		 * a name that does not conflict with the existing vertex fields. 
		 * @param base_type The BaseType of the new user field, data types are listed 
		 * in BaseTypes. 
		 * @param name The name of the new user field. 
		 * @param tuple_size The tuple size of the new user field, defaults to 1 if not 
		 * specified. 
		 * @return Pointer to the created array. 
		 */
		spValueArray AddBaseTypeUserVertexField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const;

		/**
		 * Copies all fields in the specified vertex in the source geometry to the destination 
		 * vertex in this geometry. 
		 * @param source The GeometryData object to copy from. 
		 * @param dest_id The vertex id to replace in this GeometryData object. 
		 * @param src_id The id of the vertex to copy. 
		 */
		void CopyVertex( const spGeometryData & source , rid dest_id , rid src_id ) const;

		/**
		 * Combines the fields of two vertices by linear interpolation into the destination 
		 * vertex. 
		 * @param source The GeometryData object to combine from. 
		 * @param dest_id The vertex id to replace in this GeometryData object. 
		 * @param src_id_1 The first vertex id to combine from. 
		 * @param src_id_2 The second vertex id to combine from. 
		 * @param alpha The interpolation value between 0 and 1. 
		 */
		void CopyCombineVertices( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha ) const;

		/**
		 * Combines the fields of three vertices via barycentric coordinates. alpha_3 
		 * = 1-(alpha_1 + alpha_2) dest = src_1*alpha_1 + src_2*alpha_2 + src_3*alpha_3. 
		 * @param source The GeometryData object to combine from. 
		 * @param dest_id The vertex id to replace in this GeometryData object. 
		 * @param src_id_1 The first vertex id to combine from. 
		 * @param src_id_2 The second vertex id to combine from. 
		 * @param src_id_3 The third vertex id to combine from. 
		 * @param alpha_1 The first interpolation value. 
		 * @param alpha_2 The first interpolation value. 
		 */
		void CopyCombine3Vertices( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 ) const;

		/**
		 * Retrieves the IFieldData object that contains the vertex fields. 
		 * @return The vertex fields. 
		 */
		spFieldData GetVertices(  ) const;

		/**
		 * The VertexIds field in the corners. 
		 * @return The VertexIds field. 
		 */
		spRidArray GetVertexIds(  ) const;

		/**
		 * Adds a TexCoords field in the corners. The valid id range of the level parameter 
		 * is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" 
		 * - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute) 
		 * @param level The id of the texture field to add. 
		 */
		void AddTexCoords( rid level ) const;

		/**
		 * Adds a named TexCoords field in the corners. (Field name: "TexCoords0" - "TexCoords255", 
		 * Tuple size: 2 , Stored as: Corner attribute) 
		 * @param alternative_name The name of the texcoord level i.e. 'TexCoord0'. 
		 */
		rid AddNamedTexCoords( const char * alternative_name ) const;

		/**
		 * Removes a TexCoords field in the corners. The valid id range of the level parameter 
		 * is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" 
		 * - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute) 
		 * @param level The id of the texture field to remove. 
		 */
		void RemoveTexCoords( rid level ) const;

		/**
		 * Removes a named TexCoords field in the corners. 'TexCoords0' - 'TexCoords255' 
		 * (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner 
		 * attribute) 
		 * @param alternative_name The name of the texcoord level i.e. 'TexCoord0'. 
		 */
		bool RemoveNamedTexCoords( const char * alternative_name ) const;

		/**
		 * Gets a TexCoords field in the corners. The valid id range of the level parameter 
		 * is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" 
		 * - "TexCoords255", Tuple size: 2 , Stored as: Corner attribute). 
		 * @param level The id of the texture field to get. 
		 * @return The requested field 
		 */
		spRealArray GetTexCoords( rid level ) const;

		/**
		 * Gets a TexCoords field, using the alternative name instead of the index. 
		 * @param alternative_name The alternative name of the field. 
		 * @return The requested field if it was found, or null if not. 
		 */
		spRealArray GetNamedTexCoords( const char * alternative_name ) const;

		/**
		 * Adds Tangents and Bitangents fields in the corners. The valid id range of the 
		 * level parameter is 0-255. (Field names: "Tangents0" - "Tangents255" & "Bitangents0" 
		 * - "Bitangents255", Tuple size: 3 , Stored as: Corner attribute) 
		 * @param level The texture channel. 
		 */
		void AddTangents( rid level ) const;

		/**
		 * Removes Tangents and Bitangents fields in the corners. The valid id range of 
		 * the level parameter is 0-255. (Field names: "Tangents0" - "Tangents255" & "Bitangents0" 
		 * - "Bitangents255", Tuple size: 3 , Stored as: Corner attribute) 
		 * @param level The texture channel. 
		 */
		void RemoveTangents( rid level ) const;

		/**
		 * Gets a Tangents field in the corners. The valid id range of the level parameter 
		 * is 0-255. (Field name: "Tangents0" - "Tangents255", Tuple size: 3 , Stored 
		 * as: Corner attribute) 
		 * @param level The texture channel. 
		 * @return The tangent field for the selected texture channel. 
		 */
		spRealArray GetTangents( rid level ) const;

		/**
		 * Gets a Bitangents field in the corners. The valid id range of the level parameter 
		 * is 0-255. (Field name: "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored 
		 * as: Corner attribute) 
		 * @param level The texture channel. 
		 * @return The bi-tangent field for the selected texture channel. 
		 */
		spRealArray GetBitangents( rid level ) const;

		/**
		 * Adds the Normals field in the corners. (Field name: "Normals" , Tuple size: 
		 * 3 , Stored as: Corner attribute) 
		 */
		void AddNormals(  ) const;

		/**
		 * Removes the Normals field in the corners. (Field name: "Normals" , Tuple size: 
		 * 3 , Stored as: Corner attribute) 
		 */
		void RemoveNormals(  ) const;

		/**
		 * The Normals field in the corners. (Field name: "Normals" , Tuple size: 3 , 
		 * Stored as: Corner attribute) 
		 * @return The normals field 
		 */
		spRealArray GetNormals(  ) const;

		/**
		 * The vertex colors in the input channel from the corners the geometry. The valid 
		 * id range of the channel parameter is 0-255, which equals fields 'Colors0' - 
		 * 'Colors255' (Field name: 'Color0'-'Color255' which is stored as attribute per 
		 * corner) 
		 * @param channel The channel to retrieve the vertex colors for(0-255) 
		 */
		void AddColors( rid channel ) const;

		/**
		 * Adds a named Color field in the corners. (Field name: "Colors0" - "Colors255", 
		 * Tuple size: 4 , Stored as: Corner attribute) 
		 * @param alternative_name The named color channel "Colors0" - "Colors255". 
		 */
		rid AddNamedColors( const char * alternative_name ) const;

		/**
		 * Removes a Color field in the corners. The valid id range of the level parameter 
		 * is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: "Colors0" 
		 * - "Colors255", Tuple size: 4 , Stored as: Corner attribute) 
		 * @param level The color level (0-255) 
		 */
		void RemoveColors( rid level ) const;

		/**
		 * Removes a named Color field in the corners. (Field name: "Colors0" - "Colors255", 
		 * Tuple size: 4 , Stored as: Corner attribute) 
		 * @param alternative_name The named color channel "Colors0" - "Colors255". 
		 */
		bool RemoveNamedColors( const char * alternative_name ) const;

		/**
		 * Gets a Color field in the corners. The valid id range of the level parameter 
		 * is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: "Colors0" 
		 * - "Colors255", Tuple size: 4 , Stored as: Corner attribute) 
		 * @param level The color level (0-255) 
		 * @return The color field 
		 */
		spRealArray GetColors( rid level ) const;

		/**
		 * Gets a Color field, using the alternative name instead of the index. 
		 * @param alternative_name The alternative name of the field. 
		 * @return The requested field, if it was found, or null if not 
		 */
		spRealArray GetNamedColors( const char * alternative_name ) const;

		/**
		 * Adds a user-specified corner field. To be able to add a field, it must have 
		 * a name that does not conflict with the existing corner fields. 
		 * @param field The field to add into the GeometryData object. 
		 */
		void AddUserCornerField( const spValueArray & field ) const;

		/**
		 * Removes a user-specified corner field. 
		 * @param name The name of the field to remove from the GeometryData object. 
		 */
		void RemoveUserCornerField( const char * name ) const;

		/**
		 * Gets a user-specified corner field. 
		 * @param name The name of the field to get. 
		 * @return The requested field 
		 */
		spValueArray GetUserCornerField( const char * name ) const;

		/**
		 * Adds an empty user-specified corner field. 
		 * @param base_type Specifies the base type of the new corner field, data types 
		 * are listed in BaseTypes. 
		 * @param name The name of the field to add. 
		 * @param tuple_size The tuple size of the new field, defaults to 1 if not specified. 
		 *  
		 * @return Pointer to the created field 
		 */
		spValueArray AddBaseTypeUserCornerField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const;

		/**
		 * Copies all fields in the specified corner in the source geometry to the destination 
		 * corner in this geometry . 
		 * @param source The GeometryData object to copy from. 
		 * @param dest_id The vertex id to replace in this GeometryData object. 
		 * @param src_id The id of the vertex to copy. 
		 */
		void CopyCorner( const spGeometryData & source , rid dest_id , rid src_id ) const;

		/**
		 * Combines the fields of two corners by linear interpolation into the destination 
		 * corner. 
		 * @param source The GeometryData object to combine from. 
		 * @param dest_id The corner id to replace in this GeometryData object. 
		 * @param src_id_1 The first corner id to combine from. 
		 * @param src_id_2 The second corner id to combine from. 
		 * @param alpha The interpolation value between 0 and 1. 
		 */
		void CopyCombineCorners( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha ) const;

		/**
		 * Combines three corners via barycentric coordinates. alpha_3 = 1-(alpha_1 + 
		 * alpha_2) dest = src_1*alpha_1 + src_2*alpha_2 + src_3*alpha_3. 
		 * @param source The GeometryData object to combine from. 
		 * @param dest_id The corner id to replace in this GeometryData object. 
		 * @param src_id_1 The first corner id to combine from. 
		 * @param src_id_2 The second corner id to combine from. 
		 * @param src_id_3 The third corner id to combine from. 
		 * @param alpha_1 The first interpolation value. 
		 * @param alpha_2 The second interpolation value. 
		 */
		void CopyCombine3Corners( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 ) const;

		/**
		 * Retrieves the IFieldData object that contains the corner fields. 
		 * @return The corner IFieldData 
		 */
		spFieldData GetCorners(  ) const;

		/**
		 * Adds the MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple 
		 * size: 1 , Stored as: triangle attribute) 
		 */
		void AddMaterialIds(  ) const;

		/**
		 * Removes the MaterialIds field in the triangles. (Field name: "MaterialIds", 
		 * Tuple size: 1 , Stored as: triangle attribute) 
		 */
		void RemoveMaterialIds(  ) const;

		/**
		 * The MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple size: 
		 * 1 , Stored as: triangle attribute) 
		 * @return The MaterialIds field 
		 */
		spRidArray GetMaterialIds(  ) const;

		/**
		 * Adds the GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 
		 * 1 , Stored as: triangle attribute) 
		 */
		void AddGroupIds(  ) const;

		/**
		 * Removes the GroupIds field in the triangles. (Field name: "GroupIds", Tuple 
		 * size: 1 , Stored as: triangle attribute) 
		 */
		void RemoveGroupIds(  ) const;

		/**
		 * The GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 1 
		 * , Stored as: triangle attribute) 
		 */
		spRidArray GetGroupIds(  ) const;

		/**
		 * Adds a user-specified triangle field. To be able to add a field, it must have 
		 * a name that does not conflict with the existing triangle fields. 
		 * @param field The triangle field to add to the GeometryData object. 
		 */
		void AddUserTriangleField( const spValueArray & field ) const;

		/**
		 * Removes a user-specified triangle field. 
		 * @param name The name of the triangle field to remove from the GeometryData 
		 * object. 
		 */
		void RemoveUserTriangleField( const char * name ) const;

		/**
		 * Gets a user-specified triangle field. 
		 * @param name The name of the triangle field to get from the GeometryData object. 
		 *  
		 * @return The requested triangle field 
		 */
		spValueArray GetUserTriangleField( const char * name ) const;

		/**
		 * Adds an empty user-specified triangle field. 
		 * @param base_type The base_type of the new user triangle field, data types are 
		 * listed in BaseTypes. 
		 * @param name The name of the triangle field to add to the GeometryData object. 
		 *  
		 * @param tuple_size The tuple size of the new field, deafaults to 1 if not specified. 
		 *  
		 * @return Pointer to the newly created triangle field 
		 */
		spValueArray AddBaseTypeUserTriangleField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const;

		/**
		 * Copies all fields in the specified triangle in the source geometry to the destination 
		 * triangle in this geometry. 
		 * @param source The GeometryData object to copy from. 
		 * @param dest_id The triangle id to replace in this GeometryData object. 
		 * @param src_id The id of the triangle to copy. 
		 */
		void CopyTriangle( const spGeometryData & source , rid dest_id , rid src_id ) const;

		/**
		 * Combines the fields of two triangles by linear interpolation into the destination 
		 * triangle. 
		 * @param source The GeometryData object to combine from. 
		 * @param dest_id The triangle id to replace in this GeometryData object. 
		 * @param src_id_1 The first triangle id to combine from. 
		 * @param src_id_2 The second triangle id to combine from. 
		 * @param alpha The interpolation value between 0 and 1. 
		 */
		void CopyCombineTriangles( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha ) const;

		/**
		 * Combines the fields of three triangles via barycentric coordinates. alpha_3 
		 * = 1-(alpha_1 + alpha_2) dest = src_1*alpha_1 + src_2*alpha_2 + src_3*alpha_3. 
		 * @param source The GeometryData object to combine from. 
		 * @param dest_id The triangle id to replace in this GeometryData object. 
		 * @param src_id_1 The first triangle id to combine from. 
		 * @param src_id_2 The second triangle id to combine from. 
		 * @param src_id_3 The third triangle id to combine from. 
		 * @param alpha_1 The first interpolation value. 
		 * @param alpha_2 The second interpolation value. 
		 */
		void CopyCombine3Triangles( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 ) const;

		/**
		 * Retrieves the IFieldData object that contains the triangle fields. 
		 * @return The triangle field data object. 
		 */
		spFieldData GetTriangles(  ) const;

		/**
		 * Adds a custom field. To be able to add a field, it must have a name that does 
		 * not conflict with the existing custom fields. 
		 * @param field The custom field to add to the GeometryData object. 
		 */
		void AddCustomField( const spValueArray & field ) const;

		/**
		 * Removes a custom field. 
		 * @param name The name of the custom field to remove from the GeometryData object. 
		 *  
		 */
		void RemoveCustomField( const char * name ) const;

		/**
		 * Gets a custom field. 
		 * @param name The name of the custom field to get from the GeometryData object. 
		 *  
		 * @return The requested custom field 
		 */
		spValueArray GetCustomField( const char * name ) const;

		/**
		 * Adds an empty custom field. To be able to add a field, it must have a name 
		 * that does not conflict with the existing custom fields. 
		 * @param base_type The base_type of the new custom field, data types are listed 
		 * in BaseTypes. 
		 * @param name The name of the new custom field. 
		 * @param tuple_size The tuple size of the new custom field, defaults to 1 if 
		 * not specified. 
		 * @return Pointer to the created field 
		 */
		spValueArray AddBaseTypeCustomField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const;

		/**
		 * Finds all Nan (1.#IND, 1.#INF etc) values in the real/float/double arrays in 
		 * the GeometryData, and sets them to 0.0 just to make sure all numbers in the 
		 * GeometryData are legit. Should not be needed if all the data loaded into the 
		 * GeometryData object is ok to begin with. 
		 */
		void CleanupNanValues(  ) const;

		/**
		 * Finds triangles that contain the same vertex more than once, and invalidates 
		 * them, ie. sets all the vertex id references to -1. These triangles can be culled 
		 * using Compact(). 
		 */
		void CleanupInvalidTriangles(  ) const;

		/**
		 * Returns the level index of the texcoord field with the name returns -1 if not 
		 * found. 
		 * @param field_name The named TexCoord field to be fetched. 
		 * @return The index of the field 
		 */
		rid FindNamedTexCoordsIndex( const char * field_name ) const;

		/**
		 * Returns the level index of the colors field with the name returns -1 if not 
		 * found. 
		 * @param field_name The named Colors field to be fetched. 
		 * @return The index of the field 
		 */
		rid FindNamedColorsIndex( const char * field_name ) const;

		/**
		 * Returns an axis aligned bounding box GeometryData of this geometry. 
		 * @return The AABB GeometryData 
		 */
		spGeometryData CreateAABB(  ) const;

		/**
		 * Expands the Vertices field data so that there exists one vertex for each of 
		 * the three corners of each triangle in the geometry. The vertices will be organized 
		 * identical to the Corners field. The triangles will be remapped to use the new 
		 * vertices correctly. Expanding the vertex field is required to be able to extract 
		 * a range of the geometry, and to be able to stream it. Note! This will lead 
		 * to increased memory requirement, as vertex data is not shared among neighboring 
		 * triangles. It also removes the connectivity information of the triangles, and 
		 * effectively detaches all triangles from one another. This call may replace 
		 * fields in the Vertices field data. Re-query any previously cached field pointer 
		 * after the call. All user fields are copied as well. 
		 */
		void ExpandVertices(  ) const;

		/**
		 * Extracts a range of triangles with their vertices from the geometry. ExpandVertices() 
		 * must first be called for the extraction to succeed. ExtractGeometry() can be 
		 * used to stream geometries in chunks. If writing to a stream, the extracted 
		 * geometry is guaranteed to have the same setup as the original. Any previous 
		 * data in the destination will be deleted. 
		 * @param dest The GeometryData object that is written to. 
		 * @param start_tri_id The first triangle to be extracted. 
		 * @param count The number of triangles to extract. 
		 */
		void ExtractRange( const spGeometryData & dest , rid start_tri_id , unsigned int count ) const;

		/**
		 * Extracts specified triangles from the geometry. The destination geometry will 
		 * contain the triangles and vertices. The vertices in the destination will be 
		 * expanded so that there exists one vertex for each of the three corners of each 
		 * triangle in the geometry. 
		 * @param dest The GeometryData object that is written to. 
		 * @param triangle_ids The list of triangles indices to extract. 
		 */
		void ExtractTriangles( const spGeometryData & dest , const spRidArray & triangle_ids ) const;

		/**
		 * Appends the geometry data to this geometry. This geometry will contain all 
		 * triangles and vertices of both geometries. The VertexIds that are copied from 
		 * the source are remapped to point at the vertices, which are appended to the 
		 * end of the current vertices. Any field in the appended geometry that does not 
		 * exist in this geometry will be added, with the tuples that are added set to 
		 * 0. The method will fail if the source geometry has identically named fields, 
		 * but with different tuple sizes or base types. 
		 * @param source The source geometry that will be appended to this geometry. the 
		 * contents of source will not be modified. 
		 */
		void AppendGeometry( const spGeometryData & source ) const;

		/**
		 * Removes invalid triangles and vertices not referenced by any triangle. If any 
		 * vertices are removed, the triangles will be remapped to the new compacted vertex 
		 * field. 
		 * @param only_compact_triangles If true, no vertices will be removed. 
		 */
		void Compact( bool only_compact_triangles ) const;

		/**
		 * Welds all vertices in the geometry that are closer than the welding threshold. 
		 * Non-referenced vertices will not be removed, only the vertex indices will be 
		 * remapped. Call Compact() to clean up the geometry and free up memory. 
		 * @param threshold The welding threshold distance. 
		 */
		void Weld( real threshold ) const;

		/**
		 * The inferior (minimum) extent of the geometry. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetInf(  ) const;

		/**
		 * The inferior (minimum) extent of the geometry. 
		 * @param vec_realInputDataPtr The new inferior. 
		 */
		void SetInf( const real *vec_realInputDataPtr ) const;

		/**
		 * The superior (maximum) extent of the geometry. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetSup(  ) const;

		/**
		 * The superior (maximum) extent of the geometry. 
		 * @param vec_realInputDataPtr The new superior. 
		 */
		void SetSup( const real *vec_realInputDataPtr ) const;

		/**
		 * Calculate the extents by checking the coordinates of all vertices in the geometry. 
		 * Set only_triangles to true to test only vertices that are indexed by a triangle. 
		 * This is a slower test, and the bounding box may not encompass all vertices' 
		 * positions. the new extents are found by calling GetInf() and GetSup() afterwards. 
		 * @param only_triangles True if only vertices indexed by triangles should be 
		 * checked, defaults to false if not specified. 
		 */
		void CalculateExtents( bool only_triangles ) const;

		/**
		 * Tests if the extents of the geometry fully contain all vertex coordinates. 
		 * Note! ExtentsContainCoords() checks all vertices in the geometry, regardless 
		 * to whether the vertex is referenced by any triangle. Use Compact() to remove 
		 * any non-referenced vertex before calling ExtentsContainCoords. 
		 * @return True if geometry fully contain all vertex coordinates 
		 */
		bool ExtentsContainCoords(  ) const;

		/**
		 * Transforms the geometry using the supplied matrix transformation. The fields 
		 * that are modified are the Coords field of Vertices, as well as the Normals 
		 * and all Tangent and Bi-tangent fields of the Corners. 
		 * @param transformation The 4x4 transformation as a IMatrix4x4. 
		 */
		void Transform( const spMatrix4x4 & transformation ) const;

		/**
		 * Detect triangle edge neighbors. Neighbor ids are stored in the "SgEdgeNeighbours" 
		 * Corner field. 
		 */
		void DetectEdgeNeighbours(  ) const;

		/**
		 * Converts the handedness of the triangle winding, coords, normals and texture 
		 * coordinates of the geometry from left-handed to right-handed coordinate systems 
		 * and vice versa. Simplygon generally uses right-handed coordinates, so this 
		 * conversion needs to be done before processing any left-handed geometry. 
		 */
		void ConvertHandedness(  ) const;

		/**
		 * Change winding. 
		 */
		void ChangeWinding(  ) const;

	};

	/**
	 * PackedGeometryData keeps the same information as GeometryData, but with all 
	 * corner data fields moved into per-vertex fields. No per-corner fields exist, 
	 * apart from the VertexIds field. Please note that the number of vertices in an 
	 * PackedGeometryData is commonly higher than in an GeometryData, as vertices must 
	 * be split to accommodate for different corner data. 
	 */
	class spPackedGeometryData : public spObject
	{
		public:
		spPackedGeometryData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spPackedGeometryData();
		spPackedGeometryData( const spPackedGeometryData &p );
		spPackedGeometryData & operator=( const spPackedGeometryData &p );
		const spPackedGeometryData* operator->() const;
		spPackedGeometryData( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spPackedGeometryData is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IPackedGeometryData",type)==0) || (strcmp("spPackedGeometryData",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spPackedGeometryData 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spPackedGeometryData handle 
		 * @return a handle to the spPackedGeometryData object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spPackedGeometryData SafeCast(spObject other);

		/**
		 * Creates another geometry data object with the same field setup. To also copy 
		 * the data to the new object, set copy_data to true. 
		 * @param copy_data Determines if the data is included in the new copy. 
		 * @return The new packed geometry data object. 
		 */
		spPackedGeometryData NewCopy( bool copy_data ) const;

		/**
		 * Creates an "unpacked" GeometryData object. Please note that since the data 
		 * in the PackedGeometryData structure is per-vertex, you may have to weld the 
		 * resulting GeometryData to remove vertices with the same spatial coordinates. 
		 * @return The new unpacked geometry data object. 
		 */
		spGeometryData NewUnpackedCopy(  ) const;

		/**
		 * Copies the field setup and data from another object. To only copy the setup, 
		 * set copy_data to false. 
		 * @param source The source from which the data will be copied. 
		 * @param copy_data The bool determining whether to copy the data or just the 
		 * field setup. 
		 */
		void DeepCopy( const spPackedGeometryData & source , bool copy_data ) const;

		/**
		 * Appends all vertex-tuples in "source" that don't already exists in the current 
		 * GeometryData. For each vertex field in this PackedGeometryData, the "source" 
		 * must contain a corresponding vertex or corner field. All extra-fields in "source" 
		 * will be skipped however. Returns the number of new and unique vertices created, 
		 * and the NewVertexIds will contain the indices for the triangles of the "source" 
		 * Geometry. The VertexIds of the current GeometryData will still be valid. If 
		 * collapseToOriginalVertices is set to true, all vertices from source will be 
		 * collapsed to the closest matching vertex of the current geometry. This means 
		 * that no new vertices will be added, so the returned value will always be 0. 
		 * If the "NewVertexIds"-array is not initiated before send into this function, 
		 * it will do nothing and return -1 instead, as error value. The method does not 
		 * append triangle ids or triangle field data from "source" to the current object. 
		 * @param source The geometry from which to append. 
		 * @param NewVertexIds Will be written to and contain the indices for the appended 
		 * geometries triangles. 
		 * @param collapseToOriginalVertices Will determine if the appended vertices are 
		 * collapsed to existing ones or not. 
		 * @return The number of unique verts added to the packed geometry 
		 */
		int AppendPackedGeometry( const spGeometryData & source , const spRidArray & NewVertexIds , bool collapseToOriginalVertices ) const;

		/**
		 * The number of vertices in the geometry. 
		 * @param count The new vertexcount. Value cannot be less than 0. Value cannot 
		 * be greater than INT_MAX. 
		 */
		void SetVertexCount( unsigned int count ) const;

		/**
		 * The number of vertices in the geometry. 
		 */
		unsigned int GetVertexCount(  ) const;

		/**
		 * AddVertices increases the vertex count by the specified value. 
		 * @param count The number of vertices to add. 
		 */
		void AddVertices( unsigned int count ) const;

		/**
		 * The number of triangles in the geometry. 
		 * @param count The number of triangles to add. Value cannot be less than 0. Value 
		 * cannot be greater than INT_MAX. 
		 */
		void SetTriangleCount( unsigned int count ) const;

		/**
		 * The number of triangles in the geometry. 
		 */
		unsigned int GetTriangleCount(  ) const;

		/**
		 * Increases the triangle count by the specified value. 
		 * @param count The number of triangles to add. 
		 * @return The current triangle count 
		 */
		void AddTriangles( unsigned int count ) const;

		/**
		 * The Coords field in the vertices. (Field name: "Coords", Tuple size: 3 , Stored 
		 * as: Vertex attribute) 
		 * @return The vertex coords array 
		 */
		spRealArray GetCoords(  ) const;

		/**
		 * Adds the VertexLocks field for the vertices. If the value for a vertex is true, 
		 * then the vertex should be locked, and not be removed in the collapse-process. 
		 * (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute) 
		 */
		void AddVertexLocks(  ) const;

		/**
		 * Removes the VertexLocks field for the vertices. If the value for a vertex is 
		 * true, then the vertex should be locked, and not be removed in the collapse-process. 
		 * (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute) 
		 */
		void RemoveVertexLocks(  ) const;

		/**
		 * The VertexLocks field for the vertices. If the value for a vertex is true, 
		 * then the vertex should be locked, and not be removed in the collapse-process. 
		 * (Field name: "VertexLocks", Tuple size: 1 , Stored as: Vertex attribute) 
		 * @return an array containing the vertex lock bools 
		 */
		spBoolArray GetVertexLocks(  ) const;

		/**
		 * Adds the BoneWeights and BoneIds fields in the vertices. The BoneWeights and 
		 * BoneIds fields are added and removed in unison, and should always be the same 
		 * tuple size. (Field names: "BoneWeights" & "BoneIds", Tuple size: varying , 
		 * Stored as: Vertex attribute) 
		 * @param tuplesize The size of the tuples in the new bone weight and bone id 
		 * field. 
		 */
		void AddBoneWeights( unsigned int tuplesize ) const;

		/**
		 * Removes the BoneWeights and BoneIds fields in the vertices. The BoneWeights 
		 * and BoneIds fields are added and removed in unison, and should always be the 
		 * same tuple size. (Field names: "BoneWeights" & "BoneIds", Tuple size: varying 
		 * , Stored as: Vertex attribute) 
		 */
		void RemoveBoneWeights(  ) const;

		/**
		 * The BoneWeights field. (Field name: "BoneWeights", Tuple size: varying , Stored 
		 * as: Vertex attribute) 
		 * @return The bone weights array 
		 */
		spRealArray GetBoneWeights(  ) const;

		/**
		 * The BoneIds field. (Field name: "BoneIds", Tuple size: varying , Stored as: 
		 * Vertex attribute) 
		 * @return The bone id array 
		 */
		spRidArray GetBoneIds(  ) const;

		/**
		 * Adds the VertexWeighting field for the vertices. (Field name: "VertexWeights", 
		 * Tuple size: 1 , Stored as: Vertex attribute) 
		 */
		void AddVertexWeighting(  ) const;

		/**
		 * Removes the VertexWeighting field for the vertices. (Field name: "VertexWeights", 
		 * Tuple size: 1 , Stored as: Vertex attribute) 
		 */
		void RemoveVertexWeighting(  ) const;

		/**
		 * The VertexWeighting field for the vertices. (Field name: "VertexWeights", Tuple 
		 * size: 1 , Stored as: Vertex attribute) 
		 * @return The vertex weighting array 
		 */
		spRealArray GetVertexWeighting(  ) const;

		/**
		 * Adds the VertexWeights field for the vertices. (Field name: "VertexWeights", 
		 * Tuple size: 1 , Stored as: Vertex attribute) 
		 */
		void AddVertexWeights(  ) const;

		/**
		 * Removes the VertexWeights field for the vertices. (Field name: "VertexWeights", 
		 * Tuple size: 1 , Stored as: Vertex attribute) 
		 */
		void RemoveVertexWeights(  ) const;

		/**
		 * The VertexWeights field for the vertices. (Field name: "VertexWeights", Tuple 
		 * size: 1 , Stored as: Vertex attribute) 
		 * @return The vertex weighting array 
		 */
		spRealArray GetVertexWeights(  ) const;

		/**
		 * Adds a TexCoords field in the vertices. The valid id range of the level parameter 
		 * is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" 
		 * - "TexCoords255", Tuple size: 2 , Stored as: Vertex attribute) 
		 * @param level The level of the new texcoord field. 
		 */
		void AddTexCoords( rid level ) const;

		/**
		 * Adds a named TexCoords field in the corners. (Field name: "TexCoords0" - "TexCoords255", 
		 * Tuple size: 2 , Stored as: Corner attribute) 
		 * @param alternative_name The name of the texcoord level i.e. 'TexCoord0'. 
		 */
		rid AddNamedTexCoords( const char * alternative_name ) const;

		/**
		 * Removes a TexCoords field in the vertices. The valid id range of the level 
		 * parameter is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field 
		 * name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Vertex attribute) 
		 * @param level The level of the texcoord field to remove. 
		 */
		void RemoveTexCoords( rid level ) const;

		/**
		 * Removes a named TexCoords field in the corners. 'TexCoords0' - 'TexCoords255' 
		 * (Field name: "TexCoords0" - "TexCoords255", Tuple size: 2 , Stored as: Corner 
		 * attribute) 
		 * @param alternative_name The name of the texcoord level i.e. 'TexCoord0'. 
		 */
		bool RemoveNamedTexCoords( const char * alternative_name ) const;

		/**
		 * Gets a TexCoords field in the vertices. The valid id range of the level parameter 
		 * is 0-255, which equals fields 'TexCoords0' - 'TexCoords255' (Field name: "TexCoords0" 
		 * - "TexCoords255", Tuple size: 2 , Stored as: Vertex attribute) 
		 * @param level The level of the texcoord field to get. 
		 * @return The texcoord array for the requested level 
		 */
		spRealArray GetTexCoords( rid level ) const;

		/**
		 * Gets a TexCoords field, using the alternative name instead of the index. 
		 * @param alternative_name The alternative name of the field. 
		 * @return The requested field, if it was found, or null if not 
		 */
		spRealArray GetNamedTexCoords( const char * alternative_name ) const;

		/**
		 * Adds a Tangents field in the vertices. (Field name: "Tangents0" - "Tangents255" 
		 * & "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored as: Vertex attribute) 
		 * @param level The level of the new tangent fields. 
		 */
		void AddTangents( rid level ) const;

		/**
		 * Removes a Tangents field in the vertices. (Field name: "Tangents0" - "Tangents255" 
		 * & "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored as: Vertex attribute) 
		 * @param level The level of the tangent fields to remove. 
		 */
		void RemoveTangents( rid level ) const;

		/**
		 * Gets a Tangents field in the vertices. (Field name: "Tangents0" - "Tangents255" 
		 * & "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored as: Vertex attribute) 
		 * @param level The level of the tangent field to get. 
		 * @return The tangent array for the requested level 
		 */
		spRealArray GetTangents( rid level ) const;

		/**
		 * Gets a Bitangents field in the vertices. (Field name: "Tangents0" - "Tangents255" 
		 * & "Bitangents0" - "Bitangents255", Tuple size: 3 , Stored as: Vertex attribute) 
		 * @param level The level of the bitangent field to get. 
		 * @return The bitangent array for the requested level 
		 */
		spRealArray GetBitangents( rid level ) const;

		/**
		 * Adds the Normals field in the vertices. (Field name: "Normals" , Tuple size: 
		 * 3 , Stored as: Vertex attribute) 
		 */
		void AddNormals(  ) const;

		/**
		 * Removes the Normals field in the vertices. (Field name: "Normals" , Tuple size: 
		 * 3 , Stored as: Vertex attribute) 
		 */
		void RemoveNormals(  ) const;

		/**
		 * The Normals field in the vertices. (Field name: "Normals" , Tuple size: 3 , 
		 * Stored as: Vertex attribute) 
		 * @return The normals array 
		 */
		spRealArray GetNormals(  ) const;

		/**
		 * Adds a Color field in the vertices. The valid id range of the level parameter 
		 * is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: "Colors0" 
		 * - "Colors255", Tuple size: 4 , Stored as: Vertex attribute) 
		 * @param level The level of the Color field to add. 
		 */
		void AddColors( rid level ) const;

		/**
		 * Adds a named Color field in the corners. (Field name: "Colors0" - "Colors255", 
		 * Tuple size: 4 , Stored as: Corner attribute) 
		 * @param alternative_name The named color channel "Colors0" - "Colors255". 
		 */
		rid AddNamedColors( const char * alternative_name ) const;

		/**
		 * Removes a Color field in the vertices. The valid id range of the level parameter 
		 * is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: "Colors0" 
		 * - "Colors255", Tuple size: 4 , Stored as: Vertex attribute) 
		 * @param level The level of the Color field to remove. 
		 */
		void RemoveColors( rid level ) const;

		/**
		 * Removes a named Color field in the corners. (Field name: "Colors0" - "Colors255", 
		 * Tuple size: 4 , Stored as: Corner attribute) 
		 * @param alternative_name The named color channel "Colors0" - "Colors255". 
		 */
		bool RemoveNamedColors( const char * alternative_name ) const;

		/**
		 * Gets a Color field in the vertices. The valid id range of the level parameter 
		 * is 0-255, which equals fields 'Colors0' - 'Colors255' (Field name: "Colors0" 
		 * - "Colors255", Tuple size: 4 , Stored as: Vertex attribute) 
		 * @param level The level of the Colors field to get. 
		 * @return The colors array 
		 */
		spRealArray GetColors( rid level ) const;

		/**
		 * Gets a Color field, using the alternative name instead of the index. 
		 * @param alternative_name The alternative name of the field. 
		 * @return The requested field, if it was found, or null if not 
		 */
		spRealArray GetNamedColors( const char * alternative_name ) const;

		/**
		 * Adds a user-specified vertex field from an already populated value array. To 
		 * be able to add a field, it must have a name that does not conflict with the 
		 * existing vertex fields. 
		 * @param field The field that is to be added. 
		 */
		void AddUserVertexField( const spValueArray & field ) const;

		/**
		 * Removes a user-specified vertex field. 
		 * @param name The name of the field that is to be removed. 
		 */
		void RemoveUserVertexField( const char * name ) const;

		/**
		 * Gets a user-specified vertex field. 
		 * @param name The name of the field to be fetched. 
		 * @return The matching field, or null if no such field exists 
		 */
		spValueArray GetUserVertexField( const char * name ) const;

		/**
		 * Adds an empty user-specified vertex field. To be able to add a field, it must 
		 * have a name that does not conflict with the existing vertex fields. 
		 * @param base_type The type of data in the field, the alternatives can be found 
		 * in BaseTypes. 
		 * @param name The name of the new field. 
		 * @param tuple_size The tuple size of the new field. 
		 * @return The newly added field 
		 */
		spValueArray AddBaseTypeUserVertexField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const;

		/**
		 * Retrieves the FieldData object that contains the vertex fields. 
		 * @return The vertex fields data 
		 */
		spFieldData GetVertices(  ) const;

		/**
		 * The VertexIds field in the triangles. 
		 * @return The vertex ids array 
		 */
		spRidArray GetVertexIds(  ) const;

		/**
		 * Adds the MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple 
		 * size: 1 , Stored as: triangle attribute) 
		 */
		void AddMaterialIds(  ) const;

		/**
		 * Removes the MaterialIds field in the triangles. (Field name: "MaterialIds", 
		 * Tuple size: 1 , Stored as: triangle attribute) 
		 */
		void RemoveMaterialIds(  ) const;

		/**
		 * The MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple size: 
		 * 1 , Stored as: triangle attribute) 
		 * @return The material ids array 
		 */
		spRidArray GetMaterialIds(  ) const;

		/**
		 * Adds the GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 
		 * 1 , Stored as: triangle attribute) 
		 */
		void AddGroupIds(  ) const;

		/**
		 * Removes the GroupIds field in the triangles. (Field name: "GroupIds", Tuple 
		 * size: 1 , Stored as: triangle attribute) 
		 */
		void RemoveGroupIds(  ) const;

		/**
		 * The GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 1 
		 * , Stored as: triangle attribute) 
		 * @return The material ids array 
		 */
		spRidArray GetGroupIds(  ) const;

		/**
		 * Adds a user-specified triangle field from an already populated array. To be 
		 * able to add a field, it must have a name that does not conflict with the existing 
		 * triangle fields. 
		 * @param field The array that is to be added. 
		 */
		void AddUserTriangleField( const spValueArray & field ) const;

		/**
		 * Removes a user-specified triangle field. To be able to add a field, it must 
		 * have a name that does not conflict with the existing triangle fields. 
		 * @param name Name of the field to be removed. 
		 */
		void RemoveUserTriangleField( const char * name ) const;

		/**
		 * Gets a user-specified triangle field. To be able to add a field, it must have 
		 * a name that does not conflict with the existing triangle fields. 
		 * @param name Name of the field to be fetched. 
		 */
		spValueArray GetUserTriangleField( const char * name ) const;

		/**
		 * Adds an empty user-specified triangle field. To be able to add a field, it 
		 * must have a name that does not conflict with the existing triangle fields. 
		 * @param base_type The type of data in the field, the alternatives can be found 
		 * in BaseTypes. 
		 * @param name The name of the new field. 
		 * @param tuple_size The tuple size of the new field. 
		 * @return The newly added field 
		 */
		spValueArray AddBaseTypeUserTriangleField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const;

		/**
		 * Retrieves the ReFieldData object that contains the triangle fields. 
		 * @return The triangle fields data 
		 */
		spFieldData GetTriangles(  ) const;

		/**
		 * The inferior (minimum) extent of the geometry. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetInf(  ) const;

		/**
		 * The inferior (minimum) extent of the geometry. 
		 * @param vec_realInputDataPtr The desired values that the minimum extent of the 
		 * geometry is to be set to. 
		 */
		void SetInf( const real *vec_realInputDataPtr ) const;

		/**
		 * The superior (maximum) extent of the geometry. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetSup(  ) const;

		/**
		 * The superior (maximum) extent of the geometry. 
		 * @param vec_realInputDataPtr The desired values that the maximum extent of the 
		 * geometry is to be set to. 
		 */
		void SetSup( const real *vec_realInputDataPtr ) const;

	};

	/**
	 * ImageData holds unpacked image data. The data is stored in an FieldData object 
	 * as value fields. For simplicity all images are implemented as 3D images, but 
	 * has an extent of 1 in Z for 2D images, and an extent of 1 in both Y and Z for 
	 * 1D images. Cube maps are stored as a 3D image with Z-depth of 6 (one for each 
	 * side) 
	 */
	class spImageData : public spObject
	{
		public:
		spImageData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spImageData();
		spImageData( const spImageData &p );
		spImageData & operator=( const spImageData &p );
		const spImageData* operator->() const;
		spImageData( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spImageData is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IImageData",type)==0) || (strcmp("spImageData",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spImageData 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spImageData handle 
		 * @return a handle to the spImageData object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spImageData SafeCast(spObject other);

		/**
		 * Creates another image data object with the same field setup. To also copy the 
		 * data to the new object, set copy_data to true. 
		 * @param copy_data If true, all data is copied. 
		 * @return The new copy of the image data object. 
		 */
		spImageData NewCopy( bool copy_data ) const;

		/**
		 * Copies the field setup and data from another object. To only copy the setup, 
		 * set copy_data to false. 
		 * @param source The IImageData object to copy from. 
		 * @param copy_data True if the data should be copied along with the image data 
		 * properties. 
		 */
		void DeepCopy( const spImageData & source , bool copy_data ) const;

		/**
		 * Adds the Colors field. 
		 * @param valuetype The type used to store the tuples. Use TYPES_ID_UCHAR base 
		 * type for 8-bit per channel data, and TYPES_ID_USHORT base type for 16-bit per 
		 * channel data. 
		 * @param format A string that describes the format of the color field. Each character 
		 * in format represents a color channel in the color tuple. All characters in 
		 * the format string must be unique and uppercase. Normal values for format are: 
		 * RGB, RGBA, YUV, HLS, CMYK, L and R. In these examples the tuplesize of the 
		 * formats will be 3,4,3,3,4,1 and 1, respectively. The format string must be 
		 * at least one character long. Use the SG_IMAGEDATA_FORMAT_[] defines to define 
		 * the standard types. 
		 */
		void AddColors( Simplygon::EBaseTypes valuetype , const char * format ) const;

		/**
		 * Removes the Colors field. 
		 */
		void RemoveColors(  ) const;

		/**
		 * The Colors field. 
		 * @return The value array used by the colors field. 
		 */
		spValueArray GetColors(  ) const;

		/**
		 * The base type used by the colors field. 
		 * @return The base type used by the colors field. 
		 */
		Simplygon::EBaseTypes GetColorsValueType(  ) const;

		/**
		 * Checks if the image has a color field. 
		 * @return True if the image has a color field 
		 */
		bool HasColors(  ) const;

		/**
		 * The color field format specification. 
		 * @return The format specification string 
		 */
		spString GetColorsFormat(  ) const;

		/**
		 * Adds a field. The field must have a name that does not conflict with any of 
		 * the existing field names. The field is referenced by the image after the call 
		 * to AddField() 
		 * @param name The name of the field to add. 
		 * @param valuetype The type of the field, types listed in BaseTypes. 
		 * @param tuplesize The size of tuples in the new field. 
		 */
		void AddField( const char * name , Simplygon::EBaseTypes valuetype , unsigned int tuplesize ) const;

		/**
		 * Removes a field. 
		 * @param name The name of the field to remove. 
		 */
		void RemoveField( const char * name ) const;

		/**
		 * Gets a field. 
		 * @param name The name of the field to get. 
		 * @return The requested field 
		 */
		spValueArray GetField( const char * name ) const;

		/**
		 * Gets the value type of a field. 
		 * @param name The name of the field whose type to get, types listed in BaseTypes. 
		 *  
		 * @return The base type of the field 
		 */
		Simplygon::EBaseTypes GetFieldValueType( const char * name ) const;

		/**
		 * Check if a field exists in the IImageData object. 
		 * @param name The name of the field to check for. 
		 * @return True if field exists, otherwise false 
		 */
		bool HasField( const char * name ) const;

		/**
		 * The type of this image data. 
		 * @return The type of this image data 
		 */
		unsigned int GetType(  ) const;

		/**
		 * The X dimension size of this image data. 
		 * @return The X dimension size of this image data. 
		 */
		unsigned int GetXSize(  ) const;

		/**
		 * The Y dimension size of this image data. 
		 * @return The Y dimension size of this image data. 
		 */
		unsigned int GetYSize(  ) const;

		/**
		 * The Z dimension size of this image data. 
		 * @return The Z dimension size of this image data. 
		 */
		unsigned int GetZSize(  ) const;

		/**
		 * The X dimension size of this image data. 
		 * @param _xs The desired X dimension size of this image data. 
		 */
		void Set1DSize( unsigned int _xs ) const;

		/**
		 * The X and Y dimension size of this image data. 
		 * @param _xs The desired X dimension size of this image data. 
		 * @param _ys The desired Y dimension size of this image data. 
		 */
		void Set2DSize( unsigned int _xs , unsigned int _ys ) const;

		/**
		 * The X, Y and Z dimension size of this image data. 
		 * @param _xs The desired X dimension size of this image data. 
		 * @param _ys The desired Y dimension size of this image data. 
		 * @param _zs The desired Z dimension size of this image data. 
		 */
		void Set3DSize( unsigned int _xs , unsigned int _ys , unsigned int _zs ) const;

		/**
		 * The 6 uniform cube side dimensions of this image data. 
		 * @param _xs The desired X dimension size of each cube side in this image data. 
		 *  
		 * @param _ys The desired Y dimension size of each cube side in this image data. 
		 *  
		 */
		void SetCubeSize( unsigned int _xs , unsigned int _ys ) const;

		/**
		 * Clears all data from the image, and removes all data fields. The type is reset 
		 * to 2D. 
		 */
		void Reset(  ) const;

		/**
		 * The ImageFields field data object, that holds all fields within the image. 
		 * @return The ImageFields field data object. 
		 */
		spFieldData GetImageFields(  ) const;

	};

	/**
	 * Table is the base class for tables objects, where items are added into an id-indexed 
	 * array of objects. 
	 */
	class spTable : public spObject
	{
		public:
		spTable( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spTable();
		spTable( const spTable &p );
		spTable & operator=( const spTable &p );
		const spTable* operator->() const;
		spTable( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spTable is a or is a descendant of the 
		 * class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ITable",type)==0) || (strcmp("spTable",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spTable 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spTable handle 
		 * @return a handle to the spTable object, if the cast can be made, and a NULL 
		 * handle otherwise 
		 */
		static spTable SafeCast(spObject other);

		/**
		 * Adds an item to the table. The returned value is the id of the item within 
		 * the table, which can be used to retrieve the item using GetItem(). 
		 * @param item Is the item that is to be added to the table. 
		 * @return the id of the added item in the table 
		 */
		rid AddItem( const spObject & item ) const;

		/**
		 * Sets an item in the table. The id must exist in the table. 
		 * @param id Is the id that is to be set. 
		 * @param item Is the object set to the id. 
		 */
		void SetItem( rid id , const spObject & item ) const;

		/**
		 * Finds a named item in the table. If multiple items have the same name, the 
		 * first will be returned. If no item was found, null will be returned. 
		 * @param name Is the string that is to be searched for. 
		 * @return the matching object, or null if no match was found 
		 */
		spObject FindItem( const char * name ) const;

		/**
		 * Finds the id of an item in the table, using the name. If multiple items have 
		 * the same name, the first will be returned. If no item was found, the return 
		 * will be -1. 
		 * @param name Is the string that is to be searched for. 
		 * @return the id of the found object, or -1 if no match was found 
		 */
		rid FindItemId( const char * name ) const;

		/**
		 * Returns the i:th item, using the id of the item. 
		 * @param id Is the id of the requested object. 
		 * @return the found object 
		 */
		spObject GetItem( rid id ) const;

		/**
		 * Removes an item, and invalidates the id. The id will not point at a valid item, 
		 * until Clear is called and new items are added up until the id. 
		 * @param id The id of the object that should be removed. 
		 */
		void RemoveItem( rid id ) const;

		/**
		 * Clears the table, and removes all items. If AddItem is called after Clear, 
		 * the item ids will start over from 0. 
		 */
		void Clear(  ) const;

		/**
		 * The number of item id:s in the table. If an item has been removed, using RemoveItem, 
		 * the id is still counted in this method. GetIdsCount also equals the id that 
		 * will be applied to the next item added to the table. 
		 * @return the itemcount of the table 
		 */
		unsigned int GetItemsCount(  ) const;

		/**
		 * Clears the current table and copies the items from a source table. 
		 * @param src The table to copy. 
		 */
		void Copy( const spTable & src ) const;

	};

	/**
	 * Material object that keeps material information used while rendering. 
	 */
	class spMaterial : public spObject
	{
		public:
		spMaterial( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spMaterial();
		spMaterial( const spMaterial &p );
		spMaterial & operator=( const spMaterial &p );
		const spMaterial* operator->() const;
		spMaterial( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spMaterial is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IMaterial",type)==0) || (strcmp("spMaterial",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spMaterial 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spMaterial handle 
		 * @return a handle to the spMaterial object, if the cast can be made, and a NULL 
		 * handle otherwise 
		 */
		static spMaterial SafeCast(spObject other);

		/**
		 * Returns the number of material channels in the material. 
		 * @return The current channel count 
		 */
		unsigned int GetMaterialChannelCount(  ) const;

		/**
		 * Returns the name of a channel from the index. Note that by adding/removing 
		 * channels the indices are changed, and this method should only be used for enumeration. 
		 * @param index The index to the channel to be fetched. 
		 * @return The channel name corresponding to the index 
		 */
		spString GetMaterialChannelFromIndex( rid index ) const;

		/**
		 * Add a material channel. 
		 * @param channel_name The name of the material channel. 
		 */
		void AddMaterialChannel( const char * channel_name ) const;

		/**
		 * Remove a material channel. 
		 * @param channel_name The name of the material channel. 
		 */
		void RemoveMaterialChannel( const char * channel_name ) const;

		/**
		 * Check if the channel exists within the material. 
		 * @param channel_name The name of the material channel. 
		 * @return True if the channel exists, false if not 
		 */
		bool HasMaterialChannel( const char * channel_name ) const;

		/**
		 * Set which shading network to use for the material channel. 
		 * @param channel_name The name of the new channel. 
		 * @param node The shading network exit node. 
		 */
		void SetShadingNetwork( const char * channel_name , const spShadingNode & node ) const;

		/**
		 * Get which shading network to use for the material channel. 
		 * @param channel_name The name of the channel. 
		 * @return The current shading network exit node 
		 */
		spShadingNode GetShadingNetwork( const char * channel_name ) const;

		/**
		 * Save shading network to XML. 
		 * @param channel_name The name of the channel. 
		 * @param in_xml The xml descriping the shading node graph. 
		 * @return The current shading network exit node 
		 */
		void LoadShadingNetworkFromXML( const char * channel_name , const char * in_xml ) const;

		/**
		 * Save shading network to XML. 
		 * @param channel_name The name of the channel. 
		 * @return The current shading network exit node 
		 */
		spString SaveShadingNetworkToXML( const char * channel_name ) const;

		/**
		 * The UseTangentSpaceNormals flag. If set, the normal map has tangent space normals. 
		 * @param value The desired flag value. 
		 */
		void SetUseTangentSpaceNormals( bool value ) const;

		/**
		 * The UseTangentSpaceNormals flag. If set, the normal map has tangent space normals. 
		 *  
		 */
		bool GetUseTangentSpaceNormals(  ) const;

		/**
		 * Returns true if the material is setup identical to this material. 
		 * @param mat The material to compare to. 
		 */
		bool IsIdenticalTo( const spMaterial & mat ) const;

		/**
		 * Returns true if the material *could* be transparent. In other words, returns 
		 * true IF the BlendMode of the material is not set to opaque, AND there is a 
		 * non-opaque shading network assigned to the opacity channel. This means materials 
		 * set to BlendMode::Blend can still return false if they have an opacity channel 
		 * set that is either empty, or constant and set to an opaque value. This can 
		 * be used to split transparent and opaque materials before processing, or find 
		 * materials marked as BlendMode::Blend that don't have to be. 
		 */
		bool IsTransparent(  ) const;

		/**
		 * The unique id for this node. 
		 * @param value The node id of type string. 
		 */
		void SetMaterialGUID( const char * value ) const;

		/**
		 * The unique id for this node. 
		 */
		spString GetMaterialGUID(  ) const;

		/**
		 * The material type, used to specify which shader should be used to render the 
		 * material. 
		 * @param value The material type. One of the following: Standard -> Use the standard 
		 * shader. Flipbook -> Use the flipbook shader. BillboardCloud -> Use the billboard 
		 * cloud shader. 
		 */
		void SetMaterialType( Simplygon::EMaterialType value ) const;

		/**
		 * The material type, used to specify which shader should be used to render the 
		 * material. 
		 */
		Simplygon::EMaterialType GetMaterialType(  ) const;

		/**
		 * The opacity type determines how the opacity channel of this material is interpreted 
		 * when casting. To make (0.0->1.0) map to (transparent-opaque), use 'Opacity'. 
		 * To make (0.0->1.0) map to (opaque-transparent), use 'Transparency' 
		 * @param value The new opacity type. 
		 */
		void SetOpacityType( Simplygon::EOpacityType value ) const;

		/**
		 * The opacity type determines how the opacity channel of this material is interpreted 
		 * when casting. To make (0.0->1.0) map to (transparent-opaque), use 'Opacity'. 
		 * To make (0.0->1.0) map to (opaque-transparent), use 'Transparency' 
		 */
		Simplygon::EOpacityType GetOpacityType(  ) const;

		/**
		 * The name of the channel in the material to be used for Opacity or Transparency. 
		 * This material property is primarily used in the scene exporters to correctly 
		 * export opacity, and does *not* determine which channel to use for opacity when 
		 * casting materials. The channel to be used for opacity during casting is controlled 
		 * by a setting on the MaterialCaster objects. 
		 * @param value The desired material channel. 
		 */
		void SetOpacityChannel( const char * value ) const;

		/**
		 * The name of the channel in the material to be used for Opacity or Transparency. 
		 * This material property is primarily used in the scene exporters to correctly 
		 * export opacity, and does *not* determine which channel to use for opacity when 
		 * casting materials. The channel to be used for opacity during casting is controlled 
		 * by a setting on the MaterialCaster objects. 
		 */
		spString GetOpacityChannel(  ) const;

		/**
		 * Material blend mode specifies which type of blend function to use to blend 
		 * materials. The blend mode function will be used while blending layers during 
		 * material casting. 
		 * @param value The blend mode function used while blending layers during material 
		 * casting. 
		 */
		void SetBlendMode( Simplygon::EMaterialBlendMode value ) const;

		/**
		 * Material blend mode specifies which type of blend function to use to blend 
		 * materials. The blend mode function will be used while blending layers during 
		 * material casting. 
		 */
		Simplygon::EMaterialBlendMode GetBlendMode(  ) const;

		/**
		 * The cutoff value for opacity when using mask blend mode. 
		 * @param value The opacity cutoff value. 
		 */
		void SetOpacityCutoff( real value ) const;

		/**
		 * The cutoff value for opacity when using mask blend mode. 
		 */
		real GetOpacityCutoff(  ) const;

		/**
		 * Changes the prefix path (drive, directory) of all matching texture paths in 
		 * the material, with the new one. This method is useful when external textures 
		 * are placed in a specific folder, which needs to be moved. 
		 * @param current_path_prefix The current prefix path, either relative or absolute. 
		 *  
		 * @param new_path_prefix The new prefix path. 
		 */
		void ChangeTexturePrefixPath( const char * current_path_prefix , const char * new_path_prefix ) const;

		/**
		 * Maps the alpha component of the diffuse channel to all the RGBA components 
		 * in the opacity channel (by using a swizzle node). 
		 */
		void SetOpacityFromDiffuseAlpha(  ) const;

		/**
		 * Converts parameters such as UVTiling and UVOffset in shading networks. 
		 */
		void ConvertHandedness(  ) const;

		/**
		 * Get all unique material channel names in the material. 
		 * @param channels The array receiving unique channel names. 
		 */
		void GetMaterialChannels( const spStringArray & channels ) const;

		/**
		 * Get all unique material channel names having texture inputs in the material. 
		 * @param channels The array receiving unique channel names. 
		 */
		void GetMaterialChannelsWithTextureInputs( const spStringArray & channels ) const;

	};

	/**
	 * MaterialTable keeps information on materials used while rendering. 
	 */
	class spMaterialTable : public spTable
	{
		public:
		spMaterialTable( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spMaterialTable();
		spMaterialTable( const spMaterialTable &p );
		spMaterialTable & operator=( const spMaterialTable &p );
		const spMaterialTable* operator->() const;
		spMaterialTable( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spMaterialTable is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IMaterialTable",type)==0) || (strcmp("spMaterialTable",type)==0) )
				return true;
			return spTable::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spMaterialTable 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spMaterialTable handle 
		 * @return a handle to the spMaterialTable object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spMaterialTable SafeCast(spObject other);

		/**
		 * Adds a material to the table. The returned value is the id of the material 
		 * within the table. 
		 * @param material The material to add into the table. 
		 * @return The material id of the material in the table 
		 */
		rid AddMaterial( const spMaterial & material ) const;

		/**
		 * Finds a material in the table, using the material name. If multiple materials 
		 * have the same name, the first will be returned. If the material was not found, 
		 * null is returned. 
		 * @param name The material name to look for. 
		 * @return The material if found, null otherwise 
		 */
		spMaterial FindMaterial( const char * name ) const;

		/**
		 * Finds a material in the table that is setup identical to the specified material. 
		 * @param mat The material setup to look for. 
		 * @return The material if found, null otherwise 
		 */
		spMaterial FindIdenticalMaterial( const spMaterial & mat ) const;

		/**
		 * Finds the id of a material in the table, using the material name. If multiple 
		 * materials have the same name, the first will be returned. If the material was 
		 * not found, the return will be -1. 
		 * @param name The material name to look for. 
		 * @return The material id if found, -1 otherwise 
		 */
		rid FindMaterialId( const char * name ) const;

		/**
		 * Finds the id of a material in the table that is setup identical to the specified 
		 * material. 
		 * @param mat The material setup to look for. 
		 * @return The material id if found, -1 otherwise 
		 */
		rid FindIdenticalMaterialId( const spMaterial & mat ) const;

		/**
		 * Finds the materials in the table that are setup identical to the specified 
		 * material. 
		 * @param mat The material setup to look for. 
		 * @return The an array material ids if found, null otherwise 
		 */
		spRidArray FindIdenticalMaterialIds( const spMaterial & mat ) const;

		/**
		 * Sets a material in the table. 
		 * @param id The id of the material in the table. 
		 * @param material The material to set into the table. 
		 */
		void SetMaterial( rid id , const spMaterial & material ) const;

		/**
		 * Returns the i:th material, using the id of the material. 
		 * @param id The id of the material in the table. 
		 * @return The the material in the table 
		 */
		spMaterial GetMaterial( rid id ) const;

		/**
		 * Removes a material. If GetMaterial is subsequently called with the same material 
		 * id, the value returned will be null. 
		 * @param id The id of the material in the table. 
		 */
		void RemoveMaterial( rid id ) const;

		/**
		 * Returns the number of materials in the table. 
		 */
		unsigned int GetMaterialsCount(  ) const;

		/**
		 * Changes the prefix path (drive, directory) of all matching texture paths in 
		 * all the materials in the table, with the new one. This method is useful when 
		 * external textures are placed in a specific folder, which needs to be moved. 
		 * @param current_path_prefix The current prefix path, either relative or absolute. 
		 *  
		 * @param new_path_prefix The new prefix path. 
		 */
		void ChangeTexturePrefixPath( const char * current_path_prefix , const char * new_path_prefix ) const;

		/**
		 * Get all unique material channel names for all materials in table. 
		 * @param channels The array receiving unique channel names. 
		 */
		void GetMaterialChannels( const spStringArray & channels ) const;

		/**
		 * Get all unique material channel names having texture inputs for all materials 
		 * in table. 
		 * @param channels The array receiving unique channel names. 
		 */
		void GetMaterialChannelsWithTextureInputs( const spStringArray & channels ) const;

	};

	/**
	 * Matrix4x4 is used to represent and manipulate 4x4 transformation matrices, which 
	 * can be either standard matrices, or homogeneous 4x4 matrices used to transform 
	 * 3D homogeneous coordinates [x y z w]. The transformations are defined in row-major 
	 * order. 
	 */
	class spMatrix4x4 : public spObject
	{
		public:
		spMatrix4x4( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spMatrix4x4();
		spMatrix4x4( const spMatrix4x4 &p );
		spMatrix4x4 & operator=( const spMatrix4x4 &p );
		const spMatrix4x4* operator->() const;
		spMatrix4x4( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spMatrix4x4 is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IMatrix4x4",type)==0) || (strcmp("spMatrix4x4",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spMatrix4x4 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spMatrix4x4 handle 
		 * @return a handle to the spMatrix4x4 object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spMatrix4x4 SafeCast(spObject other);

		/**
		 * Copies the contents of an input matrix to the current matrix. 
		 * @param mtxin The source matrix. 
		 */
		void DeepCopy( const spMatrix4x4 & mtxin ) const;

		/**
		 * Set the matrix to the zero matrix (all zeros). 
		 */
		void Zero(  ) const;

		/**
		 * Set the matrix to the identity matrix. 
		 */
		void Identity(  ) const;

		/**
		 * Get a matrix element. 
		 * @param column The column index. 
		 * @param row The row index. 
		 * @return The value of the element 
		 */
		real GetElement( unsigned int column , unsigned int row ) const;

		/**
		 * Set a matrix element. 
		 * @param column The column index. 
		 * @param row The row index. 
		 * @param value The value to which the element will be set. 
		 */
		void SetElement( unsigned int column , unsigned int row , real value ) const;

		/**
		 * The elements of the matrix. 
		 * @return The returned data array. The array contains 16 items. 
		 * @return an array containing all elements 
		 */
		spRealData GetElements(  ) const;

		/**
		 * The matrix to the transpose of the input matrix. 
		 * @param mtxin The input matrix. 
		 */
		void SetToTranspose( const spMatrix4x4 & mtxin ) const;

		/**
		 * Transpose the current matrix. 
		 */
		void Transpose(  ) const;

		/**
		 * The matrix to the invert of the input matrix. 
		 * @param mtxin The input matrix. 
		 */
		void SetToInvert( const spMatrix4x4 & mtxin ) const;

		/**
		 * Invert the current matrix. 
		 */
		void Invert(  ) const;

		/**
		 * Returns the top 3x3 determinant. 
		 */
		real Determinant3x3(  ) const;

		/**
		 * Multiply in-place an array with 3D points [x y z 1]. 
		 * @param vecarray The vectors to be multiplied and written to. 
		 */
		void Point3ArrayMultiply( const spRealArray & vecarray ) const;

		/**
		 * Multiply in-place an array with 3D direction vectors [x y z 0]. 
		 * @param vecarray The vectors to be multiplied and written to. 
		 */
		void Direction3ArrayMultiply( const spRealArray & vecarray ) const;

		/**
		 * Multiply in-place an array with full 4D vectors [x y z w]. 
		 * @param vecarray The vectors to be multiplied and written to. 
		 */
		void Vector4ArrayMultiply( const spRealArray & vecarray ) const;

		/**
		 * Creates a 3D rotation in a homogeneous transformation 4x4 matrix around the 
		 * specified axis. 
		 * @param angle The angle. 
		 * @param ax The x component of the rotation axis. 
		 * @param ay The y component of the rotation axis. 
		 * @param az The z component of the rotation axis. 
		 */
		void SetToRotationTransform( real angle , real ax , real ay , real az ) const;

		/**
		 * Creates a 3D scaling in a homogeneous transformation 4x4 matrix. 
		 * @param sx The x component of the scaling. 
		 * @param sy The y component of the scaling. 
		 * @param sz The z component of the scaling. 
		 */
		void SetToScalingTransform( real sx , real sy , real sz ) const;

		/**
		 * Creates a 3D translation in a homogeneous 4x4 matrix. 
		 * @param tx The x component of the scaling. 
		 * @param ty The y component of the scaling. 
		 * @param tz The z component of the scaling. 
		 */
		void SetToTranslationTransform( real tx , real ty , real tz ) const;

	};

	/**
	 * Transform3 handles homogeneous 4x4 transforms, i.e. transformations which can 
	 * be represented by multiplying a 4x4 matrix with a homogeneous 3D coordinate. 
	 * Transform3 can either pre-multiply a matrix onto the transformation, which will 
	 * add a transform around the current transform, or it can post-multiply the matrix, 
	 * which will add a transform inside the current transform. Post-multiply is the 
	 * default mode. 
	 */
	class spTransform3 : public spObject
	{
		public:
		spTransform3( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spTransform3();
		spTransform3( const spTransform3 &p );
		spTransform3 & operator=( const spTransform3 &p );
		const spTransform3* operator->() const;
		spTransform3( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spTransform3 is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ITransform3",type)==0) || (strcmp("spTransform3",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spTransform3 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spTransform3 handle 
		 * @return a handle to the spTransform3 object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spTransform3 SafeCast(spObject other);

		/**
		 * Resets the transformation to the identity transform, resets the multiplication 
		 * mode to PostMultiply, and clears the matrix stack. 
		 */
		void Clear(  ) const;

		/**
		 * The matrix that is used to specify the transform. 
		 * @return the transform matrix 
		 */
		spMatrix4x4 GetMatrix(  ) const;

		/**
		 * The real array that is used to store the matrix stack. 
		 * @return the matrix stack array 
		 */
		spRealArray GetStack(  ) const;

		/**
		 * The transform concatenation mode to post-multiply, any added transform will 
		 * be concatenated using this mode. 
		 */
		void PostMultiply(  ) const;

		/**
		 * The transform concatenation mode to pre-multiply, any added transform will 
		 * be concatenated using this mode. 
		 */
		void PreMultiply(  ) const;

		/**
		 * The transform concatenation mode. 
		 * @return true if the mode is set to post-multiply, false otherwise 
		 */
		bool IsPostMultiply(  ) const;

		/**
		 * The transform concatenation mode. 
		 * @return true if the mode is set to pre-multiply, false otherwise 
		 */
		bool IsPreMultiply(  ) const;

		/**
		 * Concatenates a rotation transform to the current transform. 
		 * @param angle The rotation angle around the axis. 
		 * @param rx The x axis rotation component. 
		 * @param ry The y axis rotation component. 
		 * @param rz The z axis rotation component. 
		 */
		void AddRotation( real angle , real rx , real ry , real rz ) const;

		/**
		 * Concatenates a scaling transform to the current transform. 
		 * @param sx The scaling vector x axis component. 
		 * @param sy The scaling vector y axis component. 
		 * @param sz The scaling vector z axis component. 
		 */
		void AddScaling( real sx , real sy , real sz ) const;

		/**
		 * Concatenates a translation transform to the current transform. 
		 * @param tx The translation vector x component. 
		 * @param ty The translation vector y component. 
		 * @param tz The translation vector z component. 
		 */
		void AddTranslation( real tx , real ty , real tz ) const;

		/**
		 * Concatenates a generic transform to the current transform. 
		 * @param transform The input transform matrix. 
		 */
		void AddTransformation( const spMatrix4x4 & transform ) const;

		/**
		 * Pushes the current transform onto the matrix stack. 
		 */
		void Push(  ) const;

		/**
		 * Pops the topmost matrix on the the matrix stack, and replaces the current transform 
		 * with the popped matrix. 
		 */
		void Pop(  ) const;

	};

	/**
	 * MappingImage stores the mapping between a processed geometry and the source 
	 * geometry it is based on. The mapping image object also stores multisampling 
	 * settings. It can be used to cast information from the original geometry to the 
	 * processed geometry, such as surface transfer or calculating normal maps. See 
	 * IMaterialCaster and subclasses for casting uses. 
	 */
	class spMappingImage : public spObject
	{
		public:
		spMappingImage( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spMappingImage();
		spMappingImage( const spMappingImage &p );
		spMappingImage & operator=( const spMappingImage &p );
		const spMappingImage* operator->() const;
		spMappingImage( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spMappingImage is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IMappingImage",type)==0) || (strcmp("spMappingImage",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spMappingImage 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spMappingImage handle 
		 * @return a handle to the spMappingImage object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spMappingImage SafeCast(spObject other);

		/**
		 * Return a copy of the mapping image which is scaled in size by half, in width 
		 * and height. The area covered is a quarter size of the original, hence its name. 
		 * @return copy of the mapping image, reduced in size to half of the original 
		 * width and height 
		 */
		spMappingImage NewQuartersizeCopy(  ) const;

		/**
		 * The width of the mapping texture. 
		 * @return The Width of the mapping texture 
		 */
		unsigned int GetWidth(  ) const;

		/**
		 * The height of the mapping texture. 
		 * @return The Height of the mapping texture 
		 */
		unsigned int GetHeight(  ) const;

		/**
		 * The number of layers of the mapping texture. 
		 * @return The LayerCount of the mapping texture 
		 */
		unsigned int GetLayerCount(  ) const;

		/**
		 * The multi sampling width of the mapping texture. 
		 * @return The multi sampling width 
		 */
		unsigned int GetMultisamplingWidth(  ) const;

		/**
		 * The multi sampling height of the mapping texture. 
		 * @return The multi sampling height 
		 */
		unsigned int GetMultisamplingHeight(  ) const;

		/**
		 * The ImageData object, which stores the mapping data. 
		 * @return The ImageData object. 
		 */
		spChunkedImageData GetImageData(  ) const;

		/**
		 * The IMappingImageMeshData Mesh data that is used to retrieve the triangle mapping 
		 * to mesh information to map back to the original scene. 
		 * @return The mapping mesh data object. 
		 */
		spMappingImageMeshData GetMappingMeshData(  ) const;

	};

	/**
	 * ProcessingObject is the abstract base class for all processing objects in Simplygon. 
	 * Processing objects take parameters, exports the RunProcessing to run the main 
	 * processing and Clear to clear the internal states of the processing object. 
	 * All processing objects also export information on how far the process has moved 
	 * and the possibility to cancel long running processings. 
	 */
	class spProcessingObject : public spObject
	{
		public:
		spProcessingObject( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spProcessingObject();
		spProcessingObject( const spProcessingObject &p );
		spProcessingObject & operator=( const spProcessingObject &p );
		const spProcessingObject* operator->() const;
		spProcessingObject( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spProcessingObject is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IProcessingObject",type)==0) || (strcmp("spProcessingObject",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spProcessingObject 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spProcessingObject handle 
		 * @return a handle to the spProcessingObject object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spProcessingObject SafeCast(spObject other);

		/**
		 * Runs the processing the object is designed for. 
		 * @return Returns the status of the process. If the status is anything else than 
		 * 0 (Finished), please see log for details. 
		 */
		Simplygon::EProcessStatus RunProcessing(  ) const;

		/**
		 * Clear all internal states of the object. This will NOT clear the parameters 
		 * set in the object. 
		 */
		void Clear(  ) const;

		/**
		 * Returns the current progress of the processing as a value between 0 and 100. 
		 * @return The current progress of the process as a value between 0 and 100. 
		 */
		real GetPercentDone(  ) const;

		/**
		 * Get settings as JSON for debugging purposes. 
		 * @return All settings as JSON 
		 */
		spString ToJSON(  ) const;

	};

	/**
	 * Computes texture coordinates for arbitrary geometry. 
	 */
	class spParameterizer : public spObject
	{
		public:
		spParameterizer( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spParameterizer();
		spParameterizer( const spParameterizer &p );
		spParameterizer & operator=( const spParameterizer &p );
		const spParameterizer* operator->() const;
		spParameterizer( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spParameterizer is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IParameterizer",type)==0) || (strcmp("spParameterizer",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spParameterizer 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spParameterizer handle 
		 * @return a handle to the spParameterizer object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spParameterizer SafeCast(spObject other);

		/**
		 * Executes the parameterization of the geometry. 
		 * @param geom The geometry which is to be parameterized. 
		 * @param arr Will contain the completed parameterization. 
		 * @return True if the parameterization succeeds, false otherwise 
		 */
		bool Parameterize( const spGeometryData & geom , const spRealArray & arr ) const;

		/**
		 * The maximum allowed texture stretch. Range 0->1. 
		 * @param value The desired value to which MaxStretch will be set. Value cannot 
		 * be less than 0. Value cannot be greater than 1. 
		 */
		void SetMaxStretch( real value ) const;

		/**
		 * The maximum allowed texture stretch. Range 0->1. 
		 */
		real GetMaxStretch(  ) const;

		/**
		 * Only used when computing new UVs. The importance value for trying to have as 
		 * large and few charts as possible. The closer the value is to 1, the slower 
		 * it is. Having 0 means no extra focus will be put on reducing the number of 
		 * charts. Having value 1 means maximum focus will be put on reducing the number 
		 * of charts and thereby increasing the size of the charts. 
		 * @param value The desired large charts importance value. Value cannot be less 
		 * than 0. Value cannot be greater than 1. 
		 */
		void SetLargeChartsImportance( real value ) const;

		/**
		 * Only used when computing new UVs. The importance value for trying to have as 
		 * large and few charts as possible. The closer the value is to 1, the slower 
		 * it is. Having 0 means no extra focus will be put on reducing the number of 
		 * charts. Having value 1 means maximum focus will be put on reducing the number 
		 * of charts and thereby increasing the size of the charts. 
		 */
		real GetLargeChartsImportance(  ) const;

		/**
		 * The number of input materials used in the original geometry for mapping to 
		 * multiple output materials. This needs to be set before you can set any specific 
		 * in-out material mapping. 0 signifies that no in-out material mapping is used, 
		 * ie. the process will produce one resulting mapping image. 
		 * @param value The number of outputs. 
		 */
		void SetInputMaterialCount( unsigned int value ) const;

		/**
		 * The number of input materials used in the original geometry for mapping to 
		 * multiple output materials. This needs to be set before you can set any specific 
		 * in-out material mapping. 0 signifies that no in-out material mapping is used, 
		 * ie. the process will produce one resulting mapping image. 
		 */
		unsigned int GetInputMaterialCount(  ) const;

		/**
		 * The number of output mapping images that are to be generated. Setup the mapping 
		 * between input and output materials with SetInputOutputMaterialMapping. 
		 * @param value The number of outputs. Value cannot be less than 1. Value cannot 
		 * be greater than SG_MAXIMUM_PARAMETERIZER_OUTPUT_MATERIAL_COUNT. 
		 */
		void SetOutputMaterialCount( unsigned int value ) const;

		/**
		 * The number of output mapping images that are to be generated. Setup the mapping 
		 * between input and output materials with SetInputOutputMaterialMapping. 
		 */
		unsigned int GetOutputMaterialCount(  ) const;

		/**
		 * The material mapping for InMaterialId, meaning what material of the generated 
		 * LOD InMaterialId will be baked into. Both InputMaterialCount and OutputMaterialCount 
		 * need to be set for this mapping to work, and all original materials need to 
		 * be mapped to an existing output id. 
		 * @param InMaterialId Is input material id. 
		 * @param OutMaterialId The output material id. 
		 */
		void SetInputOutputMaterialMapping( unsigned int InMaterialId , int OutMaterialId ) const;

		/**
		 * The previously set material mapping for mat_id. 
		 * @param InMaterialId Is input material id. 
		 * @return The currently mapped output material for InMaterialId. -1 means mapping 
		 * is not set. 
		 */
		int GetInputOutputMaterialMapping( unsigned int InMaterialId ) const;

		/**
		 * The width of the texture to use for mapping image index 0. Use SetTextureWidthForImageIndex 
		 * to set for another mapping image index. 
		 * @param value The texture width. 
		 */
		void SetTextureWidth( unsigned int value ) const;

		/**
		 * The width of the texture to use for mapping image index 0. Use SetTextureWidthForImageIndex 
		 * to set for another mapping image index. 
		 */
		unsigned int GetTextureWidth(  ) const;

		/**
		 * The width of the texture to use. 
		 * @param id The output material index. 
		 * @param value The new output texture width. 
		 */
		void SetTextureWidthForImageIndex( unsigned int id , unsigned int value ) const;

		/**
		 * The width of the texture to use. 
		 * @param id The material id of the output material. 
		 * @return The current texture width 
		 */
		unsigned int GetTextureWidthForImageIndex( unsigned int id ) const;

		/**
		 * The height of the texture to use for mapping image index 0. Use SetTextureHeightForImageIndex 
		 * to set for another mapping image index. 
		 * @param value The new output texture height. 
		 */
		void SetTextureHeight( unsigned int value ) const;

		/**
		 * The height of the texture to use for mapping image index 0. Use SetTextureHeightForImageIndex 
		 * to set for another mapping image index. 
		 */
		unsigned int GetTextureHeight(  ) const;

		/**
		 * The height of the texture to use. 
		 * @param id The output material id. 
		 * @param value The new output texture height. 
		 */
		void SetTextureHeightForImageIndex( unsigned int id , unsigned int value ) const;

		/**
		 * The height of the texture to use. 
		 * @param id The output material id. 
		 * @return The current texture height 
		 */
		unsigned int GetTextureHeightForImageIndex( unsigned int id ) const;

		/**
		 * The minimum number of pixels between charts for mapping image index 0. Use 
		 * SetGutterSpaceForImageIndex to set for another mapping image index. 
		 * @param value The desired value to which GutterSpace will be set. 
		 */
		void SetGutterSpace( unsigned int value ) const;

		/**
		 * The minimum number of pixels between charts for mapping image index 0. Use 
		 * SetGutterSpaceForImageIndex to set for another mapping image index. 
		 */
		unsigned int GetGutterSpace(  ) const;

		/**
		 * The minimum number of pixels between charts. 
		 * @param id The output material id. 
		 * @param value The desired value to which GutterSpace will be set. 
		 */
		void SetGutterSpaceForImageIndex( unsigned int id , unsigned int value ) const;

		/**
		 * The minimum number of pixels between charts. 
		 * @param id The output material id. 
		 * @return The current value of GutterSpace 
		 */
		unsigned int GetGutterSpaceForImageIndex( unsigned int id ) const;

		/**
		 * The FeatureFlagsMask. Any edge that has one of the flags present as a feature 
		 * edge, will have the edge forced as a parameterization feature. 
		 * @param value The mask to which FeatureFlagsMask will be set. 
		 */
		void SetFeatureFlagsMask( unsigned int value ) const;

		/**
		 * The FeatureFlagsMask. Any edge that has one of the flags present as a feature 
		 * edge, will have the edge forced as a parameterization feature. 
		 */
		unsigned int GetFeatureFlagsMask(  ) const;

		/**
		 * The automatic_texture_size flag. If true, then texture sizes will be computed 
		 * for the reduced mesh depending on its pixel size on screen. 
		 * @param value The desired flag. 
		 */
		void SetUseAutomaticTextureSize( bool value ) const;

		/**
		 * The automatic_texture_size flag. If true, then texture sizes will be computed 
		 * for the reduced mesh depending on its pixel size on screen. 
		 */
		bool GetUseAutomaticTextureSize(  ) const;

		/**
		 * Set/Get a texture dimension length multiplier for the automatic texture size. 
		 * @param value The desired multiplier. 
		 */
		void SetAutomaticTextureSizeMultiplier( real value ) const;

		/**
		 * Set/Get a texture dimension length multiplier for the automatic texture size. 
		 *  
		 */
		real GetAutomaticTextureSizeMultiplier(  ) const;

		/**
		 * If automatic_texture_size is enabled, then force the texture sizes to be a 
		 * power of 2. 
		 * @param value The desired flag. 
		 */
		void SetForcePower2Texture( bool value ) const;

		/**
		 * If automatic_texture_size is enabled, then force the texture sizes to be a 
		 * power of 2. 
		 */
		bool GetForcePower2Texture(  ) const;

		/**
		 * If UseVertexWeights is enabled, the weights help determine the UV charts and 
		 * their UV area. 
		 * @param value The desired flag. 
		 */
		void SetUseVertexWeights( bool value ) const;

		/**
		 * If UseVertexWeights is enabled, the weights help determine the UV charts and 
		 * their UV area. 
		 */
		bool GetUseVertexWeights(  ) const;

		/**
		 * If UseVisibilityWeights is enabled, the weights help determine the UV charts 
		 * and their UV area. 
		 * @param value The desired flag. 
		 */
		void SetUseVisibilityWeights( bool value ) const;

		/**
		 * If UseVisibilityWeights is enabled, the weights help determine the UV charts 
		 * and their UV area. 
		 */
		bool GetUseVisibilityWeights(  ) const;

	};

	/**
	 * ObjectCollection and its specializations handles a collection of Objects. There 
	 * are methods for adding, removing and iterating through the objects. 
	 */
	class spObjectCollection : public spObject
	{
		public:
		spObjectCollection( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spObjectCollection();
		spObjectCollection( const spObjectCollection &p );
		spObjectCollection & operator=( const spObjectCollection &p );
		const spObjectCollection* operator->() const;
		spObjectCollection( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spObjectCollection is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IObjectCollection",type)==0) || (strcmp("spObjectCollection",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spObjectCollection 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spObjectCollection handle 
		 * @return a handle to the spObjectCollection object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spObjectCollection SafeCast(spObject other);

		/**
		 * Adds an object to the collection. The handle refers to the object until the 
		 * object is removed from the collection again. 
		 * @param obj The object that is to be added to the collection. 
		 * @return The handle of the added object in the collection 
		 */
		rhandle AddObject( const spObject & obj ) const;

		/**
		 * Adds an object to the collection, as AddObject, but sorts the object into the 
		 * collection based on its name. 
		 * @param obj The object that is to be added to the collection. 
		 * @param ascending Determines the sorting order. 
		 * @return The handle of the added object in the collection 
		 */
		rhandle AddObjectSorted( const spObject & obj , bool ascending ) const;

		/**
		 * Returns the start of the collection. The handle returned refers to the first 
		 * object in the collection. If the handle is null, then the collection is empty. 
		 * @return The first item in collection, or null if collection is empty 
		 */
		rhandle GetFirstItem(  ) const;

		/**
		 * Returns the handle to the next item in the collection. Use GetFirstItem and 
		 * this method to step through the collection. If the return is null, the end 
		 * of the collection has been reached. 
		 * @param objhandle The handle of an object i. 
		 * @return The handle of the object i+1 
		 */
		rhandle GetNextItem( rhandle objhandle ) const;

		/**
		 * The object the handle is referring to. 
		 * @param objhandle The handle of an object in the collection. 
		 * @return The object associated with the handle 
		 */
		spObject GetItemsObject( rhandle objhandle ) const;

		/**
		 * Removes an item from the collection. The handle returned is the first item 
		 * after this item that is in the collection. If the return is null, the item 
		 * was the last item in the collection. Warning! The handle is invalid after the 
		 * removal of the object. 
		 * @param objhandle The handle of the object that is to be removed. 
		 * @return The handle to the item following the removed one, or null if collection 
		 * is now empty 
		 */
		rhandle RemoveItem( rhandle objhandle ) const;

		/**
		 * Removes an object from the collection. Only the first occurrence of the object 
		 * is removed from the collection. 
		 * @param pobj The object that is to be removed. 
		 */
		void RemoveObject( const spObject & pobj ) const;

		/**
		 * Removes all items from the collection. 
		 */
		void RemoveAllItems(  ) const;

		/**
		 * The number of items in the collection. 
		 * @return The number of items in the collection 
		 */
		unsigned int GetItemCount(  ) const;

		/**
		 * Returns the handle of the i:th item. 
		 * @param index The index of an object in the collection. 
		 * @return The handle of the object with the relevant index 
		 */
		rhandle GetItem( unsigned int index ) const;

		/**
		 * Returns the object of the i:th item. 
		 * @param index The index of an object in the collection. 
		 * @return The object with the relevant index 
		 */
		spObject GetItemAsObject( unsigned int index ) const;

		/**
		 * Returns true if the object is in the collection. 
		 * @param pobj The object to be checked for. 
		 * @return True if the collection contains pobj, false otherwise 
		 */
		bool IsObjectInCollection( const spObject & pobj ) const;

		/**
		 * Returns true if the item is in the collection. 
		 * @param objhandle The handle of an object to be checked for. 
		 * @return True if the collection contains the object, false otherwise 
		 */
		bool IsItemInCollection( rhandle objhandle ) const;

		/**
		 * Finds a named object in the collection. The first object with this name is 
		 * returned. The search is case-sensitive. 
		 * @param name The name of an object in the collection. 
		 * @return The object with the relevant name, or null if none is found 
		 */
		spObject FindObject( const char * name ) const;

	};

	/**
	 * GeometryDataCollection holds a number of GeometryData objects. The objects can 
	 * be looked up by their names (if they have been named with a call to SetName). 
	 */
	class spGeometryDataCollection : public spObjectCollection
	{
		public:
		spGeometryDataCollection( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGeometryDataCollection();
		spGeometryDataCollection( const spGeometryDataCollection &p );
		spGeometryDataCollection & operator=( const spGeometryDataCollection &p );
		const spGeometryDataCollection* operator->() const;
		spGeometryDataCollection( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGeometryDataCollection is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGeometryDataCollection",type)==0) || (strcmp("spGeometryDataCollection",type)==0) )
				return true;
			return spObjectCollection::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGeometryDataCollection 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGeometryDataCollection handle 
		 * @return a handle to the spGeometryDataCollection object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spGeometryDataCollection SafeCast(spObject other);

		/**
		 * Adds a GeometryData object to the collection. The handle refers to the GeometryData 
		 * until it is removed from the collection again. If the GeometryData and the 
		 * pre-existing collection shares a field name they have to be of the same type 
		 * and tuple size. 
		 * @param obj The GeometryData to add. 
		 * @return a handle to the added geometry in the collection 
		 */
		rhandle AddGeometryData( const spGeometryData & obj ) const;

		/**
		 * The object the handle is referring to. 
		 * @param objhandle The handle of the geometry data object to fetch. 
		 * @return The requested GeometryData object. 
		 */
		spGeometryData GetGeometryData( rhandle objhandle ) const;

		/**
		 * Removes an object from the collection. Only the first occurrence of the object 
		 * is removed. 
		 * @param pobj The GeometryData to remove from the collection. 
		 */
		void RemoveGeometryData( const spGeometryData & pobj ) const;

		/**
		 * Finds a named object. 
		 * @param name The name of the geometry object. 
		 * @return The requested GeometryData object. 
		 */
		spGeometryData FindGeometryData( const char * name ) const;

		/**
		 * Returns the object of the next item. 
		 * @param phandle_rhandleInputDataPtr The handle to the geometry object. 
		 */
		spGeometryData GetNextItemAsGeometryData( rhandle *phandle_rhandleInputDataPtr ) const;

		/**
		 * Returns true if the object is in the collection. 
		 * @param pobj The GeometryData to look for. 
		 * @return True if the GeometryData is in the collection, otherwise false 
		 */
		bool IsGeometryDataInCollection( const spGeometryData & pobj ) const;

	};

	/**
	 * Base class for graphics import classes 
	 */
	class spGraphicsImporter : public spObject
	{
		public:
		spGraphicsImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGraphicsImporter();
		spGraphicsImporter( const spGraphicsImporter &p );
		spGraphicsImporter & operator=( const spGraphicsImporter &p );
		const spGraphicsImporter* operator->() const;
		spGraphicsImporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGraphicsImporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGraphicsImporter",type)==0) || (strcmp("spGraphicsImporter",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGraphicsImporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGraphicsImporter handle 
		 * @return a handle to the spGraphicsImporter object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spGraphicsImporter SafeCast(spObject other);

		/**
		 * The main import file path. This must always be set. Some importers, such as 
		 * WavefrontImporter, also have secondary files that may be set. For info regarding 
		 * these secondary files, please see the documentation for the specific importer. 
		 * @param value The desired ImportFilePath string. 
		 */
		void SetImportFilePath( const char * value ) const;

		/**
		 * The main import file path. This must always be set. Some importers, such as 
		 * WavefrontImporter, also have secondary files that may be set. For info regarding 
		 * these secondary files, please see the documentation for the specific importer. 
		 *  
		 */
		spString GetImportFilePath(  ) const;

		/**
		 * Runs the import. Note that all parameters must be setup before importing. 
		 * @return True if the import was successful, false otherwise 
		 */
		bool RunImport(  ) const;

		/**
		 * Close any open file or stream, release any allocated data. 
		 */
		void Clear(  ) const;

		/**
		 * The the scene loaded from the importer. 
		 * @return The loaded scene 
		 */
		spScene GetScene(  ) const;

	};

	/**
	 * OBJ scene importer 
	 */
	class spWavefrontImporter : public spGraphicsImporter
	{
		public:
		spWavefrontImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spWavefrontImporter();
		spWavefrontImporter( const spWavefrontImporter &p );
		spWavefrontImporter & operator=( const spWavefrontImporter &p );
		const spWavefrontImporter* operator->() const;
		spWavefrontImporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spWavefrontImporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IWavefrontImporter",type)==0) || (strcmp("spWavefrontImporter",type)==0) )
				return true;
			return spGraphicsImporter::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spWavefrontImporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spWavefrontImporter handle 
		 * @return a handle to the spWavefrontImporter object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spWavefrontImporter SafeCast(spObject other);

		/**
		 * The material file path. If the path is not set, it is assumed to equal the 
		 * path of the main obj file, but with the extension '.mtl' instead of '.obj'. 
		 * If no material file is found or specified, materials that are found in the 
		 * Wavefront file is added using default material settings to the material table. 
		 * @param value Is the path to the material file. 
		 */
		void SetMaterialFilePath( const char * value ) const;

		/**
		 * The material file path. If the path is not set, it is assumed to equal the 
		 * path of the main obj file, but with the extension '.mtl' instead of '.obj'. 
		 * If no material file is found or specified, materials that are found in the 
		 * Wavefront file is added using default material settings to the material table. 
		 *  
		 */
		spString GetMaterialFilePath(  ) const;

		/**
		 * The ExtractGroups boolean. If true, each group within the wavefront file is 
		 * extracted into a separate geometry data object, that is named as the group. 
		 * If false, the whole file is imported into one geometry data, and groups are 
		 * ignored. 
		 * @param value Is the bool the parameter is to be set to. 
		 */
		void SetExtractGroups( bool value ) const;

		/**
		 * The ExtractGroups boolean. If true, each group within the wavefront file is 
		 * extracted into a separate geometry data object, that is named as the group. 
		 * If false, the whole file is imported into one geometry data, and groups are 
		 * ignored. 
		 */
		bool GetExtractGroups(  ) const;

		/**
		 * The UseAlphaAsOpacity boolean. If set, then if the material has a map_d texture 
		 * definition, and that texture is RGBA, the material will use the alpha channel 
		 * rather than the color (R) to specify the opacity. 
		 * @param value Is the bool the parameter is to be set to. 
		 */
		void SetUseAlphaAsOpacity( bool value ) const;

		/**
		 * The UseAlphaAsOpacity boolean. If set, then if the material has a map_d texture 
		 * definition, and that texture is RGBA, the material will use the alpha channel 
		 * rather than the color (R) to specify the opacity. 
		 */
		bool GetUseAlphaAsOpacity(  ) const;

		/**
		 * The UseFallbackDiffuse boolean. If set to true and the material is missing 
		 * the diffuse channel, a default, bright diffuse will be used. 
		 * @param value The requested value of the bool. 
		 */
		void SetUseFallbackDiffuse( bool value ) const;

		/**
		 * The UseFallbackDiffuse boolean. If set to true and the material is missing 
		 * the diffuse channel, a default, bright diffuse will be used. 
		 */
		bool GetUseFallbackDiffuse(  ) const;

	};

	/**
	 * glTF scene importer 
	 */
	class spGLTFImporter : public spGraphicsImporter
	{
		public:
		spGLTFImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGLTFImporter();
		spGLTFImporter( const spGLTFImporter &p );
		spGLTFImporter & operator=( const spGLTFImporter &p );
		const spGLTFImporter* operator->() const;
		spGLTFImporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGLTFImporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGLTFImporter",type)==0) || (strcmp("spGLTFImporter",type)==0) )
				return true;
			return spGraphicsImporter::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGLTFImporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGLTFImporter handle 
		 * @return a handle to the spGLTFImporter object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spGLTFImporter SafeCast(spObject other);

	};

	/**
	 * FBX scene importer 
	 */
	class spFBXImporter : public spGraphicsImporter
	{
		public:
		spFBXImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spFBXImporter();
		spFBXImporter( const spFBXImporter &p );
		spFBXImporter & operator=( const spFBXImporter &p );
		const spFBXImporter* operator->() const;
		spFBXImporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spFBXImporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IFBXImporter",type)==0) || (strcmp("spFBXImporter",type)==0) )
				return true;
			return spGraphicsImporter::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spFBXImporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spFBXImporter handle 
		 * @return a handle to the spFBXImporter object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spFBXImporter SafeCast(spObject other);

	};

	/**
	 * Base class for graphics export classes 
	 */
	class spGraphicsExporter : public spObject
	{
		public:
		spGraphicsExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGraphicsExporter();
		spGraphicsExporter( const spGraphicsExporter &p );
		spGraphicsExporter & operator=( const spGraphicsExporter &p );
		const spGraphicsExporter* operator->() const;
		spGraphicsExporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGraphicsExporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGraphicsExporter",type)==0) || (strcmp("spGraphicsExporter",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGraphicsExporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGraphicsExporter handle 
		 * @return a handle to the spGraphicsExporter object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spGraphicsExporter SafeCast(spObject other);

		/**
		 * The main export file path. This is the main file being written to, and must 
		 * always be set. 
		 * @param value The desired file path. 
		 */
		void SetExportFilePath( const char * value ) const;

		/**
		 * The main export file path. This is the main file being written to, and must 
		 * always be set. 
		 */
		spString GetExportFilePath(  ) const;

		/**
		 * The scene to export. 
		 * @param scene The desired scene object. 
		 */
		void SetScene( const spScene & scene ) const;

		/**
		 * The selection set (of nodes from the scene) to export. 
		 * @param exportSelectionSetID The desired selection set id to use. 
		 */
		void SetSelectionSet( int exportSelectionSetID ) const;

		/**
		 * Runs the export. Note that all required parameters must be setup before exporting. 
		 * @return True if the export was successful, false otherwise 
		 */
		bool RunExport(  ) const;

		/**
		 * The name of the texcoord level to use as primary level in case the file format 
		 * only supports a single texture coordinate layer. If the primary level name 
		 * is not set, the first found level will be used as primary level. 
		 * @param name The name of the primary texcoord level. 
		 */
		void SetPrimaryTexCoordName( const char * name ) const;

		/**
		 * The name of the texcoord level to use as primary level in case the file format 
		 * only supports a single texture coordinate layer. If the primary level name 
		 * is not set, the first found level will be used as primary level. 
		 */
		spString GetPrimaryTexCoordName(  ) const;

		/**
		 * Flag to control if cascaded scenes should be included in the export (note that 
		 * not all file formats support this). 
		 * @param value Export cascaded scenes flag. 
		 */
		void SetExportCascadedScenes( bool value ) const;

		/**
		 * Flag to control if cascaded scenes should be included in the export (note that 
		 * not all file formats support this). 
		 */
		bool GetExportCascadedScenes(  ) const;

	};

	/**
	 * Wavefront .obj geometry exporter. 
	 */
	class spWavefrontExporter : public spGraphicsExporter
	{
		public:
		spWavefrontExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spWavefrontExporter();
		spWavefrontExporter( const spWavefrontExporter &p );
		spWavefrontExporter & operator=( const spWavefrontExporter &p );
		const spWavefrontExporter* operator->() const;
		spWavefrontExporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spWavefrontExporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IWavefrontExporter",type)==0) || (strcmp("spWavefrontExporter",type)==0) )
				return true;
			return spGraphicsExporter::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spWavefrontExporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spWavefrontExporter handle 
		 * @return a handle to the spWavefrontExporter object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spWavefrontExporter SafeCast(spObject other);

		/**
		 * The material file path. If the path is not set, it is assumed to equal the 
		 * path of the main obj file, but with the extension '.mtl' instead of '.obj'. 
		 * @param value Is the path to the material file. 
		 */
		void SetMaterialFilePath( const char * value ) const;

		/**
		 * The material file path. If the path is not set, it is assumed to equal the 
		 * path of the main obj file, but with the extension '.mtl' instead of '.obj'. 
		 *  
		 */
		spString GetMaterialFilePath(  ) const;

	};

	/**
	 * FBX scene exporter. 
	 */
	class spFBXExporter : public spGraphicsExporter
	{
		public:
		spFBXExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spFBXExporter();
		spFBXExporter( const spFBXExporter &p );
		spFBXExporter & operator=( const spFBXExporter &p );
		const spFBXExporter* operator->() const;
		spFBXExporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spFBXExporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IFBXExporter",type)==0) || (strcmp("spFBXExporter",type)==0) )
				return true;
			return spGraphicsExporter::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spFBXExporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spFBXExporter handle 
		 * @return a handle to the spFBXExporter object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spFBXExporter SafeCast(spObject other);

		/**
		 * Flag to control if referenced textures should be embedded in binary blob or 
		 * referenced by path to external files. 
		 * @param value Embed flag. 
		 */
		void SetEmbedReferences( bool value ) const;

		/**
		 * Flag to control if referenced textures should be embedded in binary blob or 
		 * referenced by path to external files. 
		 */
		bool GetEmbedReferences(  ) const;

	};

	/**
	 * glTF geometry exporter capable of exporting both glTF and GLB files determined 
	 * by output path extension. Textures and binary blob files for glTF export will 
	 * be placed alongside the glTF file and have names prefixed by the output file 
	 * name. Note that any normal textures for the scene must be in tangent space, 
	 * as generated by a normal caster with SetGenerateTangentSpaceNormals set to true. 
	 */
	class spGLTFExporter : public spGraphicsExporter
	{
		public:
		spGLTFExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGLTFExporter();
		spGLTFExporter( const spGLTFExporter &p );
		spGLTFExporter & operator=( const spGLTFExporter &p );
		const spGLTFExporter* operator->() const;
		spGLTFExporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGLTFExporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGLTFExporter",type)==0) || (strcmp("spGLTFExporter",type)==0) )
				return true;
			return spGraphicsExporter::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGLTFExporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGLTFExporter handle 
		 * @return a handle to the spGLTFExporter object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spGLTFExporter SafeCast(spObject other);

		/**
		 * Flag to control if referenced textures should be embedded in binary blob or 
		 * referenced by path to external files. 
		 * @param value Embed flag. 
		 */
		void SetEmbedReferences( bool value ) const;

		/**
		 * Flag to control if referenced textures should be embedded in binary blob or 
		 * referenced by path to external files. 
		 */
		bool GetEmbedReferences(  ) const;

	};

	/**
	 * BinaryImporter loads the geometry data from a binary file, that is specific 
	 * for Simplygon. Please note that the binary file is only intended for temporary 
	 * storage, and that no compatibility between versions of Simplygon is guaranteed. 
	 */
	class spBinaryImporter : public spGraphicsImporter
	{
		public:
		spBinaryImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spBinaryImporter();
		spBinaryImporter( const spBinaryImporter &p );
		spBinaryImporter & operator=( const spBinaryImporter &p );
		const spBinaryImporter* operator->() const;
		spBinaryImporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spBinaryImporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IBinaryImporter",type)==0) || (strcmp("spBinaryImporter",type)==0) )
				return true;
			return spGraphicsImporter::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spBinaryImporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spBinaryImporter handle 
		 * @return a handle to the spBinaryImporter object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spBinaryImporter SafeCast(spObject other);

	};

	/**
	 * BinaryExporter stores the geometry data into a binary file, that is specific 
	 * for Simplygon. Please note that the binary file is only intended for temporary 
	 * storage, and that no compatibility between versions of Simplygon is guaranteed. 
	 */
	class spBinaryExporter : public spGraphicsExporter
	{
		public:
		spBinaryExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spBinaryExporter();
		spBinaryExporter( const spBinaryExporter &p );
		spBinaryExporter & operator=( const spBinaryExporter &p );
		const spBinaryExporter* operator->() const;
		spBinaryExporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spBinaryExporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IBinaryExporter",type)==0) || (strcmp("spBinaryExporter",type)==0) )
				return true;
			return spGraphicsExporter::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spBinaryExporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spBinaryExporter handle 
		 * @return a handle to the spBinaryExporter object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spBinaryExporter SafeCast(spObject other);

	};

	/**
	 * Checks the geometry for consistent indices, number of triangles etc. 
	 */
	class spGeometryValidator : public spObject
	{
		public:
		spGeometryValidator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGeometryValidator();
		spGeometryValidator( const spGeometryValidator &p );
		spGeometryValidator & operator=( const spGeometryValidator &p );
		const spGeometryValidator* operator->() const;
		spGeometryValidator( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGeometryValidator is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGeometryValidator",type)==0) || (strcmp("spGeometryValidator",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGeometryValidator 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGeometryValidator handle 
		 * @return a handle to the spGeometryValidator object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spGeometryValidator SafeCast(spObject other);

		/**
		 * Checks if the data stored in the Geometry is stored correctly. 
		 * @param geom The geometry data to validate. 
		 * @return True if the geometry is stored correct, or false if something is wrong. 
		 *  
		 */
		bool ValidateGeometry( const spGeometryData & geom ) const;

		/**
		 * Returns the error-code for the last check that was performed. 0 means no error 
		 * was found, and values less than 0 means an error was found. 
		 * @return The last error-code 
		 */
		unsigned int GetErrorValue(  ) const;

		/**
		 * Returns a string describing the error that was found for the last check that 
		 * was performed. 
		 * @return The last string describing the error 
		 */
		spString GetErrorString(  ) const;

		/**
		 * If set, faces that have the same index more than once will not be allowed. 
		 * @param value The desired flag value. 
		 */
		void SetCheckDegenerateFaceIndices( bool value ) const;

		/**
		 * If set, faces that have the same index more than once will not be allowed. 
		 *  
		 */
		bool GetCheckDegenerateFaceIndices(  ) const;

		/**
		 * If set, faces that have zero area will not be allowed. 
		 * @param value The desired flag value. 
		 */
		void SetCheckZeroAreaFaces( bool value ) const;

		/**
		 * If set, faces that have zero area will not be allowed. 
		 */
		bool GetCheckZeroAreaFaces(  ) const;

		/**
		 * This is the number of allowed materials used in the scene. Only indices within 
		 * this range are allowed. 
		 * @param value The desired flag value. 
		 */
		void SetAllowedMaterialCount( unsigned int value ) const;

		/**
		 * This is the number of allowed bones used in the scene. Only indices within 
		 * this range are allowed. 
		 * @param value The desired flag value. 
		 * @return The flag value 
		 */
		void SetAllowedBoneCount( unsigned int value ) const;

		/**
		 * This is the number of allowed groups/objects used in the scene. Only indices 
		 * within this range are allowed. 
		 * @param value The desired flag value. 
		 * @return The flag value 
		 */
		void SetAllowedGroupCount( unsigned int value ) const;

	};

	/**
	 * SettingsObject is the abstract base class for all settings objects in Simplygon. 
	 * Settings objects contains parameters for processing objects to use. These settings 
	 * objects will have their data set and reached from a ProcessingObject and then 
	 * used therein. 
	 */
	class spSettingsObject : public spObject
	{
		public:
		spSettingsObject( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSettingsObject();
		spSettingsObject( const spSettingsObject &p );
		spSettingsObject & operator=( const spSettingsObject &p );
		const spSettingsObject* operator->() const;
		spSettingsObject( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSettingsObject is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISettingsObject",type)==0) || (strcmp("spSettingsObject",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSettingsObject 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSettingsObject handle 
		 * @return a handle to the spSettingsObject object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spSettingsObject SafeCast(spObject other);

		/**
		 * Validates the current settings values. 
		 * @return True if all settings are valid 
		 */
		bool ValidateSettings(  ) const;

		/**
		 * Returns a string describing the error that was found the last time ValidateSettings 
		 * was performed. 
		 * @return The last string describing the error 
		 */
		spString GetErrorString(  ) const;

		/**
		 * Set a named parameter boolean value. 
		 * @param name Parameter name. 
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (mismatching parameter type) 
		 */
		bool SetBoolParameter( const char * name , bool value ) const;

		/**
		 * Set a named parameter integer value. 
		 * @param name Parameter name. 
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (mismatching parameter type) 
		 */
		bool SetIntParameter( const char * name , int value ) const;

		/**
		 * Set a named parameter unsigned integer value. 
		 * @param name Parameter name. 
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (mismatching parameter type) 
		 */
		bool SetUIntParameter( const char * name , unsigned int value ) const;

		/**
		 * Set a named parameter floating point value. 
		 * @param name Parameter name. 
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (mismatching parameter type) 
		 */
		bool SetDoubleParameter( const char * name , double value ) const;

		/**
		 * Set a named parameter string value. 
		 * @param name Parameter name. 
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (mismatching parameter type) 
		 */
		bool SetStringParameter( const char * name , const char * value ) const;

		/**
		 * Get a named parameter boolean value. 
		 * @param name Parameter name. 
		 * @return Parameter value, or false if mismatching type 
		 */
		bool GetBoolParameter( const char * name ) const;

		/**
		 * Get a named parameter integer value. 
		 * @param name Parameter name. 
		 * @return Parameter value, or 0 if mismatching type 
		 */
		int GetIntParameter( const char * name ) const;

		/**
		 * Get a named parameter unsigned integer value. 
		 * @param name Parameter name. 
		 * @return Parameter value, or 0 if mismatching type 
		 */
		unsigned int GetUIntParameter( const char * name ) const;

		/**
		 * Get a named parameter floating point value. 
		 * @param name Parameter name. 
		 * @return Parameter value, or 0 if mismatching type 
		 */
		double GetDoubleParameter( const char * name ) const;

		/**
		 * Get a named parameter string value. 
		 * @param name Parameter name. 
		 * @return Parameter value, or null pointer if mismatching type 
		 */
		spString GetStringParameter( const char * name ) const;

		/**
		 * Get settings as JSON for debugging purposes. 
		 * @return All settings as JSON 
		 */
		spString ToJSON(  ) const;

		/**
		 * Set if parameter names should be validated or not. Parameters that previously 
		 * do not exist will generate and error if validation is enabled and be allowed 
		 * if validation is disabled. 
		 * @param validate Flag indicating if validation is performed or not. 
		 */
		void SetValidateParameterNames( bool validate ) const;

	};

	/**
	 * MaterialCaster is the base interface for material casting interfaces. The interface 
	 * exports methods for defining input geometries & mapping image, materials, output 
	 * image paths & formats 
	 */
	class spMaterialCaster : public spProcessingObject
	{
		public:
		spMaterialCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spMaterialCaster();
		spMaterialCaster( const spMaterialCaster &p );
		spMaterialCaster & operator=( const spMaterialCaster &p );
		const spMaterialCaster* operator->() const;
		spMaterialCaster( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spMaterialCaster is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IMaterialCaster",type)==0) || (strcmp("spMaterialCaster",type)==0) )
				return true;
			return spProcessingObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spMaterialCaster 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spMaterialCaster handle 
		 * @return a handle to the spMaterialCaster object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spMaterialCaster SafeCast(spObject other);

		/**
		 * The settings object. 
		 */
		spMaterialCasterSettings GetMaterialCasterSettings(  ) const;

		/**
		 * The SourceTextures object. The SourceTextures object contains all textures 
		 * of the the source geometry. 
		 * @param value The texture table to which SourceTextures will be set. 
		 */
		void SetSourceTextures( const spTextureTable & value ) const;

		/**
		 * The SourceTextures object. The SourceTextures object contains all textures 
		 * of the the source geometry. 
		 */
		spTextureTable GetSourceTextures(  ) const;

		/**
		 * The SourceMaterials object. The SourceMaterials object contains all materials 
		 * of the the source geometry. The source geometry must have a "MaterialIds" field 
		 * that indices the material table. 
		 * @param value The material table to which SourceMaterials will be set. 
		 */
		void SetSourceMaterials( const spMaterialTable & value ) const;

		/**
		 * The SourceMaterials object. The SourceMaterials object contains all materials 
		 * of the the source geometry. The source geometry must have a "MaterialIds" field 
		 * that indices the material table. 
		 */
		spMaterialTable GetSourceMaterials(  ) const;

		/**
		 * The DestMaterialId object. If set, only the parts of the destination map that. 
		 * To disable, set to -1. 
		 * @param value The value to which DestMaterialId will be set. 
		 */
		void SetDestMaterialId( rid value ) const;

		/**
		 * The DestMaterialId object. If set, only the parts of the destination map that. 
		 * To disable, set to -1. 
		 */
		rid GetDestMaterialId(  ) const;

		/**
		 * The MappingImage object. The MappingImage object contains the mapping between 
		 * the Geometry and SourceGeometry objects. 
		 * @param value The mapping image to which MappingImage will be set. 
		 */
		void SetMappingImage( const spMappingImage & value ) const;

		/**
		 * The MappingImage object. The MappingImage object contains the mapping between 
		 * the Geometry and SourceGeometry objects. 
		 */
		spMappingImage GetMappingImage(  ) const;

		/**
		 * The OutputFilePath file path, where the output image will be placed. Note that 
		 * the extension will be appended the file path if it differs from the OutputImageFileFormat 
		 * set in the caster settings object. Either OutputImage or OutputFilePath must 
		 * be set. If OutputImage is set, then OutputFilePath is ignored. 
		 * @param value The string to which OutputFilePath will be set. 
		 */
		void SetOutputFilePath( const char * value ) const;

		/**
		 * The OutputFilePath file path, where the output image will be placed. Note that 
		 * the extension will be appended the file path if it differs from the OutputImageFileFormat 
		 * set in the caster settings object. Either OutputImage or OutputFilePath must 
		 * be set. If OutputImage is set, then OutputFilePath is ignored. 
		 */
		spString GetOutputFilePath(  ) const;

		/**
		 * The OutputImage object that will receive the image. The current contents of 
		 * the image will be removed, and the image will be written to the Colors field 
		 * of the ImageData object. Either OutputImage or OutputFilePath must be set. 
		 * If OutputImage is set, then OutputFilePath is ignored. 
		 * @param value The image data to which OutputImage will be set. 
		 */
		void SetOutputImage( const spImageData & value ) const;

		/**
		 * The OutputImage object that will receive the image. The current contents of 
		 * the image will be removed, and the image will be written to the Colors field 
		 * of the ImageData object. Either OutputImage or OutputFilePath must be set. 
		 * If OutputImage is set, then OutputFilePath is ignored. 
		 */
		spImageData GetOutputImage(  ) const;

		/**
		 * Create a new clone of the material caster, copying all settings. 
		 */
		spMaterialCaster NewCopy(  ) const;

	};

	/**
	 * MaterialCasterSettings is the base interface for material casting settings 
	 */
	class spMaterialCasterSettings : public spSettingsObject
	{
		public:
		spMaterialCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spMaterialCasterSettings();
		spMaterialCasterSettings( const spMaterialCasterSettings &p );
		spMaterialCasterSettings & operator=( const spMaterialCasterSettings &p );
		const spMaterialCasterSettings* operator->() const;
		spMaterialCasterSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spMaterialCasterSettings is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IMaterialCasterSettings",type)==0) || (strcmp("spMaterialCasterSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spMaterialCasterSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spMaterialCasterSettings handle 
		 * @return a handle to the spMaterialCasterSettings object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spMaterialCasterSettings SafeCast(spObject other);

		/**
		 * The name of the input material channel to cast. Existing user channels of any 
		 * arbitrary name in the input materials can be cast. 
		 * @param value The input material channel name. 
		 */
		void SetMaterialChannel( const char * value ) const;

		/**
		 * The name of the input material channel to cast. Existing user channels of any 
		 * arbitrary name in the input materials can be cast. 
		 */
		spString GetMaterialChannel(  ) const;

		/**
		 * The name of the input opacity channel to use for combining layers in most casters 
		 * and casting opacity in the opacitycaster. User channels of any arbitrary name 
		 * can be used. If the caster is run through a Pipeline object, the OpacityChannel 
		 * set here will also be set as the output materials OpacityChannel property. 
		 * @param value The desired material channel. 
		 */
		void SetOpacityChannel( const char * value ) const;

		/**
		 * The name of the input opacity channel to use for combining layers in most casters 
		 * and casting opacity in the opacitycaster. User channels of any arbitrary name 
		 * can be used. If the caster is run through a Pipeline object, the OpacityChannel 
		 * set here will also be set as the output materials OpacityChannel property. 
		 *  
		 */
		spString GetOpacityChannel(  ) const;

		/**
		 * The component in the opacity channel to use as opacity value. 
		 * @param value The desired component in the opacity material channel to use as 
		 * opacity value. 
		 */
		void SetOpacityChannelComponent( Simplygon::EColorComponent value ) const;

		/**
		 * The component in the opacity channel to use as opacity value. 
		 */
		Simplygon::EColorComponent GetOpacityChannelComponent(  ) const;

		/**
		 * The Dilation value. Where applicable, such as colors and normals, the caster 
		 * will fill empty pixels surrounding filled pixels with values mixed from the 
		 * filled ones. This setting sets how many pixels to fill outside the original 
		 * filled pixels. 
		 * @param value The value to which Dilation will be set. Value cannot be less 
		 * than 0. Value cannot be greater than 1000. 
		 */
		void SetDilation( unsigned int value ) const;

		/**
		 * The Dilation value. Where applicable, such as colors and normals, the caster 
		 * will fill empty pixels surrounding filled pixels with values mixed from the 
		 * filled ones. This setting sets how many pixels to fill outside the original 
		 * filled pixels. 
		 */
		unsigned int GetDilation(  ) const;

		/**
		 * The output pixel format 
		 * @param value The desired value to which OutputChannels will be set. 
		 */
		void SetOutputPixelFormat( Simplygon::EPixelFormat value ) const;

		/**
		 * The output pixel format 
		 */
		Simplygon::EPixelFormat GetOutputPixelFormat(  ) const;

		/**
		 * The type of dithering to use when creating the output object. 
		 * @param value The desired value of the DitherType to use. 
		 */
		void SetDitherType( Simplygon::EDitherPatterns value ) const;

		/**
		 * The type of dithering to use when creating the output object. 
		 */
		Simplygon::EDitherPatterns GetDitherType(  ) const;

		/**
		 * The fill mode determines what to do with the pixels that remain unfilled after 
		 * both the casting and dilation has been performed. Options are: None = Do not 
		 * fill remaining pixels Interpolate = linearly interpolate the closest samples 
		 *  NearestNeighbor = use the closest available pixel value without interpolation. 
		 * @param value The mode to which the fill mode will be set. 
		 */
		void SetFillMode( Simplygon::EAtlasFillMode value ) const;

		/**
		 * The fill mode determines what to do with the pixels that remain unfilled after 
		 * both the casting and dilation has been performed. Options are: None = Do not 
		 * fill remaining pixels Interpolate = linearly interpolate the closest samples 
		 *  NearestNeighbor = use the closest available pixel value without interpolation. 
		 *  
		 */
		Simplygon::EAtlasFillMode GetFillMode(  ) const;

		/**
		 * Enable or disable multisampling. 
		 * @param value The desired value of the flag. 
		 */
		void SetUseMultisampling( bool value ) const;

		/**
		 * Enable or disable multisampling. 
		 */
		bool GetUseMultisampling(  ) const;

		/**
		 * File format for output texture. 
		 * @param value The desired file format. 
		 */
		void SetOutputImageFileFormat( Simplygon::EImageOutputFormat value ) const;

		/**
		 * File format for output texture. 
		 */
		Simplygon::EImageOutputFormat GetOutputImageFileFormat(  ) const;

		/**
		 * DDS compression if output format is DDS. 
		 * @param value The desired DDS compression type. 
		 */
		void SetOutputDDSCompressionType( Simplygon::EDDSCompressionType value ) const;

		/**
		 * DDS compression if output format is DDS. 
		 */
		Simplygon::EDDSCompressionType GetOutputDDSCompressionType(  ) const;

	};

	/**
	 * ColorCaster is the interface used to cast basic color values. Currently supported 
	 * material color value types are Ambient, Diffuse and Specular + Shininess. 
	 */
	class spColorCaster : public spMaterialCaster
	{
		public:
		spColorCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spColorCaster();
		spColorCaster( const spColorCaster &p );
		spColorCaster & operator=( const spColorCaster &p );
		const spColorCaster* operator->() const;
		spColorCaster( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spColorCaster is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IColorCaster",type)==0) || (strcmp("spColorCaster",type)==0) )
				return true;
			return spMaterialCaster::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spColorCaster 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spColorCaster handle 
		 * @return a handle to the spColorCaster object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spColorCaster SafeCast(spObject other);

		/**
		 * If SkipCastingIfNoInputChannel is set to true, and the last processing skipped, 
		 * the LastCastingWasSkipped will be set to true. The initial value before the 
		 * first process will be set to false. 
		 */
		bool GetLastCastingWasSkipped(  ) const;

		/**
		 * The color caster settings object. 
		 * @return Color caster settings object. 
		 */
		spColorCasterSettings GetColorCasterSettings(  ) const;

	};

	/**
	 * ColorCasterSettings is the interface for basic color caster settings. 
	 */
	class spColorCasterSettings : public spMaterialCasterSettings
	{
		public:
		spColorCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spColorCasterSettings();
		spColorCasterSettings( const spColorCasterSettings &p );
		spColorCasterSettings & operator=( const spColorCasterSettings &p );
		const spColorCasterSettings* operator->() const;
		spColorCasterSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spColorCasterSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IColorCasterSettings",type)==0) || (strcmp("spColorCasterSettings",type)==0) )
				return true;
			return spMaterialCasterSettings::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spColorCasterSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spColorCasterSettings handle 
		 * @return a handle to the spColorCasterSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spColorCasterSettings SafeCast(spObject other);

		/**
		 * If set, the total opacity of the baked layers replaces the alpha value in the 
		 * output texture. 
		 * @param value The new BakeOpacityInAlpha value. 
		 * @return The current BakeOpacityInAlpha value 
		 */
		void SetBakeOpacityInAlpha( bool value ) const;

		/**
		 * If set, the total opacity of the baked layers replaces the alpha value in the 
		 * output texture. 
		 * @return The current BakeOpacityInAlpha value Default value is false 
		 */
		bool GetBakeOpacityInAlpha(  ) const;

		/**
		 * The opacity type determines how the opacity channel of this material should 
		 * be saved. To make (0.0->1.0) map to (transparent-opaque), use 'Opacity'. To 
		 * make (0.0->1.0) map to (opaque-transparent), use 'Transparency' 
		 * @param value The new opacity type. 
		 */
		void SetOutputOpacityType( Simplygon::EOpacityType value ) const;

		/**
		 * The opacity type determines how the opacity channel of this material should 
		 * be saved. To make (0.0->1.0) map to (transparent-opaque), use 'Opacity'. To 
		 * make (0.0->1.0) map to (opaque-transparent), use 'Transparency' 
		 */
		Simplygon::EOpacityType GetOutputOpacityType(  ) const;

		/**
		 * If this flag is set, the caster will only run if there is at least one input 
		 * material that has the main input channel which is to be cast. If the flag is 
		 * not set, the caster will always produce an output, even if it is totally empty/unset. 
		 * @param value The desired SkipCastingIfNoInputChannel flag. 
		 * @return The current SkipCastingIfNoInputChannel flag. 
		 */
		void SetSkipCastingIfNoInputChannel( bool value ) const;

		/**
		 * If this flag is set, the caster will only run if there is at least one input 
		 * material that has the main input channel which is to be cast. If the flag is 
		 * not set, the caster will always produce an output, even if it is totally empty/unset. 
		 * @return The current SkipCastingIfNoInputChannel flag. Default value is false 
		 *  
		 */
		bool GetSkipCastingIfNoInputChannel(  ) const;

		/**
		 * If set, output textures are exported in sRGB format. Input texture format is 
		 * determined by the flag in the corresponding texture node in the material definition. 
		 * @param value The desired sRGB flag. 
		 */
		void SetOutputSRGB( bool value ) const;

		/**
		 * If set, output textures are exported in sRGB format. Input texture format is 
		 * determined by the flag in the corresponding texture node in the material definition. 
		 *  
		 */
		bool GetOutputSRGB(  ) const;

	};

	/**
	 * OpacityCaster is the interface used to cast opacity values. To be used when 
	 * opacity is needed as a separate texture. IMPORTANT: Make sure to set OpacityChannel 
	 * to the channel you want to cast, since this caster bakes opacity rather than 
	 * the channel set in the MaterialChannel setting like most other casters. 
	 */
	class spOpacityCaster : public spMaterialCaster
	{
		public:
		spOpacityCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spOpacityCaster();
		spOpacityCaster( const spOpacityCaster &p );
		spOpacityCaster & operator=( const spOpacityCaster &p );
		const spOpacityCaster* operator->() const;
		spOpacityCaster( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spOpacityCaster is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IOpacityCaster",type)==0) || (strcmp("spOpacityCaster",type)==0) )
				return true;
			return spMaterialCaster::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spOpacityCaster 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spOpacityCaster handle 
		 * @return a handle to the spOpacityCaster object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spOpacityCaster SafeCast(spObject other);

		/**
		 * The opacity caster settings object. 
		 * @return Opacity caster settings object. 
		 */
		spOpacityCasterSettings GetOpacityCasterSettings(  ) const;

	};

	/**
	 * OpacityCasterSettings is the interface used to manage settings for an opacity 
	 * caster. IMPORTANT: Make sure to set the OpacityChannel setting to the channel 
	 * you want to cast, since this caster bakes opacity rather than the channel set 
	 * in the MaterialChannel setting like most other casters. 
	 */
	class spOpacityCasterSettings : public spMaterialCasterSettings
	{
		public:
		spOpacityCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spOpacityCasterSettings();
		spOpacityCasterSettings( const spOpacityCasterSettings &p );
		spOpacityCasterSettings & operator=( const spOpacityCasterSettings &p );
		const spOpacityCasterSettings* operator->() const;
		spOpacityCasterSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spOpacityCasterSettings is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IOpacityCasterSettings",type)==0) || (strcmp("spOpacityCasterSettings",type)==0) )
				return true;
			return spMaterialCasterSettings::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spOpacityCasterSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spOpacityCasterSettings handle 
		 * @return a handle to the spOpacityCasterSettings object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spOpacityCasterSettings SafeCast(spObject other);

		/**
		 * If set, output textures are exported in sRGB format. Input texture format is 
		 * determined by the flag in the corresponding texture node in the material definition. 
		 * @param value The desired sRGB flag. 
		 */
		void SetOutputSRGB( bool value ) const;

		/**
		 * If set, output textures are exported in sRGB format. Input texture format is 
		 * determined by the flag in the corresponding texture node in the material definition. 
		 *  
		 */
		bool GetOutputSRGB(  ) const;

		/**
		 * The opacity type determines how the opacity channel of this material should 
		 * be saved. To make (0.0->1.0) map to (transparent-opaque), use 'Opacity'. To 
		 * make (0.0->1.0) map to (opaque-transparent), use 'Transparency' 
		 * @param value The new opacity type. 
		 */
		void SetOutputOpacityType( Simplygon::EOpacityType value ) const;

		/**
		 * The opacity type determines how the opacity channel of this material should 
		 * be saved. To make (0.0->1.0) map to (transparent-opaque), use 'Opacity'. To 
		 * make (0.0->1.0) map to (opaque-transparent), use 'Transparency' 
		 */
		Simplygon::EOpacityType GetOutputOpacityType(  ) const;

	};

	/**
	 * NormalCaster is the interface used to cast normals data onto the receiving geometry. 
	 */
	class spNormalCaster : public spMaterialCaster
	{
		public:
		spNormalCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spNormalCaster();
		spNormalCaster( const spNormalCaster &p );
		spNormalCaster & operator=( const spNormalCaster &p );
		const spNormalCaster* operator->() const;
		spNormalCaster( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spNormalCaster is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("INormalCaster",type)==0) || (strcmp("spNormalCaster",type)==0) )
				return true;
			return spMaterialCaster::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spNormalCaster 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spNormalCaster handle 
		 * @return a handle to the spNormalCaster object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spNormalCaster SafeCast(spObject other);

		/**
		 * The normal caster settings object. 
		 * @return Normal caster settings object. 
		 */
		spNormalCasterSettings GetNormalCasterSettings(  ) const;

	};

	/**
	 * NormalCasterSettings is the interface used to manage settings for a normal caster 
	 */
	class spNormalCasterSettings : public spMaterialCasterSettings
	{
		public:
		spNormalCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spNormalCasterSettings();
		spNormalCasterSettings( const spNormalCasterSettings &p );
		spNormalCasterSettings & operator=( const spNormalCasterSettings &p );
		const spNormalCasterSettings* operator->() const;
		spNormalCasterSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spNormalCasterSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("INormalCasterSettings",type)==0) || (strcmp("spNormalCasterSettings",type)==0) )
				return true;
			return spMaterialCasterSettings::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spNormalCasterSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spNormalCasterSettings handle 
		 * @return a handle to the spNormalCasterSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spNormalCasterSettings SafeCast(spObject other);

		/**
		 * If set, then normals will be flipped if they are back facing, i.e. pointing 
		 * into the surface. This may introduce artifacts on geometries that have correctly 
		 * facing normals, so only use for geometries with known back-facing normals. 
		 * @param value The value to which the FlipBackfacingNormals bool is to be set. 
		 *  
		 */
		void SetFlipBackfacingNormals( bool value ) const;

		/**
		 * If set, then normals will be flipped if they are back facing, i.e. pointing 
		 * into the surface. This may introduce artifacts on geometries that have correctly 
		 * facing normals, so only use for geometries with known back-facing normals. 
		 *  
		 */
		bool GetFlipBackfacingNormals(  ) const;

		/**
		 * If set, then the generated normal map will be in tangent space. Please note 
		 * that the geometry casted to must contain tangent space fields. 
		 * @param value The value to which the GenerateTangentSpaceNormals bool is to 
		 * be set. 
		 */
		void SetGenerateTangentSpaceNormals( bool value ) const;

		/**
		 * If set, then the generated normal map will be in tangent space. Please note 
		 * that the geometry casted to must contain tangent space fields. 
		 */
		bool GetGenerateTangentSpaceNormals(  ) const;

		/**
		 * If set, the green channel is assumed to point along the negative bitangent 
		 * instead of the positive. This is roughly equivalent to switching between left- 
		 * and righthanded, but some rounding may differ. 
		 * @param value The value the FlipGreen bool is to be set. 
		 */
		void SetFlipGreen( bool value ) const;

		/**
		 * If set, the green channel is assumed to point along the negative bitangent 
		 * instead of the positive. This is roughly equivalent to switching between left- 
		 * and righthanded, but some rounding may differ. 
		 */
		bool GetFlipGreen(  ) const;

		/**
		 * If set, the normal caster calculates the bitangent used for encoding per-fragment 
		 * using the normal, tangent and bitangent sign instead of interpolating the actual 
		 * bitangent vertex data. This needs to match the behavior of the renderer to 
		 * not produce rendering artifacts. 
		 * @param value The value the CalculateBitangentPerFragment bool is to be set. 
		 *  
		 */
		void SetCalculateBitangentPerFragment( bool value ) const;

		/**
		 * If set, the normal caster calculates the bitangent used for encoding per-fragment 
		 * using the normal, tangent and bitangent sign instead of interpolating the actual 
		 * bitangent vertex data. This needs to match the behavior of the renderer to 
		 * not produce rendering artifacts. 
		 */
		bool GetCalculateBitangentPerFragment(  ) const;

		/**
		 * If set, the normal caster normalizes the normal and tangent data used for encoding 
		 * after interpolation. This needs to match the behavior of the renderer to not 
		 * produce rendering artifacts. 
		 * @param value The value the NormalizeInterpolatedTangentSpace bool is to be 
		 * set. 
		 */
		void SetNormalizeInterpolatedTangentSpace( bool value ) const;

		/**
		 * If set, the normal caster normalizes the normal and tangent data used for encoding 
		 * after interpolation. This needs to match the behavior of the renderer to not 
		 * produce rendering artifacts. 
		 */
		bool GetNormalizeInterpolatedTangentSpace(  ) const;

	};

	/**
	 * Repairs normals on a processed geometry. 
	 */
	class spNormalRepairer : public spProcessingObject
	{
		public:
		spNormalRepairer( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spNormalRepairer();
		spNormalRepairer( const spNormalRepairer &p );
		spNormalRepairer & operator=( const spNormalRepairer &p );
		const spNormalRepairer* operator->() const;
		spNormalRepairer( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spNormalRepairer is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("INormalRepairer",type)==0) || (strcmp("spNormalRepairer",type)==0) )
				return true;
			return spProcessingObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spNormalRepairer 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spNormalRepairer handle 
		 * @return a handle to the spNormalRepairer object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spNormalRepairer SafeCast(spObject other);

		/**
		 * The scene. 
		 * @param value The scene object to use. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The scene. 
		 */
		spScene GetScene(  ) const;

		/**
		 * The ID of the SelectionSet containing the meshes to process If the ID is -1, 
		 * all meshes are selected. 
		 * @param value The selection set id to use. 
		 */
		void SetProcessSelectionSetID( rid value ) const;

		/**
		 * The ID of the SelectionSet containing the meshes to process If the ID is -1, 
		 * all meshes are selected. 
		 */
		rid GetProcessSelectionSetID(  ) const;

		/**
		 * Which selection set should be processed. If SetName is not found, all geometries 
		 * in the scene will be processed. If both selection set name and ID are set, 
		 * the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetProcessSelectionSetName( const char * value ) const;

		/**
		 * Which selection set should be processed. If SetName is not found, all geometries 
		 * in the scene will be processed. If both selection set name and ID are set, 
		 * the name will be used. 
		 */
		spString GetProcessSelectionSetName(  ) const;

		/**
		 * Set/Get whether to recalculate new normals. 
		 * @param value The new value of RecalculateNormals. 
		 */
		void SetRecalculateNormals( bool value ) const;

		/**
		 * Set/Get whether to recalculate new normals. 
		 */
		bool GetRecalculateNormals(  ) const;

		/**
		 * The edge angle in degrees above which an edge is considered "hard". 
		 * @param value The value to which HardEdgeAngle is to be set. Value cannot be 
		 * less than 0. Value cannot be greater than 180. 
		 */
		void SetHardEdgeAngle( real value ) const;

		/**
		 * The edge angle in degrees above which an edge is considered "hard". 
		 */
		real GetHardEdgeAngle(  ) const;

		/**
		 * The ScaleByArea flag. If set, the influence of a triangle normal upon the vertex 
		 * normals is scaled by the area of the triangle. 
		 * @param value The value to which the ScaleByArea bool is to be set. 
		 */
		void SetScaleByArea( bool value ) const;

		/**
		 * The ScaleByArea flag. If set, the influence of a triangle normal upon the vertex 
		 * normals is scaled by the area of the triangle. 
		 */
		bool GetScaleByArea(  ) const;

		/**
		 * The ScaleByAngle flag. If set, the influence of a triangle normal upon the 
		 * vertex normals is scaled by the angle of the corner at the vertex. 
		 * @param value The value to which the ScaleByAngle bool is to be set. 
		 */
		void SetScaleByAngle( bool value ) const;

		/**
		 * The ScaleByAngle flag. If set, the influence of a triangle normal upon the 
		 * vertex normals is scaled by the angle of the corner at the vertex. 
		 */
		bool GetScaleByAngle(  ) const;

		/**
		 * The RepairOnlyInvalidNormals flag If set, then only those normals that are 
		 * invalid (backfacing, zero length etc) will be fixed. 
		 * @param value The value to which the RepairOnlyInvalidNormals bool is to be 
		 * set. 
		 */
		void SetRepairOnlyInvalidNormals( bool value ) const;

		/**
		 * The RepairOnlyInvalidNormals flag If set, then only those normals that are 
		 * invalid (backfacing, zero length etc) will be fixed. 
		 */
		bool GetRepairOnlyInvalidNormals(  ) const;

		/**
		 * The SnapNormalsToFlatSurfaces flag. If set, perfectly flat shaded surfaces 
		 * will be created, where possible. Normals adjacent to perfectly geometrically 
		 * flat surfaces will be recalculated to have the same direction as for those 
		 * of the adjacent flat surface. 
		 * @param value To use for SnapNormalsToFlatSurfaces. 
		 */
		void SetSnapNormalsToFlatSurfaces( bool value ) const;

		/**
		 * The SnapNormalsToFlatSurfaces flag. If set, perfectly flat shaded surfaces 
		 * will be created, where possible. Normals adjacent to perfectly geometrically 
		 * flat surfaces will be recalculated to have the same direction as for those 
		 * of the adjacent flat surface. 
		 */
		bool GetSnapNormalsToFlatSurfaces(  ) const;

		/**
		 * Set/Get setting for whether and how to flip the faces and or normals in the 
		 * scene. None - Don't flip Automatic - Automatically detect and fix backfaces 
		 * per part MakeDoubleSided - Append inverted winded triangles with inverted normals 
		 * to the geometry InvertFaces - Invert the winding of the triangles InvertNormals 
		 * - Invert the vertex normals InvertFacesAndNormals - Invert winding of all triangles 
		 * and vertex normals. 
		 * @param value The desired flag value. 
		 */
		void SetFlipFacesAndNormals( Simplygon::EFlipFacesAndNormals value ) const;

		/**
		 * Set/Get setting for whether and how to flip the faces and or normals in the 
		 * scene. None - Don't flip Automatic - Automatically detect and fix backfaces 
		 * per part MakeDoubleSided - Append inverted winded triangles with inverted normals 
		 * to the geometry InvertFaces - Invert the winding of the triangles InvertNormals 
		 * - Invert the vertex normals InvertFacesAndNormals - Invert winding of all triangles 
		 * and vertex normals. 
		 */
		Simplygon::EFlipFacesAndNormals GetFlipFacesAndNormals(  ) const;

		/**
		 * The Geometry object. 
		 * @param value The geometry that is to be repaired. 
		 */
		void SetGeometry( const spGeometryData & value ) const;

		/**
		 * The Geometry object. 
		 */
		spGeometryData GetGeometry(  ) const;

		/**
		 * Set true to allow for double sided triangles. 
		 * @param value The desired value of the flag. 
		 */
		void SetAutoCorrectionAllowsDoubleSided( bool value ) const;

		/**
		 * The threshold ratio for auto correction. 
		 * @param value The desired threshold ratio. 
		 */
		void SetAutoCorrectionRatioThreshold( real value ) const;

		/**
		 * The threshold ratio for auto correction to treat triangle as single sided. 
		 * @param value The desired threshold. 
		 */
		void SetAutoCorrectionSingleSidedThreshold( real value ) const;

	};

	/**
	 * DisplacementCaster is used to store the delta-values between the original and 
	 * processed geometries. The values are divided by a scaling value, and clamped 
	 * into the -1 -> 1 range before being stored into an image. 
	 */
	class spDisplacementCaster : public spMaterialCaster
	{
		public:
		spDisplacementCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spDisplacementCaster();
		spDisplacementCaster( const spDisplacementCaster &p );
		spDisplacementCaster & operator=( const spDisplacementCaster &p );
		const spDisplacementCaster* operator->() const;
		spDisplacementCaster( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spDisplacementCaster is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IDisplacementCaster",type)==0) || (strcmp("spDisplacementCaster",type)==0) )
				return true;
			return spMaterialCaster::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spDisplacementCaster 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spDisplacementCaster handle 
		 * @return a handle to the spDisplacementCaster object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spDisplacementCaster SafeCast(spObject other);

		/**
		 * The displacement caster settings object. 
		 * @return Displacement caster settings object. 
		 */
		spDisplacementCasterSettings GetDisplacementCasterSettings(  ) const;

	};

	/**
	 * DisplacementCasterSettings is used to store the settings for a displacement 
	 * caster 
	 */
	class spDisplacementCasterSettings : public spMaterialCasterSettings
	{
		public:
		spDisplacementCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spDisplacementCasterSettings();
		spDisplacementCasterSettings( const spDisplacementCasterSettings &p );
		spDisplacementCasterSettings & operator=( const spDisplacementCasterSettings &p );
		const spDisplacementCasterSettings* operator->() const;
		spDisplacementCasterSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spDisplacementCasterSettings is a or 
		 * is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IDisplacementCasterSettings",type)==0) || (strcmp("spDisplacementCasterSettings",type)==0) )
				return true;
			return spMaterialCasterSettings::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spDisplacementCasterSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spDisplacementCasterSettings handle 
		 * @return a handle to the spDisplacementCasterSettings object, if the cast can 
		 * be made, and a NULL handle otherwise 
		 */
		static spDisplacementCasterSettings SafeCast(spObject other);

		/**
		 * All the delta values are divided by this value before storing them into an 
		 * image. 
		 * @param value The desired DistanceScaling value. Value cannot be less than 0. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetDistanceScaling( real value ) const;

		/**
		 * All the delta values are divided by this value before storing them into an 
		 * image. 
		 */
		real GetDistanceScaling(  ) const;

		/**
		 * If set to true, the size of the displacement vector components in the direction 
		 * of the interpolated normal are stored in the displacement map, instead of the 
		 * displacement vectors. 
		 * @param value The desired GenerateScalarDisplacement flag. 
		 */
		void SetGenerateScalarDisplacement( bool value ) const;

		/**
		 * If set to true, the size of the displacement vector components in the direction 
		 * of the interpolated normal are stored in the displacement map, instead of the 
		 * displacement vectors. 
		 */
		bool GetGenerateScalarDisplacement(  ) const;

		/**
		 * If set, the displacement vectors are transformed into the destination object 
		 * tangent space. 
		 * @param value The desired GenerateTangentSpaceDisplacement flag. 
		 */
		void SetGenerateTangentSpaceDisplacement( bool value ) const;

		/**
		 * If set, the displacement vectors are transformed into the destination object 
		 * tangent space. 
		 */
		bool GetGenerateTangentSpaceDisplacement(  ) const;

		/**
		 * The texture coordinate level to use for the tangent space displacement vectors. 
		 * @param value The desired NormalMapTextureLevel value. Value cannot be less 
		 * than 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetNormalMapTexCoordLevel( rid value ) const;

		/**
		 * The texture coordinate level to use for the tangent space displacement vectors. 
		 *  
		 */
		rid GetNormalMapTexCoordLevel(  ) const;

	};

	/**
	 * TangentCalculator calculates tangent vectors for geometry data objects. One 
	 * corner field of texture coordinates must exist, as well as normals. The tangents 
	 * are placed into two corner fields called "Tangents" and "Bitangents". If any 
	 * of these fields already exists, it is replaced by the new field. 
	 */
	class spTangentCalculator : public spObject
	{
		public:
		spTangentCalculator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spTangentCalculator();
		spTangentCalculator( const spTangentCalculator &p );
		spTangentCalculator & operator=( const spTangentCalculator &p );
		const spTangentCalculator* operator->() const;
		spTangentCalculator( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spTangentCalculator is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ITangentCalculator",type)==0) || (strcmp("spTangentCalculator",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spTangentCalculator 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spTangentCalculator handle 
		 * @return a handle to the spTangentCalculator object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spTangentCalculator SafeCast(spObject other);

		/**
		 * Calculates the tangents of a geometry data object. 
		 * @param geom The geometry object receives new fields, as described in the class 
		 * description. 
		 */
		void CalculateTangents( const spGeometryData & geom ) const;

		/**
		 * Calculates the tangents of a tree of scene nodes (only the geometry nodes of 
		 * course). 
		 * @param node Is the scene node that will have itselfs and its childrens tangents 
		 * calculated. 
		 */
		void CalculateTangentsForNodeHierarchy( const spSceneNode & node ) const;

		/**
		 * The TexCoords field id to use for the tangent calculation. If set to -1, all 
		 * texture coordinates will get corresponding tangent fields. 
		 * @param value The desired texcoordset id. 
		 */
		void SetTexCoordsSetId( rid value ) const;

		/**
		 * The TexCoords field id to use for the tangent calculation. If set to -1, all 
		 * texture coordinates will get corresponding tangent fields. 
		 */
		rid GetTexCoordsSetId(  ) const;

		/**
		 * Sets/Gets the tangent calculator type, types listed in TangentSpaceMethod. 
		 * @param type The desired tangent calculator type. 
		 */
		void SetTangentCalculatorType( Simplygon::ETangentSpaceMethod type ) const;

		/**
		 * Sets/Gets the tangent calculator type, types listed in TangentSpaceMethod. 
		 *  
		 */
		Simplygon::ETangentSpaceMethod GetTangentCalculatorType(  ) const;

		/**
		 * Inverts the V component of the texcoords used for tangent calculation. This 
		 * essentially switches between right- and lefthanded, i.e. TangentCalculatorType 
		 * = OrthonormalRightHanded and InvertV = true generates equivalent tangents to 
		 *  TangentCalculatorType = OrthonormalLeftHanded. 
		 * @param value The desired value of InvertV. 
		 */
		void SetInvertV( bool value ) const;

		/**
		 * Inverts the V component of the texcoords used for tangent calculation. This 
		 * essentially switches between right- and lefthanded, i.e. TangentCalculatorType 
		 * = OrthonormalRightHanded and InvertV = true generates equivalent tangents to 
		 *  TangentCalculatorType = OrthonormalLeftHanded. 
		 */
		bool GetInvertV(  ) const;

	};

	/**
	 * Settings for handling unconnected parts and unwanted gaps in the geometry. It 
	 * consists of two parts, Welding and T-junction removal. Welding merges vertices 
	 * that are closer than a set distance from each other. T-junction removal finds 
	 * open edges that lies within a set distance from other open edges, but without 
	 * matching vertices. It then splits those triangles into smaller, matching triangles 
	 * and fuses them together. 
	 */
	class spRepairSettings : public spSettingsObject
	{
		public:
		spRepairSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spRepairSettings();
		spRepairSettings( const spRepairSettings &p );
		spRepairSettings & operator=( const spRepairSettings &p );
		const spRepairSettings* operator->() const;
		spRepairSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spRepairSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IRepairSettings",type)==0) || (strcmp("spRepairSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spRepairSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spRepairSettings handle 
		 * @return a handle to the spRepairSettings object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spRepairSettings SafeCast(spObject other);

		/**
		 * The T-Junction distance, below which, the T-Junctions will be welded. 
		 * @param value The value to which TJuncDist will be set. Value cannot be less 
		 * than 0. Value cannot be greater than REAL_MAX. 
		 */
		void SetTJuncDist( real value ) const;

		/**
		 * The T-Junction distance, below which, the T-Junctions will be welded. 
		 */
		real GetTJuncDist(  ) const;

		/**
		 * If set, t-junctions will be removed. If enabled, it also requires UseWelding 
		 * to be on. 
		 * @param value The bool to which UseTJunctionRemover will be set. 
		 */
		void SetUseTJunctionRemover( bool value ) const;

		/**
		 * If set, t-junctions will be removed. If enabled, it also requires UseWelding 
		 * to be on. 
		 */
		bool GetUseTJunctionRemover(  ) const;

		/**
		 * The welding distance below which the vertices will be welded. 
		 * @param value The value to which WeldDist will be set. Value cannot be less 
		 * than 0. Value cannot be greater than REAL_MAX. 
		 */
		void SetWeldDist( real value ) const;

		/**
		 * The welding distance below which the vertices will be welded. 
		 */
		real GetWeldDist(  ) const;

		/**
		 * If set, only vertices that are on the border (as reported by the VertexBorder 
		 * boolean field) are considered for the welding. 
		 * @param value The bool to which WeldOnlyBorderVertices will be set. 
		 */
		void SetWeldOnlyBorderVertices( bool value ) const;

		/**
		 * If set, only vertices that are on the border (as reported by the VertexBorder 
		 * boolean field) are considered for the welding. 
		 */
		bool GetWeldOnlyBorderVertices(  ) const;

		/**
		 * If set, only vertices that are within the same material are welded. Vertices 
		 * on material borders are locked. 
		 * @param value The bool to which WeldOnlyWithinMaterial will be set. 
		 */
		void SetWeldOnlyWithinMaterial( bool value ) const;

		/**
		 * If set, only vertices that are within the same material are welded. Vertices 
		 * on material borders are locked. 
		 */
		bool GetWeldOnlyWithinMaterial(  ) const;

		/**
		 * If set, only vertices that are within the same scene node are welded. 
		 * @param value The bool to which WeldOnlyWithinSceneNode will be set. 
		 */
		void SetWeldOnlyWithinSceneNode( bool value ) const;

		/**
		 * If set, only vertices that are within the same scene node are welded. 
		 */
		bool GetWeldOnlyWithinSceneNode(  ) const;

		/**
		 * If set, only vertices that belong to different scene nodes are considered for 
		 * the welding. Affects both welder and t-junction remover. 
		 * @param value The bool to which WeldOnlyBetweenSceneNode will be set. 
		 */
		void SetWeldOnlyBetweenSceneNodes( bool value ) const;

		/**
		 * If set, only vertices that belong to different scene nodes are considered for 
		 * the welding. Affects both welder and t-junction remover. 
		 */
		bool GetWeldOnlyBetweenSceneNodes(  ) const;

		/**
		 * If set, vertices within each others welding distance will be welded together. 
		 * @param value The bool to which UseWelding will be set. 
		 */
		void SetUseWelding( bool value ) const;

		/**
		 * If set, vertices within each others welding distance will be welded together. 
		 *  
		 */
		bool GetUseWelding(  ) const;

		/**
		 * The number of progressive passes. Minimum is 1, but higher numbers give a better 
		 * quality, at the expense of longer running time. 
		 * @param value The integer to which ProgressivePasses will be set. Value cannot 
		 * be less than 1. Value cannot be greater than 10. 
		 */
		void SetProgressivePasses( unsigned int value ) const;

		/**
		 * The number of progressive passes. Minimum is 1, but higher numbers give a better 
		 * quality, at the expense of longer running time. 
		 */
		unsigned int GetProgressivePasses(  ) const;

	};

	/**
	 * Settings for the Simplygon Reduction/Remeshing classes With the BoneSettings 
	 * object, the user can setup all the parameters for how the BoneLOD processor 
	 * should simplify the links between geometries and bones. Bones can be un-linked 
	 * from the geometry either with a set ratio or depending on a selected pixel size 
	 * on screen. 
	 */
	class spBoneSettings : public spSettingsObject
	{
		public:
		spBoneSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spBoneSettings();
		spBoneSettings( const spBoneSettings &p );
		spBoneSettings & operator=( const spBoneSettings &p );
		const spBoneSettings* operator->() const;
		spBoneSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spBoneSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IBoneSettings",type)==0) || (strcmp("spBoneSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spBoneSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spBoneSettings handle 
		 * @return a handle to the spBoneSettings object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spBoneSettings SafeCast(spObject other);

		/**
		 * Set bone reduction targets and stop condition used in the bone reduction. 
		 * @param stopCondition The value to which BoneReductionTargetStopCondition will 
		 * be set. 
		 * @param useBoneRatio The value to which BoneReductionTargetBoneRatioEnabled 
		 * will be set. 
		 * @param useBoneCount The value to which BoneReductionTargetBoneCountEnabled 
		 * will be set. 
		 * @param useMaxDeviation The value to which BoneReductionTargetMaxDeviationEnabled 
		 * will be set. 
		 * @param useOnScreenSize The value to which BoneReductionTargetOnScreenSizeEnabled 
		 * will be set. 
		 */
		void SetBoneReductionTargets( Simplygon::EStopCondition stopCondition , bool useBoneRatio , bool useBoneCount , bool useMaxDeviation , bool useOnScreenSize ) const;

		/**
		 * Enable bone ratio as a reduction target. The reducer will stop when the set 
		 * bone-ratio has been reached. 
		 * @param value The desired value of BoneRatioEnabled. 
		 */
		void SetBoneReductionTargetBoneRatioEnabled( bool value ) const;

		/**
		 * Enable bone ratio as a reduction target. The reducer will stop when the set 
		 * bone-ratio has been reached. 
		 */
		bool GetBoneReductionTargetBoneRatioEnabled(  ) const;

		/**
		 * Enable bone count as a reduction target. The reducer will stop when the set 
		 * bone count has been reached. 
		 * @param value The desired value of BoneCountEnabled. 
		 */
		void SetBoneReductionTargetBoneCountEnabled( bool value ) const;

		/**
		 * Enable bone count as a reduction target. The reducer will stop when the set 
		 * bone count has been reached. 
		 */
		bool GetBoneReductionTargetBoneCountEnabled(  ) const;

		/**
		 * Enable max deviation as a reduction target. The reducer will stop when the 
		 * set max deviation has been reached. 
		 * @param value The desired value of MaxDeviationEnabled. 
		 */
		void SetBoneReductionTargetMaxDeviationEnabled( bool value ) const;

		/**
		 * Enable max deviation as a reduction target. The reducer will stop when the 
		 * set max deviation has been reached. 
		 */
		bool GetBoneReductionTargetMaxDeviationEnabled(  ) const;

		/**
		 * Enable on screen size as a reduction target. The reducer will stop when the 
		 * set on screen size has been reached. 
		 * @param value Value to set if on screen size should be used in the reduction. 
		 *  
		 */
		void SetBoneReductionTargetOnScreenSizeEnabled( bool value ) const;

		/**
		 * Enable on screen size as a reduction target. The reducer will stop when the 
		 * set on screen size has been reached. 
		 */
		bool GetBoneReductionTargetOnScreenSizeEnabled(  ) const;

		/**
		 * The stop condition for the bone reducer. Any: the reducer will stop when any 
		 * single one of the set reduction targets have been reached. All: the reducer 
		 * will stop when all enabled reduction targets have been set. 
		 * @param value The flag to which StopCondition will be set. 
		 */
		void SetBoneReductionTargetStopCondition( Simplygon::EStopCondition value ) const;

		/**
		 * The stop condition for the bone reducer. Any: the reducer will stop when any 
		 * single one of the set reduction targets have been reached. All: the reducer 
		 * will stop when all enabled reduction targets have been set. 
		 */
		Simplygon::EStopCondition GetBoneReductionTargetStopCondition(  ) const;

		/**
		 * The desired bone reduction ratio. The range is 0->1. 
		 * @param value The value to which ReductionRatio will be set. Value cannot be 
		 * less than 0. Value cannot be greater than 1. 
		 */
		void SetBoneReductionTargetBoneRatio( real value ) const;

		/**
		 * The desired bone reduction ratio. The range is 0->1. 
		 */
		real GetBoneReductionTargetBoneRatio(  ) const;

		/**
		 * The desired bone count. The range is 0->inf. 
		 * @param value The value to which BoneCount will be set. Value cannot be less 
		 * than 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetBoneReductionTargetBoneCount( unsigned int value ) const;

		/**
		 * The desired bone count. The range is 0->inf. 
		 */
		unsigned int GetBoneReductionTargetBoneCount(  ) const;

		/**
		 * The MaxDeviation value, the maximum surface-deviation between the reduced geometry 
		 * and the original. 
		 * @param value The value to which MaxDeviation will be set. Value cannot be less 
		 * than 0. Value cannot be greater than REAL_MAX. 
		 */
		void SetBoneReductionTargetMaxDeviation( real value ) const;

		/**
		 * The MaxDeviation value, the maximum surface-deviation between the reduced geometry 
		 * and the original. 
		 */
		real GetBoneReductionTargetMaxDeviation(  ) const;

		/**
		 * The OnScreenSize value, the maximum surface-deviation between the reduced geometry 
		 * and the original. 
		 * @param value The value to which OnScreenSize will be set. Value cannot be less 
		 * than 20. Value cannot be greater than 4000. 
		 */
		void SetBoneReductionTargetOnScreenSize( unsigned int value ) const;

		/**
		 * The OnScreenSize value, the maximum surface-deviation between the reduced geometry 
		 * and the original. 
		 */
		unsigned int GetBoneReductionTargetOnScreenSize(  ) const;

		/**
		 * Decides the maximum limit of how many bones can be connected to each vertex. 
		 * If for example set to 1, then each vertex will only be linked to 1 bone. 
		 * @param value The desired maximum bones per vertex. Value cannot be less than 
		 * 0. Value cannot be greater than SG_NUM_SUPPORTED_BONES_PER_VERTEX. 
		 */
		void SetMaxBonePerVertex( unsigned int value ) const;

		/**
		 * Decides the maximum limit of how many bones can be connected to each vertex. 
		 * If for example set to 1, then each vertex will only be linked to 1 bone. 
		 */
		unsigned int GetMaxBonePerVertex(  ) const;

		/**
		 * Decides whether unused bones should be removed. 
		 * @param value The desired flag value. 
		 */
		void SetRemoveUnusedBones( bool value ) const;

		/**
		 * Decides whether unused bones should be removed. 
		 */
		bool GetRemoveUnusedBones(  ) const;

		/**
		 * Decides whether unused bones should be removed. 
		 * @param value The desired flag value. 
		 */
		void SetLimitBonesPerVertex( bool value ) const;

		/**
		 * Decides whether unused bones should be removed. 
		 */
		bool GetLimitBonesPerVertex(  ) const;

		/**
		 * Enables or disables the bone reduction processing that actually removes bones. 
		 * Even with this flag off, the bones per vertex can still be limited. 
		 * @param value The desired flag value. 
		 */
		void SetUseBoneReducer( bool value ) const;

		/**
		 * Enables or disables the bone reduction processing that actually removes bones. 
		 * Even with this flag off, the bones per vertex can still be limited. 
		 */
		bool GetUseBoneReducer(  ) const;

		/**
		 * The ID of the selection set that contains all of the bones that will be locked, 
		 * and cannot be removed in the BoneLOD process. If a bone is locked, all its 
		 * ancestors will be locked also. If the ID is -1, then no bones are selected. 
		 * @param value The ID of the selection set. Value cannot be less than -1. 
		 */
		void SetLockBoneSelectionSetID( rid value ) const;

		/**
		 * The ID of the selection set that contains all of the bones that will be locked, 
		 * and cannot be removed in the BoneLOD process. If a bone is locked, all its 
		 * ancestors will be locked also. If the ID is -1, then no bones are selected. 
		 *  
		 */
		rid GetLockBoneSelectionSetID(  ) const;

		/**
		 * The name of the selection set that contains all of the bones that will be locked, 
		 * and cannot be removed in the BoneLOD process. If a bone is locked, all its 
		 * ancestors will be locked also. If both name and id are set for the locked selection 
		 * set, the name will be used. 
		 * @param value The name of the selection set. 
		 */
		void SetLockBoneSelectionSetName( const char * value ) const;

		/**
		 * The name of the selection set that contains all of the bones that will be locked, 
		 * and cannot be removed in the BoneLOD process. If a bone is locked, all its 
		 * ancestors will be locked also. If both name and id are set for the locked selection 
		 * set, the name will be used. 
		 */
		spString GetLockBoneSelectionSetName(  ) const;

		/**
		 * The ID of the selection set that contains all of the bones that will be forced 
		 * to be removed in the BoneLOD process, UNLESS they are locked. If a bone is 
		 * set to be removed, all its descendants will be removed also. If both name and 
		 * id are set for the remove selection set, the name will be used. 
		 * @param value The ID of the selection set. Value cannot be less than -1. 
		 */
		void SetRemoveBoneSelectionSetID( rid value ) const;

		/**
		 * The ID of the selection set that contains all of the bones that will be forced 
		 * to be removed in the BoneLOD process, UNLESS they are locked. If a bone is 
		 * set to be removed, all its descendants will be removed also. If both name and 
		 * id are set for the remove selection set, the name will be used. 
		 */
		rid GetRemoveBoneSelectionSetID(  ) const;

		/**
		 * The name of the selection set that contains all of the bones that will be forced 
		 * to be removed in the BoneLOD process, UNLESS they are locked. If a bone is 
		 * set to be removed, all its descendants will be removed also. If both name and 
		 * id are set for the remove selection set, the name will be used. 
		 * @param value The name of the selection set. 
		 */
		void SetRemoveBoneSelectionSetName( const char * value ) const;

		/**
		 * The name of the selection set that contains all of the bones that will be forced 
		 * to be removed in the BoneLOD process, UNLESS they are locked. If a bone is 
		 * set to be removed, all its descendants will be removed also. If both name and 
		 * id are set for the remove selection set, the name will be used. 
		 */
		spString GetRemoveBoneSelectionSetName(  ) const;

	};

	/**
	 * Settings for the ReductionProcessor class. Handles all the settings for Simplygons 
	 * simplification algorithms. The user can tell the reduction processor which features 
	 * are important by using the 'FeatureFlags' parameter, and also the relative importance 
	 * of these features using the Set{feature}Importance methods. Also settings for 
	 * things like symmetry are set here. 
	 */
	class spReductionSettings : public spSettingsObject
	{
		public:
		spReductionSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spReductionSettings();
		spReductionSettings( const spReductionSettings &p );
		spReductionSettings & operator=( const spReductionSettings &p );
		const spReductionSettings* operator->() const;
		spReductionSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spReductionSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IReductionSettings",type)==0) || (strcmp("spReductionSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spReductionSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spReductionSettings handle 
		 * @return a handle to the spReductionSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spReductionSettings SafeCast(spObject other);

		/**
		 * Set reduction targets and stop condition used in the reduction. 
		 * @param stopCondition The value to which ReductionTargetStopCondition will be 
		 * set. 
		 * @param useTriangleRatio The value to which ReductionTargetTriangleRatioEnabled 
		 * will be set. 
		 * @param useTriangleCount The value to which ReductionTargetTriangleCountEnabled 
		 * will be set. 
		 * @param useMaxDeviation The value to which ReductionTargetMaxDeviationEnabled 
		 * will be set. 
		 * @param useOnScreenSize The value to which ReductionTargetOnScreenSizeEnabled 
		 * will be set. 
		 */
		void SetReductionTargets( Simplygon::EStopCondition stopCondition , bool useTriangleRatio , bool useTriangleCount , bool useMaxDeviation , bool useOnScreenSize ) const;

		/**
		 * Enable triangle ratio as a reduction target. The reducer will stop when the 
		 * set triangle-ratio has been reached. 
		 * @param value Value to set if triangle ratio should be used in the reduction. 
		 *  
		 */
		void SetReductionTargetTriangleRatioEnabled( bool value ) const;

		/**
		 * Enable triangle ratio as a reduction target. The reducer will stop when the 
		 * set triangle-ratio has been reached. 
		 */
		bool GetReductionTargetTriangleRatioEnabled(  ) const;

		/**
		 * Enable triangle count as a reduction target. The reducer will stop when the 
		 * set triangle count has been reached. 
		 * @param value Value to set if triangle count should be used in the reduction. 
		 *  
		 */
		void SetReductionTargetTriangleCountEnabled( bool value ) const;

		/**
		 * Enable triangle count as a reduction target. The reducer will stop when the 
		 * set triangle count has been reached. 
		 */
		bool GetReductionTargetTriangleCountEnabled(  ) const;

		/**
		 * Enable max deviation as a reduction target. The reducer will stop when the 
		 * set max deviation has been reached. 
		 * @param value Value to set if max deviation should be used in the reduction. 
		 *  
		 */
		void SetReductionTargetMaxDeviationEnabled( bool value ) const;

		/**
		 * Enable max deviation as a reduction target. The reducer will stop when the 
		 * set max deviation has been reached. 
		 */
		bool GetReductionTargetMaxDeviationEnabled(  ) const;

		/**
		 * Enable on screen size as a reduction target. The reducer will stop when the 
		 * set on screen size has been reached. 
		 * @param value Value to set if on screen size should be used in the reduction. 
		 *  
		 */
		void SetReductionTargetOnScreenSizeEnabled( bool value ) const;

		/**
		 * Enable on screen size as a reduction target. The reducer will stop when the 
		 * set on screen size has been reached. 
		 */
		bool GetReductionTargetOnScreenSizeEnabled(  ) const;

		/**
		 * The stop condition for the reducer. Any -> the reducer will stop when any single 
		 * one of the set reduction targets have been reached. All -> the reducer will 
		 * stop when all enabled reduction targets have been set. 
		 * @param value The flag to which StopCondition will be set. 
		 */
		void SetReductionTargetStopCondition( Simplygon::EStopCondition value ) const;

		/**
		 * The stop condition for the reducer. Any -> the reducer will stop when any single 
		 * one of the set reduction targets have been reached. All -> the reducer will 
		 * stop when all enabled reduction targets have been set. 
		 */
		Simplygon::EStopCondition GetReductionTargetStopCondition(  ) const;

		/**
		 * The flag that decides how precise the reducer will be during the mesh reduction. 
		 * Fast -> Reducer will be faster, but onscreensize and trianglecount will not 
		 * match perfectly. Consistent -> Reducer will be slower, but onscreensize and 
		 * trianglecount will consistently give matching results. 
		 * @param value The ReductionHeuristics to use. 
		 * @return The current value of ReductionHeuristics. 
		 */
		void SetReductionHeuristics( Simplygon::EReductionHeuristics value ) const;

		/**
		 * The flag that decides how precise the reducer will be during the mesh reduction. 
		 * Fast -> Reducer will be faster, but onscreensize and trianglecount will not 
		 * match perfectly. Consistent -> Reducer will be slower, but onscreensize and 
		 * trianglecount will consistently give matching results. 
		 * @return The current value of ReductionHeuristics. Default value is Fast 
		 */
		Simplygon::EReductionHeuristics GetReductionHeuristics(  ) const;

		/**
		 * The wanted reduction ratio. The range is 0->1. 
		 * @param value The value to which ReductionRatio will be set. Value cannot be 
		 * less than 0. Value cannot be greater than 1. 
		 */
		void SetReductionTargetTriangleRatio( real value ) const;

		/**
		 * The wanted reduction ratio. The range is 0->1. 
		 */
		real GetReductionTargetTriangleRatio(  ) const;

		/**
		 * The wanted triangle count. The range is 0->inf. 
		 * @param value The value to which TriangleCount will be set. Value cannot be 
		 * less than 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetReductionTargetTriangleCount( unsigned int value ) const;

		/**
		 * The wanted triangle count. The range is 0->inf. 
		 */
		unsigned int GetReductionTargetTriangleCount(  ) const;

		/**
		 * The MaxDeviation value, the maximum surface-deviation between the reduced geometry 
		 * and the original. 
		 * @param value The value to which MaxDeviation will be set. Value cannot be less 
		 * than 0. Value cannot be greater than REAL_MAX. 
		 */
		void SetReductionTargetMaxDeviation( real value ) const;

		/**
		 * The MaxDeviation value, the maximum surface-deviation between the reduced geometry 
		 * and the original. 
		 */
		real GetReductionTargetMaxDeviation(  ) const;

		/**
		 * The OnScreenSize value, used to calculate the maximum surface-deviation allowed, 
		 * by assuming errors less than 1 pixel onscreen will not be noticeable. 
		 * @param value The value to which OnScreenSize will be set. Value cannot be less 
		 * than 20. Value cannot be greater than 100000. 
		 */
		void SetReductionTargetOnScreenSize( unsigned int value ) const;

		/**
		 * The OnScreenSize value, used to calculate the maximum surface-deviation allowed, 
		 * by assuming errors less than 1 pixel onscreen will not be noticeable. 
		 */
		unsigned int GetReductionTargetOnScreenSize(  ) const;

		/**
		 * The importance value of the position of the vertices and triangles of the Geometry, 
		 * or the silhouette of the Geometry. The importance is relative to the values 
		 * of the other mesh features (or disabling an importance entirely by setting 
		 * it to 0). A higher number means higher importance. Default is 1.0 
		 * @param value The value to which the importance will be set. Value cannot be 
		 * less than 0. Value cannot be greater than SG_MAXIMUM_IMPORTANCE_VALUE. 
		 */
		void SetGeometryImportance( real value ) const;

		/**
		 * The importance value of the position of the vertices and triangles of the Geometry, 
		 * or the silhouette of the Geometry. The importance is relative to the values 
		 * of the other mesh features (or disabling an importance entirely by setting 
		 * it to 0). A higher number means higher importance. Default is 1.0 
		 */
		real GetGeometryImportance(  ) const;

		/**
		 * The importance value of the boundary between triangles with different materials. 
		 * For example, if triangles with a metallic material are connected to triangles 
		 * with a wood material, this setting will determine how important it is to keep 
		 * the border between them intact. The importance is relative to the values of 
		 * the other mesh features (or disabling an importance entirely by setting it 
		 * to 0). A higher number means higher importance. Default is 1.0 
		 * @param value The value to which the importance will be set. Value cannot be 
		 * less than 0. Value cannot be greater than SG_MAXIMUM_IMPORTANCE_VALUE. 
		 */
		void SetMaterialImportance( real value ) const;

		/**
		 * The importance value of the boundary between triangles with different materials. 
		 * For example, if triangles with a metallic material are connected to triangles 
		 * with a wood material, this setting will determine how important it is to keep 
		 * the border between them intact. The importance is relative to the values of 
		 * the other mesh features (or disabling an importance entirely by setting it 
		 * to 0). A higher number means higher importance. Default is 1.0 
		 */
		real GetMaterialImportance(  ) const;

		/**
		 * The importance value of the UV coordinates of the Geometry, both the boundary 
		 * of the UV charts, as well as the UV stretch across the triangles. The importance 
		 * is relative to the values of the other mesh features (or disabling an importance 
		 * entirely by setting it to 0). A higher number means higher importance. Default 
		 * is 1.0 
		 * @param value The value to which the importance will be set. Value cannot be 
		 * less than 0. Value cannot be greater than SG_MAXIMUM_IMPORTANCE_VALUE. 
		 */
		void SetTextureImportance( real value ) const;

		/**
		 * The importance value of the UV coordinates of the Geometry, both the boundary 
		 * of the UV charts, as well as the UV stretch across the triangles. The importance 
		 * is relative to the values of the other mesh features (or disabling an importance 
		 * entirely by setting it to 0). A higher number means higher importance. Default 
		 * is 1.0 
		 */
		real GetTextureImportance(  ) const;

		/**
		 * The importance value of the vertex-normals of the Geometry, both the sharp 
		 * edges, as well as how the normals interpolate over the surface of the triangles. 
		 * The importance is relative to the values of the other mesh features (or disabling 
		 * an importance entirely by setting it to 0). A higher number means higher importance. 
		 * Default is 1.0 
		 * @param value The value to which the importance will be set. Value cannot be 
		 * less than 0. Value cannot be greater than SG_MAXIMUM_IMPORTANCE_VALUE. 
		 */
		void SetShadingImportance( real value ) const;

		/**
		 * The importance value of the vertex-normals of the Geometry, both the sharp 
		 * edges, as well as how the normals interpolate over the surface of the triangles. 
		 * The importance is relative to the values of the other mesh features (or disabling 
		 * an importance entirely by setting it to 0). A higher number means higher importance. 
		 * Default is 1.0 
		 */
		real GetShadingImportance(  ) const;

		/**
		 * The importance value of the boundary between triangles from different sub-geometries. 
		 * The importance is relative to the values of the other mesh features (or disabling 
		 * an importance entirely by setting it to 0). A higher number means higher importance. 
		 * Default is 1.0 
		 * @param value The value to which the importance will be set. Value cannot be 
		 * less than 0. Value cannot be greater than SG_MAXIMUM_IMPORTANCE_VALUE. 
		 */
		void SetGroupImportance( real value ) const;

		/**
		 * The importance value of the boundary between triangles from different sub-geometries. 
		 * The importance is relative to the values of the other mesh features (or disabling 
		 * an importance entirely by setting it to 0). A higher number means higher importance. 
		 * Default is 1.0 
		 */
		real GetGroupImportance(  ) const;

		/**
		 * The importance value of the vertex-colors of the Geometry, both the boundary 
		 * between triangles with different colors, as well as how the colors interpolate 
		 * over the surface of the triangles. The importance is relative to the values 
		 * of the other mesh features (or disabling an importance entirely by setting 
		 * it to 0). A higher number means higher importance. Default is 1.0 
		 * @param value The value to which the importance will be set. Value cannot be 
		 * less than 0. Value cannot be greater than SG_MAXIMUM_IMPORTANCE_VALUE. 
		 */
		void SetVertexColorImportance( real value ) const;

		/**
		 * The importance value of the vertex-colors of the Geometry, both the boundary 
		 * between triangles with different colors, as well as how the colors interpolate 
		 * over the surface of the triangles. The importance is relative to the values 
		 * of the other mesh features (or disabling an importance entirely by setting 
		 * it to 0). A higher number means higher importance. Default is 1.0 
		 */
		real GetVertexColorImportance(  ) const;

		/**
		 * The importance value of user selected edges. Can be used when a Boolean UserCornerField 
		 * with the name SgEdgeSelectionSet is added to the Geometry. The importance is 
		 * relative to the values of the other mesh features (or disabling an importance 
		 * entirely by setting it to 0). A higher number means higher importance. Default 
		 * is 1.0 
		 * @param value The value to which the importance will be set. Value cannot be 
		 * less than 0. Value cannot be greater than SG_MAXIMUM_IMPORTANCE_VALUE. 
		 */
		void SetEdgeSetImportance( real value ) const;

		/**
		 * The importance value of user selected edges. Can be used when a Boolean UserCornerField 
		 * with the name SgEdgeSelectionSet is added to the Geometry. The importance is 
		 * relative to the values of the other mesh features (or disabling an importance 
		 * entirely by setting it to 0). A higher number means higher importance. Default 
		 * is 1.0 
		 */
		real GetEdgeSetImportance(  ) const;

		/**
		 * The importance value of the bone-weights of the vertices. The more impact a 
		 * vertex has on the skinning of the Geometry (for example, vertices close to 
		 * joints), the more likely it is to be kept. The importance is relative to the 
		 * values of the other mesh features (or disabling an importance entirely by setting 
		 * it to 0). A higher number means higher importance. Default is 1.0 
		 * @param value The value to which the importance will be set. Value cannot be 
		 * less than 0. Value cannot be greater than SG_MAXIMUM_IMPORTANCE_VALUE. 
		 */
		void SetSkinningImportance( real value ) const;

		/**
		 * The importance value of the bone-weights of the vertices. The more impact a 
		 * vertex has on the skinning of the Geometry (for example, vertices close to 
		 * joints), the more likely it is to be kept. The importance is relative to the 
		 * values of the other mesh features (or disabling an importance entirely by setting 
		 * it to 0). A higher number means higher importance. Default is 1.0 
		 */
		real GetSkinningImportance(  ) const;

		/**
		 * @deprecated Method is marked as deprecated and will be removed in future version. 
		 *  This importance is deprecated and disabled. 
		 * @param value The value, but do not set, it is deprecated. Value cannot be less 
		 * than 0. Value cannot be greater than SG_MAXIMUM_IMPORTANCE_VALUE. 
		 */
		SGDEPRECATED void SetCurvatureImportance( real value ) const;

		/**
		 * @deprecated Method is marked as deprecated and will be removed in future version. 
		 *  This importance is deprecated and disabled. 
		 */
		SGDEPRECATED real GetCurvatureImportance(  ) const;

		/**
		 * The CreateGeomorphGeometry value. If set, the reducer will create a GeometryData 
		 * object that is a morphed version of the original GeometryData, that can be 
		 * used to morph between the original geometry and the reduced geometry. Should 
		 * not be used together with TJunctionRemover, NormalRecalculation or Material 
		 * LOD. 
		 * @param value The bool to which CreateGeomorphGeometry will be set. 
		 */
		void SetCreateGeomorphGeometry( bool value ) const;

		/**
		 * The CreateGeomorphGeometry value. If set, the reducer will create a GeometryData 
		 * object that is a morphed version of the original GeometryData, that can be 
		 * used to morph between the original geometry and the reduced geometry. Should 
		 * not be used together with TJunctionRemover, NormalRecalculation or Material 
		 * LOD. 
		 */
		bool GetCreateGeomorphGeometry(  ) const;

		/**
		 * The AllowDegenerateTexCoords flag. If true, texture coordinates are allowed 
		 * to become degenerate (triangles can have 0 area in texture space). This may 
		 * sometimes look better, but if tangent space normals are used, tangent spaces 
		 * may become degenerate. 
		 * @param value The bool to which AllowDegenerateTexCoords will be set. 
		 */
		void SetAllowDegenerateTexCoords( bool value ) const;

		/**
		 * The AllowDegenerateTexCoords flag. If true, texture coordinates are allowed 
		 * to become degenerate (triangles can have 0 area in texture space). This may 
		 * sometimes look better, but if tangent space normals are used, tangent spaces 
		 * may become degenerate. 
		 */
		bool GetAllowDegenerateTexCoords(  ) const;

		/**
		 * The KeepSymmetry flag. If set, the reducer will detect symmetric features, 
		 * and retain symmetry during processing. Please note that for a geometry to be 
		 * considered symmetrical, also the texture coordinates must be mirrored. 
		 * @param value The bool to which KeepSymmetry will be set. 
		 */
		void SetKeepSymmetry( bool value ) const;

		/**
		 * The KeepSymmetry flag. If set, the reducer will detect symmetric features, 
		 * and retain symmetry during processing. Please note that for a geometry to be 
		 * considered symmetrical, also the texture coordinates must be mirrored. 
		 */
		bool GetKeepSymmetry(  ) const;

		/**
		 * The AutomaticSymmetryDetection flag. If set, and KeepSymmetry is on, the reducer 
		 * will detect any X,Y,Z symmetry plane and will override any user set symmetry 
		 * plane with the detected one. If no symmetry is found, KeepSymmetry will be 
		 * turned off before reduction. 
		 * @param value The bool to which AutomaticSymmetryDetection will be set. 
		 */
		void SetUseAutomaticSymmetryDetection( bool value ) const;

		/**
		 * The AutomaticSymmetryDetection flag. If set, and KeepSymmetry is on, the reducer 
		 * will detect any X,Y,Z symmetry plane and will override any user set symmetry 
		 * plane with the detected one. If no symmetry is found, KeepSymmetry will be 
		 * turned off before reduction. 
		 */
		bool GetUseAutomaticSymmetryDetection(  ) const;

		/**
		 * The UseSymmetryQuadRetriangulator flag. If true, and KeepSymmetry is on, any 
		 * triangles that have been triangulated from symmetrical quads into unsymmetrical 
		 * triangles are detected and fixed. The edges of said triangles are flipped across 
		 * the old quad so that the mesh becomes symmetrical again. 
		 * @param value The bool to which UseSymmetryQuadRetriangulator will be set. 
		 */
		void SetUseSymmetryQuadRetriangulator( bool value ) const;

		/**
		 * The UseSymmetryQuadRetriangulator flag. If true, and KeepSymmetry is on, any 
		 * triangles that have been triangulated from symmetrical quads into unsymmetrical 
		 * triangles are detected and fixed. The edges of said triangles are flipped across 
		 * the old quad so that the mesh becomes symmetrical again. 
		 */
		bool GetUseSymmetryQuadRetriangulator(  ) const;

		/**
		 * Set what axis to be used for symmetry calculations. 
		 * @param value The value to which SymmetryAxis will be set. 
		 */
		void SetSymmetryAxis( Simplygon::ESymmetryAxis value ) const;

		/**
		 * Set what axis to be used for symmetry calculations. 
		 */
		Simplygon::ESymmetryAxis GetSymmetryAxis(  ) const;

		/**
		 * Set SymmetryOffset, the position on the symmetry axis where the symmetry plane 
		 * is placed. 
		 * @param value The value to which SymmetryOffset will be set. Value cannot be 
		 * less than 0. Value cannot be greater than REAL_MAX. 
		 */
		void SetSymmetryOffset( real value ) const;

		/**
		 * Set SymmetryOffset, the position on the symmetry axis where the symmetry plane 
		 * is placed. 
		 */
		real GetSymmetryOffset(  ) const;

		/**
		 * The tolerance used when detecting symmetry. Values in the ranges 1e-5 to 1e-3 
		 * will usually produce good results. This specific tolerance corresponds to the 
		 * off-plane tolerance, ie. the tolerance of the coordinate components that are 
		 * not the symmetry axis. The in-plane tolerance is always 10 times the off-plane 
		 * tolerance. This value is relative to the size of the Geometry, so 0.01 would 
		 * mean 1% of the bounding box size of the Geometry. 
		 * @param value The value to which SymmetryDetectionTolerance will be set. Value 
		 * cannot be less than 0. Value cannot be greater than REAL_MAX. 
		 */
		void SetSymmetryDetectionTolerance( real value ) const;

		/**
		 * The tolerance used when detecting symmetry. Values in the ranges 1e-5 to 1e-3 
		 * will usually produce good results. This specific tolerance corresponds to the 
		 * off-plane tolerance, ie. the tolerance of the coordinate components that are 
		 * not the symmetry axis. The in-plane tolerance is always 10 times the off-plane 
		 * tolerance. This value is relative to the size of the Geometry, so 0.01 would 
		 * mean 1% of the bounding box size of the Geometry. 
		 */
		real GetSymmetryDetectionTolerance(  ) const;

		/**
		 * The flag that specifies how big "freedom" Simplygon has when it comes to altering 
		 * vertex/triangle data. Allowing more altered data means it will be easier to 
		 * create good looking LODs, but without altered data it will be easier to keep 
		 * the memory-usage in the LOD-chain more optimized. Note: When using OnlyUseOriginalData, 
		 * the geometry being reduced can not have a node transformation matrix other 
		 * than the identity matrix. 
		 * @param value The value to which the DataCreationPreferences flag will be set. 
		 *  
		 */
		void SetDataCreationPreferences( Simplygon::EDataCreationPreferences value ) const;

		/**
		 * The flag that specifies how big "freedom" Simplygon has when it comes to altering 
		 * vertex/triangle data. Allowing more altered data means it will be easier to 
		 * create good looking LODs, but without altered data it will be easier to keep 
		 * the memory-usage in the LOD-chain more optimized. Note: When using OnlyUseOriginalData, 
		 * the geometry being reduced can not have a node transformation matrix other 
		 * than the identity matrix. 
		 */
		Simplygon::EDataCreationPreferences GetDataCreationPreferences(  ) const;

		/**
		 * The flag for if the reduction process should store geomorph data in the processed 
		 * GeometryData object. This data is an array with same size as the vertexcount 
		 * was before the reduction process, and will have the coordinates for each vertex 
		 * on its corresponding position on the reduced GeometryData surface. Can be used 
		 * to give smooth transition from a highlevel LOD to a lowlevel LOD. This array 
		 * can be accessed with the GeometryData custom field "SgMappedVertexCoords". 
		 * @param value The bool to which GenerateGeomorphData will be set. 
		 */
		void SetGenerateGeomorphData( bool value ) const;

		/**
		 * The flag for if the reduction process should store geomorph data in the processed 
		 * GeometryData object. This data is an array with same size as the vertexcount 
		 * was before the reduction process, and will have the coordinates for each vertex 
		 * on its corresponding position on the reduced GeometryData surface. Can be used 
		 * to give smooth transition from a highlevel LOD to a lowlevel LOD. This array 
		 * can be accessed with the GeometryData custom field "SgMappedVertexCoords". 
		 *  
		 */
		bool GetGenerateGeomorphData(  ) const;

		/**
		 * The outward move multiplier, how much the mesh is allowed to grow its silhouette 
		 * perimeter. 
		 * @param value The value to which OutwardMoveMultiplier will be set. Value cannot 
		 * be less than 0. Value cannot be greater than REAL_MAX. 
		 */
		void SetOutwardMoveMultiplier( real value ) const;

		/**
		 * The outward move multiplier, how much the mesh is allowed to grow its silhouette 
		 * perimeter. 
		 */
		real GetOutwardMoveMultiplier(  ) const;

		/**
		 * The inward move multiplier, how much the mesh is allowed to shrink its silhouette 
		 * perimeter. 
		 * @param value The value to which InwardMoveMultiplier will be set. Value cannot 
		 * be less than 0. Value cannot be greater than REAL_MAX. 
		 */
		void SetInwardMoveMultiplier( real value ) const;

		/**
		 * The inward move multiplier, how much the mesh is allowed to shrink its silhouette 
		 * perimeter. 
		 */
		real GetInwardMoveMultiplier(  ) const;

		/**
		 * The maximum length of the triangles edges after reduction. Can be used to limit 
		 * output triangle size. 
		 * @param value The new value of MaxEdgeLength. Value cannot be less than 0. Value 
		 * cannot be greater than REAL_MAX. 
		 */
		void SetMaxEdgeLength( real value ) const;

		/**
		 * The maximum length of the triangles edges after reduction. Can be used to limit 
		 * output triangle size. 
		 */
		real GetMaxEdgeLength(  ) const;

		/**
		 * Set to true and the reducer will do a much more precise way of calculating 
		 * the vertex normals. It will however be slower. Set to false and it will do 
		 * a much more rough estimation of what the vertex normals will look like, but 
		 * faster. 
		 * @param value The value to which UseHighQualityNormalCalculation will be set. 
		 *  
		 */
		void SetUseHighQualityNormalCalculation( bool value ) const;

		/**
		 * Set to true and the reducer will do a much more precise way of calculating 
		 * the vertex normals. It will however be slower. Set to false and it will do 
		 * a much more rough estimation of what the vertex normals will look like, but 
		 * faster. 
		 */
		bool GetUseHighQualityNormalCalculation(  ) const;

		/**
		 * Which selection set should be processed. If set to -1, all geometries in the 
		 * scene will be processed. If both selection set name and ID are set, the name 
		 * will be used. 
		 * @param value The desired SelectionSet id. Value cannot be less than -1. 
		 */
		void SetProcessSelectionSetID( rid value ) const;

		/**
		 * Which selection set should be processed. If set to -1, all geometries in the 
		 * scene will be processed. If both selection set name and ID are set, the name 
		 * will be used. 
		 */
		rid GetProcessSelectionSetID(  ) const;

		/**
		 * Which selection set should be processed. If the name is not found, all geometries 
		 * in the scene will be processed. If both selection set name and ID are set, 
		 * the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetProcessSelectionSetName( const char * value ) const;

		/**
		 * Which selection set should be processed. If the name is not found, all geometries 
		 * in the scene will be processed. If both selection set name and ID are set, 
		 * the name will be used. 
		 */
		spString GetProcessSelectionSetName(  ) const;

		/**
		 * The processor will merge all the geometries in the scene into a single geometry 
		 * if MergeGeometries is enabled. 
		 * @param value The desired MergeGeometries flag. 
		 */
		void SetMergeGeometries( bool value ) const;

		/**
		 * The processor will merge all the geometries in the scene into a single geometry 
		 * if MergeGeometries is enabled. 
		 */
		bool GetMergeGeometries(  ) const;

		/**
		 * If false, the processor will remove all geometry and scene meshes which were 
		 * not selected for processing from the scene. If true, only the geometry in the 
		 * ProcessSelectionSet will be replaced or updated, while the rest of the scene 
		 * tree is kept intact. New geometry is always added as the last child of the 
		 * scene root. If generating a mappingimage to cast materials, new materialIds 
		 * will also be appended to the end of the old material table instead of replacing 
		 * the old ones. 
		 * @param value The desired KeepUnprocessedSceneMeshes flag. 
		 */
		void SetKeepUnprocessedSceneMeshes( bool value ) const;

		/**
		 * If false, the processor will remove all geometry and scene meshes which were 
		 * not selected for processing from the scene. If true, only the geometry in the 
		 * ProcessSelectionSet will be replaced or updated, while the rest of the scene 
		 * tree is kept intact. New geometry is always added as the last child of the 
		 * scene root. If generating a mappingimage to cast materials, new materialIds 
		 * will also be appended to the end of the old material table instead of replacing 
		 * the old ones. 
		 */
		bool GetKeepUnprocessedSceneMeshes(  ) const;

		/**
		 * If set, will lock the geometric border of the geometry, and not reduce at all. 
		 * This setting might be useful if the geometry needs to fit a neighbor geometry, 
		 * but will reduce overall reduction quality (geometric quality over reduction 
		 * ratio) 
		 * @param value The desired LockGeometricBorder flag. 
		 */
		void SetLockGeometricBorder( bool value ) const;

		/**
		 * If set, will lock the geometric border of the geometry, and not reduce at all. 
		 * This setting might be useful if the geometry needs to fit a neighbor geometry, 
		 * but will reduce overall reduction quality (geometric quality over reduction 
		 * ratio) 
		 */
		bool GetLockGeometricBorder(  ) const;

	};

	/**
	 * Settings for the normal recalculation 
	 */
	class spNormalCalculationSettings : public spSettingsObject
	{
		public:
		spNormalCalculationSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spNormalCalculationSettings();
		spNormalCalculationSettings( const spNormalCalculationSettings &p );
		spNormalCalculationSettings & operator=( const spNormalCalculationSettings &p );
		const spNormalCalculationSettings* operator->() const;
		spNormalCalculationSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spNormalCalculationSettings is a or is 
		 * a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("INormalCalculationSettings",type)==0) || (strcmp("spNormalCalculationSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spNormalCalculationSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spNormalCalculationSettings handle 
		 * @return a handle to the spNormalCalculationSettings object, if the cast can 
		 * be made, and a NULL handle otherwise 
		 */
		static spNormalCalculationSettings SafeCast(spObject other);

		/**
		 * If set, it will generate new normals for the Geometry, and if not set, it will 
		 * keep the normals from the original normal set (or not add normals at all if 
		 * none were present). Please note that if the original geometry contains normals, 
		 * the normal repairer will replace invalid normals even if ReplaceNormals is 
		 * set to false. 
		 * @param value The value to which the ReplaceNormals bool is to be set. 
		 */
		void SetReplaceNormals( bool value ) const;

		/**
		 * If set, it will generate new normals for the Geometry, and if not set, it will 
		 * keep the normals from the original normal set (or not add normals at all if 
		 * none were present). Please note that if the original geometry contains normals, 
		 * the normal repairer will replace invalid normals even if ReplaceNormals is 
		 * set to false. 
		 */
		bool GetReplaceNormals(  ) const;

		/**
		 * If set, it will generate new tangents and bitangents for the Geometry, and 
		 * if not set, it will keep the new tangents and bitangents from the original 
		 * normal set (or not add tangents and bitangents at all if none were present). 
		 * @param value The value to which the ReplaceTangents bool is to be set. 
		 */
		void SetReplaceTangents( bool value ) const;

		/**
		 * If set, it will generate new tangents and bitangents for the Geometry, and 
		 * if not set, it will keep the new tangents and bitangents from the original 
		 * normal set (or not add tangents and bitangents at all if none were present). 
		 *  
		 */
		bool GetReplaceTangents(  ) const;

		/**
		 * Set HardEdgeAngle in degrees. If the angle between two triangles are above 
		 * this value, the normals will not be smooth over the edge between those two 
		 * triangles. 
		 * @param value The value to which HardEdgeAngle is to be set. Value cannot be 
		 * less than 0. Value cannot be greater than 180. 
		 */
		void SetHardEdgeAngle( real value ) const;

		/**
		 * Set HardEdgeAngle in degrees. If the angle between two triangles are above 
		 * this value, the normals will not be smooth over the edge between those two 
		 * triangles. 
		 */
		real GetHardEdgeAngle(  ) const;

		/**
		 * If set, normals that are invalid will be replaced. All others are left intact. 
		 * Bad normals are those that are either zero length, or simply points away from 
		 * the surface. 
		 * @param value The value to which RepairInvalidNormals is to be set. 
		 */
		void SetRepairInvalidNormals( bool value ) const;

		/**
		 * If set, normals that are invalid will be replaced. All others are left intact. 
		 * Bad normals are those that are either zero length, or simply points away from 
		 * the surface. 
		 */
		bool GetRepairInvalidNormals(  ) const;

		/**
		 * If set, the tangentspaces already existing in the scene will be readjusted 
		 * so that the tangent and binormal are both orthogonal to the normal. Will be 
		 * needed since most of the time the normals are changed in the reduction process. 
		 * @param value The desired flag value to reorthogonalize tangent space. 
		 */
		void SetReorthogonalizeTangentSpace( bool value ) const;

		/**
		 * If set, the tangentspaces already existing in the scene will be readjusted 
		 * so that the tangent and binormal are both orthogonal to the normal. Will be 
		 * needed since most of the time the normals are changed in the reduction process. 
		 *  
		 */
		bool GetReorthogonalizeTangentSpace(  ) const;

		/**
		 * If set, the influence of a triangle normal upon the vertex normals is scaled 
		 * by the area of the triangle. 
		 * @param value The value to which the ScaleByArea bool is to be set. 
		 */
		void SetScaleByArea( bool value ) const;

		/**
		 * If set, the influence of a triangle normal upon the vertex normals is scaled 
		 * by the area of the triangle. 
		 */
		bool GetScaleByArea(  ) const;

		/**
		 * If set, the influence of a triangle normal upon the vertex normals is scaled 
		 * by the angle of the corner at the vertex. 
		 * @param value The value to which the ScaleByAngle bool is to be set. 
		 */
		void SetScaleByAngle( bool value ) const;

		/**
		 * If set, the influence of a triangle normal upon the vertex normals is scaled 
		 * by the angle of the corner at the vertex. 
		 */
		bool GetScaleByAngle(  ) const;

		/**
		 * If set, perfectly flat shaded surfaces will be created, where possible. Normals 
		 * adjacent to perfectly geometrically flat surfaces will be recalculated to have 
		 * the same direction as for those of the adjacent flat surface. 
		 * @param value To use for SnapNormalsToFlatSurfaces. 
		 */
		void SetSnapNormalsToFlatSurfaces( bool value ) const;

		/**
		 * If set, perfectly flat shaded surfaces will be created, where possible. Normals 
		 * adjacent to perfectly geometrically flat surfaces will be recalculated to have 
		 * the same direction as for those of the adjacent flat surface. 
		 */
		bool GetSnapNormalsToFlatSurfaces(  ) const;

	};

	/**
	 * Settings for the Simplygon mapping classes These settings control the properties 
	 * of the mapping image that will be generated in the current simplification processor 
	 * (reducer/remesher etc). The mapping image will be used when casting a new texture 
	 * on the simplified geometry. In the settings object, the user is able to set 
	 * the dimensions of the image (width/height) as well as whether the LOD should 
	 * have new texture coordinates and some parameters for how they should be generated 
	 * and all other settings regarding the mapping image. 
	 */
	class spMappingImageSettings : public spSettingsObject
	{
		public:
		spMappingImageSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spMappingImageSettings();
		spMappingImageSettings( const spMappingImageSettings &p );
		spMappingImageSettings & operator=( const spMappingImageSettings &p );
		const spMappingImageSettings* operator->() const;
		spMappingImageSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spMappingImageSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IMappingImageSettings",type)==0) || (strcmp("spMappingImageSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spMappingImageSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spMappingImageSettings handle 
		 * @return a handle to the spMappingImageSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spMappingImageSettings SafeCast(spObject other);

		/**
		 * The number of input materials used in the original geometry for mapping to 
		 * multiple output materials. This needs to be set before you can set any specific 
		 * in-out material mapping. 0 signifies that no in-out material mapping is used, 
		 * ie. the process will produce one resulting mapping image. 
		 * @param value The number of inputs. Value cannot be less than 0. Value cannot 
		 * be greater than SG_MAXIMUM_MAPPING_IMAGE_INPUT_MATERIAL_COUNT. 
		 */
		void SetInputMaterialCount( unsigned int value ) const;

		/**
		 * The number of input materials used in the original geometry for mapping to 
		 * multiple output materials. This needs to be set before you can set any specific 
		 * in-out material mapping. 0 signifies that no in-out material mapping is used, 
		 * ie. the process will produce one resulting mapping image. 
		 */
		unsigned int GetInputMaterialCount(  ) const;

		/**
		 * Get the input material settings for the given index. 
		 * @param index Input index Value cannot be less than 0. Value cannot be greater 
		 * than SG_MAXIMUM_MAPPING_IMAGE_INPUT_MATERIAL_COUNT. 
		 */
		spMappingImageInputMaterialSettings GetInputMaterialSettings( unsigned int index ) const;

		/**
		 * The number of output mapping images that are to be generated. If this is set 
		 * to more than 1, the material mapping also needs to be set. 
		 * @param value The number of outputs. Value cannot be less than 1. Value cannot 
		 * be greater than SG_MAXIMUM_MAPPING_IMAGE_OUTPUT_MATERIAL_COUNT. 
		 */
		void SetOutputMaterialCount( unsigned int value ) const;

		/**
		 * The number of output mapping images that are to be generated. If this is set 
		 * to more than 1, the material mapping also needs to be set. 
		 */
		unsigned int GetOutputMaterialCount(  ) const;

		/**
		 * Get the output material settings for the given index. 
		 * @param index Output index Value cannot be less than 0. Value cannot be greater 
		 * than SG_MAXIMUM_MAPPING_IMAGE_INPUT_MATERIAL_COUNT. 
		 */
		spMappingImageOutputMaterialSettings GetOutputMaterialSettings( unsigned int index ) const;

		/**
		 * Whether to replace already existing mapping images in the scene. 
		 * @param value The new value. 
		 */
		void SetReplaceMappingImages( bool value ) const;

		/**
		 * Whether to replace already existing mapping images in the scene. 
		 */
		bool GetReplaceMappingImages(  ) const;

		/**
		 * The maximum number of layers in the mapping image. If a remeshed geometry has 
		 * a lot of transparent triangles, use a higher number to be able to find intersections 
		 * on the inside of parts of the geometry. This setting only has effect in the 
		 * remeshing, when running reduction the number of layers is always 1. 
		 * @param value The desired number of layers in the mapping image. Value cannot 
		 * be less than 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetMaximumLayers( unsigned int value ) const;

		/**
		 * The maximum number of layers in the mapping image. If a remeshed geometry has 
		 * a lot of transparent triangles, use a higher number to be able to find intersections 
		 * on the inside of parts of the geometry. This setting only has effect in the 
		 * remeshing, when running reduction the number of layers is always 1. 
		 */
		unsigned int GetMaximumLayers(  ) const;

		/**
		 * If true, the remeshing processor will allow mapped transparency in the generated 
		 * mapping image. This allows material casting where gaps filled by the remeshing 
		 * processor will be cast as transparent. 
		 * @param value The desired value of AllowTransparencyMapping. 
		 */
		void SetAllowTransparencyMapping( bool value ) const;

		/**
		 * If true, the remeshing processor will allow mapped transparency in the generated 
		 * mapping image. This allows material casting where gaps filled by the remeshing 
		 * processor will be cast as transparent. 
		 */
		bool GetAllowTransparencyMapping(  ) const;

		/**
		 * If set, the aggregation processor, reduction processor, or remeshing processor 
		 * will create a mapping image that maps triangles on the reduced geometry back 
		 * to triangles on the original geometry. The texture is insert into the MappingImage 
		 * object. The image data will contain two fields: * RidArray, "TriangleIds", 
		 * TupleSize:1, The id of the triangle * UnsignedShortArray, "BarycentricCoords", 
		 * TupleSize:2, Items A & B of the barycentric coordinate on the triangle. The 
		 * user can control the size of the mapped texture using the values MappingTextureWidth 
		 * and MappingTextureHeight. 
		 * @param value The desired GenerateMappingImage flag. 
		 */
		void SetGenerateMappingImage( bool value ) const;

		/**
		 * If set, the aggregation processor, reduction processor, or remeshing processor 
		 * will create a mapping image that maps triangles on the reduced geometry back 
		 * to triangles on the original geometry. The texture is insert into the MappingImage 
		 * object. The image data will contain two fields: * RidArray, "TriangleIds", 
		 * TupleSize:1, The id of the triangle * UnsignedShortArray, "BarycentricCoords", 
		 * TupleSize:2, Items A & B of the barycentric coordinate on the triangle. The 
		 * user can control the size of the mapped texture using the values MappingTextureWidth 
		 * and MappingTextureHeight. 
		 */
		bool GetGenerateMappingImage(  ) const;

		/**
		 * If true, generates a new texcoords field at the position specified by TexCoordLevel. 
		 * Will be ignored and always generate texcoords if none are available in the 
		 * Geometry if GenerateMappingImage is enabled. 
		 * @param value The desired GenerateTexCoords flag. 
		 */
		void SetGenerateTexCoords( bool value ) const;

		/**
		 * If true, generates a new texcoords field at the position specified by TexCoordLevel. 
		 * Will be ignored and always generate texcoords if none are available in the 
		 * Geometry if GenerateMappingImage is enabled. 
		 */
		bool GetGenerateTexCoords(  ) const;

		/**
		 * If true, generates a new tangent space fields at position specified by TexCoordLevel, 
		 * based on the vertex normals and texture coordinates. Tangent space fields will 
		 * always be created if missing, and GenerateMappingImage is enabled. If GenerateTexCoords 
		 * is enabled, new tangents will always be generated. 
		 * @param value The desired GenerateTangents flag. 
		 */
		void SetGenerateTangents( bool value ) const;

		/**
		 * If true, generates a new tangent space fields at position specified by TexCoordLevel, 
		 * based on the vertex normals and texture coordinates. Tangent space fields will 
		 * always be created if missing, and GenerateMappingImage is enabled. If GenerateTexCoords 
		 * is enabled, new tangents will always be generated. 
		 */
		bool GetGenerateTangents(  ) const;

		/**
		 * The texture coordinate level used for mapping image and texture generation. 
		 * If the TexCoordName has been set, the TexCoordLevel is not used. 
		 * @param value The desired texture coordinate level. Value cannot be less than 
		 * -1. Value cannot be greater than INT_MAX. 
		 */
		void SetTexCoordLevel( rid value ) const;

		/**
		 * The texture coordinate level used for mapping image and texture generation. 
		 * If the TexCoordName has been set, the TexCoordLevel is not used. 
		 */
		rid GetTexCoordLevel(  ) const;

		/**
		 * The texture coordinate level name used for mapping image and texture generation. 
		 * If new UVs are created, they will replace the old coordinates in the texture 
		 * channel with the TexCoordName. If no texture level with this name exists. It 
		 * will be created. If the TexCoordName is not set, the TexCoordLevel (index) 
		 * will be used instead. 
		 * @param value The TexCoord level name. 
		 * @return The current texture coordinate level name 
		 */
		void SetTexCoordName( const char * value ) const;

		/**
		 * The texture coordinate level name used for mapping image and texture generation. 
		 * If new UVs are created, they will replace the old coordinates in the texture 
		 * channel with the TexCoordName. If no texture level with this name exists. It 
		 * will be created. If the TexCoordName is not set, the TexCoordLevel (index) 
		 * will be used instead. 
		 * @return The current texture coordinate level name Default value is nullptr 
		 *  
		 */
		spString GetTexCoordName(  ) const;

		/**
		 * If set, all original texcoord sets are replaced by a single new one which will 
		 * be used for the mapping image. This means the output scene will be temporarily 
		 * invalid before the materialtable has been updated to reflect the new changes. 
		 * This flag has no effect on the remeshing, which always does a full retexturing. 
		 * @param value The desired UseFullRetexturing flag. 
		 */
		void SetUseFullRetexturing( bool value ) const;

		/**
		 * If set, all original texcoord sets are replaced by a single new one which will 
		 * be used for the mapping image. This means the output scene will be temporarily 
		 * invalid before the materialtable has been updated to reflect the new changes. 
		 * This flag has no effect on the remeshing, which always does a full retexturing. 
		 *  
		 */
		bool GetUseFullRetexturing(  ) const;

		/**
		 * If true, and also generating one or more mapping images for material casting, 
		 * the material IDs in the process geometry will be updated to reflect the new, 
		 * not yet cast output materials. This means the output scene will be temporarily 
		 * invalid before the materialtable has been updated to reflect the new changes. 
		 * @param value The desired ApplyNewMaterialIds flag. 
		 */
		void SetApplyNewMaterialIds( bool value ) const;

		/**
		 * If true, and also generating one or more mapping images for material casting, 
		 * the material IDs in the process geometry will be updated to reflect the new, 
		 * not yet cast output materials. This means the output scene will be temporarily 
		 * invalid before the materialtable has been updated to reflect the new changes. 
		 *  
		 */
		bool GetApplyNewMaterialIds(  ) const;

		/**
		 * The UseAutomaticTextureSize flag. If true, then texture sizes will be computed 
		 * for the reduced mesh depending on its pixel size on screen. 
		 * @param value The desired flag. 
		 */
		void SetUseAutomaticTextureSize( bool value ) const;

		/**
		 * The UseAutomaticTextureSize flag. If true, then texture sizes will be computed 
		 * for the reduced mesh depending on its pixel size on screen. 
		 */
		bool GetUseAutomaticTextureSize(  ) const;

		/**
		 * Texture dimension length multiplier for the automatic texture size. 
		 * @param value The desired multiplier. Value cannot be less than 0. Value cannot 
		 * be greater than REAL_MAX. 
		 */
		void SetAutomaticTextureSizeMultiplier( real value ) const;

		/**
		 * Texture dimension length multiplier for the automatic texture size. 
		 */
		real GetAutomaticTextureSizeMultiplier(  ) const;

		/**
		 * If automatic_texture_size is enabled, then force the texture sizes to be a 
		 * power of 2. 
		 * @param value The desired flag. 
		 */
		void SetForcePower2Texture( bool value ) const;

		/**
		 * If automatic_texture_size is enabled, then force the texture sizes to be a 
		 * power of 2. 
		 */
		bool GetForcePower2Texture(  ) const;

		/**
		 * Determines which method to use when generating the texture coordinates. Parameterizer 
		 * generate from scratch based on the geometry. ChartAggregator generate based 
		 * on the original texture coordinates. 
		 * @param value The TexCoordGeneratorType value to use. 
		 */
		void SetTexCoordGeneratorType( Simplygon::ETexcoordGeneratorType value ) const;

		/**
		 * Determines which method to use when generating the texture coordinates. Parameterizer 
		 * generate from scratch based on the geometry. ChartAggregator generate based 
		 * on the original texture coordinates. 
		 */
		Simplygon::ETexcoordGeneratorType GetTexCoordGeneratorType(  ) const;

		/**
		 * If enabled, will aggregate all the valid original UVs. If there are invalid 
		 * original UVs, those parts will receive new parameterized UVs. 
		 * @param value The new flag. 
		 */
		void SetOnlyParameterizeInvalidUVs( bool value ) const;

		/**
		 * If enabled, will aggregate all the valid original UVs. If there are invalid 
		 * original UVs, those parts will receive new parameterized UVs. 
		 */
		bool GetOnlyParameterizeInvalidUVs(  ) const;

		/**
		 * The settings for the chart aggregator. 
		 * @return The chart aggregator settings object associated with the mapping image 
		 *  
		 */
		spChartAggregatorSettings GetChartAggregatorSettings(  ) const;

		/**
		 * The settings for the parameterizer. 
		 * @return The parameterizer settings object associated with the mapping image 
		 *  
		 */
		spParameterizerSettings GetParameterizerSettings(  ) const;

	};

	/**
	 * Settings for the Simplygon mapping input. 
	 */
	class spMappingImageInputMaterialSettings : public spSettingsObject
	{
		public:
		spMappingImageInputMaterialSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spMappingImageInputMaterialSettings();
		spMappingImageInputMaterialSettings( const spMappingImageInputMaterialSettings &p );
		spMappingImageInputMaterialSettings & operator=( const spMappingImageInputMaterialSettings &p );
		const spMappingImageInputMaterialSettings* operator->() const;
		spMappingImageInputMaterialSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spMappingImageInputMaterialSettings is 
		 * a or is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IMappingImageInputMaterialSettings",type)==0) || (strcmp("spMappingImageInputMaterialSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spMappingImageInputMaterialSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spMappingImageInputMaterialSettings 
		 * handle 
		 * @return a handle to the spMappingImageInputMaterialSettings object, if the 
		 * cast can be made, and a NULL handle otherwise 
		 */
		static spMappingImageInputMaterialSettings SafeCast(spObject other);

		/**
		 * The material mapping for the input material this setting object corresponds 
		 * to, meaning what material of the generated LOD the corresponding input material 
		 * will be baked into. Both InputMaterialCount and OutputMaterialCount need to 
		 * be set for this mapping to work, and all original materials need to be mapped 
		 * to an existing output id. 
		 * @param value The output material id the corresponding input is to be mapped 
		 * to. Value cannot be less than -1. Value cannot be greater than INT_MAX. 
		 */
		void SetMaterialMapping( int value ) const;

		/**
		 * The material mapping for the input material this setting object corresponds 
		 * to, meaning what material of the generated LOD the corresponding input material 
		 * will be baked into. Both InputMaterialCount and OutputMaterialCount need to 
		 * be set for this mapping to work, and all original materials need to be mapped 
		 * to an existing output id. 
		 */
		int GetMaterialMapping(  ) const;

	};

	/**
	 * Settings for the Simplygon mapping output. 
	 */
	class spMappingImageOutputMaterialSettings : public spSettingsObject
	{
		public:
		spMappingImageOutputMaterialSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spMappingImageOutputMaterialSettings();
		spMappingImageOutputMaterialSettings( const spMappingImageOutputMaterialSettings &p );
		spMappingImageOutputMaterialSettings & operator=( const spMappingImageOutputMaterialSettings &p );
		const spMappingImageOutputMaterialSettings* operator->() const;
		spMappingImageOutputMaterialSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spMappingImageOutputMaterialSettings 
		 * is a or is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IMappingImageOutputMaterialSettings",type)==0) || (strcmp("spMappingImageOutputMaterialSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spMappingImageOutputMaterialSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spMappingImageOutputMaterialSettings 
		 * handle 
		 * @return a handle to the spMappingImageOutputMaterialSettings object, if the 
		 * cast can be made, and a NULL handle otherwise 
		 */
		static spMappingImageOutputMaterialSettings SafeCast(spObject other);

		/**
		 * The width of the texture of the output mapping image. 
		 * @param value The value to which Width will be set. Value cannot be less than 
		 * 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetTextureWidth( unsigned int value ) const;

		/**
		 * The width of the texture of the output mapping image. 
		 */
		unsigned int GetTextureWidth(  ) const;

		/**
		 * The height of the texture of the output mapping image. 
		 * @param value The value to which Height will be set. Value cannot be less than 
		 * 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetTextureHeight( unsigned int value ) const;

		/**
		 * The height of the texture of the output mapping image. 
		 */
		unsigned int GetTextureHeight(  ) const;

		/**
		 * The multi-sampling level of the output mapping image. Values 1-8 are accepted. 
		 * @param value The value to which MultiSamplingLevel will be set. Value cannot 
		 * be less than 1. Value cannot be greater than 8. 
		 */
		void SetMultisamplingLevel( unsigned int value ) const;

		/**
		 * The multi-sampling level of the output mapping image. Values 1-8 are accepted. 
		 *  
		 */
		unsigned int GetMultisamplingLevel(  ) const;

		/**
		 * The minimum number of pixels between charts of the output mapping image. 
		 * @param value The value to which GutterSpace will be set. Value cannot be less 
		 * than 1. Value cannot be greater than UINT_MAX. 
		 */
		void SetGutterSpace( unsigned int value ) const;

		/**
		 * The minimum number of pixels between charts of the output mapping image. 
		 */
		unsigned int GetGutterSpace(  ) const;

	};

	/**
	 * Visibility settings contains the parameters for how to compute the visibility 
	 * of a scene and how to use it, both in the ReductionProcessor and the RemeshingProcessor. 
	 * The visibility information is computed for each part of the mesh determined 
	 * by the visibility from the selected SceneCamera objects. Cameras are selected 
	 * using the CameraSelectionSetID. The visibility can be used to guide the reducer 
	 * and/or texture coordinates generator (parameterizer) with the flags UseVisibilityWeightsInReducer 
	 * respective UseVisibilityWeightsInTexcoordGenerator. There is also an option 
	 * to completely throw away triangles that are deemed not visible, using the CullOccludedGeometry 
	 * flag. 
	 */
	class spVisibilitySettings : public spSettingsObject
	{
		public:
		spVisibilitySettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spVisibilitySettings();
		spVisibilitySettings( const spVisibilitySettings &p );
		spVisibilitySettings & operator=( const spVisibilitySettings &p );
		const spVisibilitySettings* operator->() const;
		spVisibilitySettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spVisibilitySettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IVisibilitySettings",type)==0) || (strcmp("spVisibilitySettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spVisibilitySettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spVisibilitySettings handle 
		 * @return a handle to the spVisibilitySettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spVisibilitySettings SafeCast(spObject other);

		/**
		 * If set to true, visibility weights will be used in the reducer. 
		 * @param value The desired flag value. 
		 */
		void SetUseVisibilityWeightsInReducer( bool value ) const;

		/**
		 * If set to true, visibility weights will be used in the reducer. 
		 */
		bool GetUseVisibilityWeightsInReducer(  ) const;

		/**
		 * If set to true, visibility weights will be used when generating new texture 
		 * coordinates. 
		 * @param value The new UseVisibilityWeightsInTexcoordGenerator value. 
		 */
		void SetUseVisibilityWeightsInTexcoordGenerator( bool value ) const;

		/**
		 * If set to true, visibility weights will be used when generating new texture 
		 * coordinates. 
		 */
		bool GetUseVisibilityWeightsInTexcoordGenerator(  ) const;

		/**
		 * Set how aggressively reducer should handle low visibility weights. 
		 * @param value Power of influence (default 1.0). Value cannot be less than 0. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetVisibilityWeightsPower( real value ) const;

		/**
		 * Set how aggressively reducer should handle low visibility weights. 
		 */
		real GetVisibilityWeightsPower(  ) const;

		/**
		 * If set to true, geometry that is not visible will be removed. 
		 * @param value The new CullOccludedGeometry value. 
		 */
		void SetCullOccludedGeometry( bool value ) const;

		/**
		 * If set to true, geometry that is not visible will be removed. 
		 */
		bool GetCullOccludedGeometry(  ) const;

		/**
		 * Set the ForceVisibilityCalculation if true, visibility weights will definitely 
		 * be computed for the geometry, even if the visibility isn't specifically being 
		 * used for reduction/materialLOD/culling according to the VisibilitySettings. 
		 * @param value The new ForceVisibilityCalculation value. 
		 */
		void SetForceVisibilityCalculation( bool value ) const;

		/**
		 * Set the ForceVisibilityCalculation if true, visibility weights will definitely 
		 * be computed for the geometry, even if the visibility isn't specifically being 
		 * used for reduction/materialLOD/culling according to the VisibilitySettings. 
		 *  
		 */
		bool GetForceVisibilityCalculation(  ) const;

		/**
		 * Set whether triangles should be regarded visible when viewed from the back. 
		 * @param value The desired flag value. 
		 */
		void SetUseBackfaceCulling( bool value ) const;

		/**
		 * Set whether triangles should be regarded visible when viewed from the back. 
		 *  
		 */
		bool GetUseBackfaceCulling(  ) const;

		/**
		 * The ID of the selection set containing all the scene cameras and scene meshes 
		 * used when computing visibility. If scene meshes are added, all their vertices 
		 * will be used as omni-directional cameras. If set to -1, all cameras in the 
		 * scene will be used. If both selection set name and ID are set, the name will 
		 * be used. 
		 * @param value The desired SelectionSetID value. Value cannot be less than -1. 
		 *  
		 */
		void SetCameraSelectionSetID( rid value ) const;

		/**
		 * The ID of the selection set containing all the scene cameras and scene meshes 
		 * used when computing visibility. If scene meshes are added, all their vertices 
		 * will be used as omni-directional cameras. If set to -1, all cameras in the 
		 * scene will be used. If both selection set name and ID are set, the name will 
		 * be used. 
		 */
		rid GetCameraSelectionSetID(  ) const;

		/**
		 * The name of the selection set containing all the scene cameras and scene meshes 
		 * used when computing visibility. If scene meshes are added, all their vertices 
		 * will be used as omni-directional cameras. If set to null, all cameras in the 
		 * scene will be used. If both selection set name and ID are set, the name will 
		 * be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetCameraSelectionSetName( const char * value ) const;

		/**
		 * The name of the selection set containing all the scene cameras and scene meshes 
		 * used when computing visibility. If scene meshes are added, all their vertices 
		 * will be used as omni-directional cameras. If set to null, all cameras in the 
		 * scene will be used. If both selection set name and ID are set, the name will 
		 * be used. 
		 */
		spString GetCameraSelectionSetName(  ) const;

		/**
		 * The ID of the selection set containing all the scene meshes that should occlude 
		 * the scene when calculating visibility. If set to -1, no occluders will be used. 
		 * If both selection set name and ID are set, the name will be used. 
		 * @param value The desired OccluderSelectionSetID value. Value cannot be less 
		 * than -1. 
		 */
		void SetOccluderSelectionSetID( rid value ) const;

		/**
		 * The ID of the selection set containing all the scene meshes that should occlude 
		 * the scene when calculating visibility. If set to -1, no occluders will be used. 
		 * If both selection set name and ID are set, the name will be used. 
		 */
		rid GetOccluderSelectionSetID(  ) const;

		/**
		 * The name of the selection set containing all the scene meshes used when computing 
		 * visibility. If set to null, no occluders in the scene will be used. If both 
		 * selection set name and ID are set, the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetOccluderSelectionSetName( const char * value ) const;

		/**
		 * The name of the selection set containing all the scene meshes used when computing 
		 * visibility. If set to null, no occluders in the scene will be used. If both 
		 * selection set name and ID are set, the name will be used. 
		 */
		spString GetOccluderSelectionSetName(  ) const;

		/**
		 * If a group of non-visible triangles (connected to visible triangles) has an 
		 * area below the FillNonVisibleAreaThreshold - it will receive the same visibility 
		 * as the neighboring visible triangles. Set to zero to skip filling nonvisible 
		 * regions. 
		 * @param value The new FillNonVisibleAreaThreshold value. Value cannot be less 
		 * than 0. Value cannot be greater than REAL_MAX. 
		 */
		void SetFillNonVisibleAreaThreshold( real value ) const;

		/**
		 * If a group of non-visible triangles (connected to visible triangles) has an 
		 * area below the FillNonVisibleAreaThreshold - it will receive the same visibility 
		 * as the neighboring visible triangles. Set to zero to skip filling nonvisible 
		 * regions. 
		 */
		real GetFillNonVisibleAreaThreshold(  ) const;

		/**
		 * If enabled, will remove all the visible triangles that are not occluding any 
		 * other triangle. It will also remove all non-visible triangles. 
		 * @param value The new RemoveTrianglesNotOccludingOtherTriangles value. 
		 */
		void SetRemoveTrianglesNotOccludingOtherTriangles( bool value ) const;

		/**
		 * If enabled, will remove all the visible triangles that are not occluding any 
		 * other triangle. It will also remove all non-visible triangles. 
		 */
		bool GetRemoveTrianglesNotOccludingOtherTriangles(  ) const;

		/**
		 * If enabled, will compute the visibility conservatively - meaning that triangles 
		 * that are visible will be tagged as visible but some non-visible triangles might 
		 * also be tagged as visible. If this is turned off, then it is no longer guaranteed 
		 * that all visible triangles are found - but more non-visible triangles will 
		 * be identified as non-visible. 
		 * @param value The new ConservativeMode value. 
		 */
		void SetConservativeMode( bool value ) const;

		/**
		 * If enabled, will compute the visibility conservatively - meaning that triangles 
		 * that are visible will be tagged as visible but some non-visible triangles might 
		 * also be tagged as visible. If this is turned off, then it is no longer guaranteed 
		 * that all visible triangles are found - but more non-visible triangles will 
		 * be identified as non-visible. 
		 */
		bool GetConservativeMode(  ) const;

		/**
		 * Specifies the renderer type when computing visibility. 
		 * @param value The new ComputeVisibilityMode value. 
		 */
		void SetComputeVisibilityMode( Simplygon::EComputeVisibilityMode value ) const;

		/**
		 * Specifies the renderer type when computing visibility. 
		 */
		Simplygon::EComputeVisibilityMode GetComputeVisibilityMode(  ) const;

	};

	/**
	 * ReductionProcessor welds, removes t-junctions, removes double-triangles and 
	 * reduces the triangle count of the Geometry. It also calculates new normals for 
	 * the reduced and optimized Geometry. 
	 */
	class spReductionProcessor : public spProcessingObject
	{
		public:
		spReductionProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spReductionProcessor();
		spReductionProcessor( const spReductionProcessor &p );
		spReductionProcessor & operator=( const spReductionProcessor &p );
		const spReductionProcessor* operator->() const;
		spReductionProcessor( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spReductionProcessor is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IReductionProcessor",type)==0) || (strcmp("spReductionProcessor",type)==0) )
				return true;
			return spProcessingObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spReductionProcessor 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spReductionProcessor handle 
		 * @return a handle to the spReductionProcessor object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spReductionProcessor SafeCast(spObject other);

		/**
		 * The scene object to reduce. Please note that internal references might be modified 
		 * by the processor. The caller should refresh any reference that is cached outside 
		 * the scene after running the processor. 
		 * @param value The scene to reduce. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The scene object to reduce. Please note that internal references might be modified 
		 * by the processor. The caller should refresh any reference that is cached outside 
		 * the scene after running the processor. 
		 */
		spScene GetScene(  ) const;

		/**
		 * The MappingImage object that is generated if GenerateMappingImage is set in 
		 * MappingImageSettings. This returns mapping image index 0, use GetMappingImageForImageIndex 
		 * to retrieve for a specific index. A new object is generated for each call to 
		 * RunProcessing(). 
		 * @return The generated mappingimage 
		 */
		spMappingImage GetMappingImage(  ) const;

		/**
		 * The MappingImage object that is generated if GenerateMappingImage is set in 
		 * MappingImageSettings. Called with an id, it will fetch that specific mapping 
		 * image if using multi-material output. A new object is generated for each call 
		 * to RunProcessing(). 
		 * @param OutputMaterialId The value for the OutputMaterialId. 
		 * @return The generated mappingimage 
		 */
		spMappingImage GetMappingImageForImageIndex( rid OutputMaterialId ) const;

		/**
		 * The settings for the repair process. 
		 * @return The repair settings object associated with the processor 
		 */
		spRepairSettings GetRepairSettings(  ) const;

		/**
		 * The settings for the reduction process. 
		 * @return The reduction settings object associated with the processor 
		 */
		spReductionSettings GetReductionSettings(  ) const;

		/**
		 * The settings for the bone removal process. 
		 * @return The bone settings object associated with the processor 
		 */
		spBoneSettings GetBoneSettings(  ) const;

		/**
		 * The settings for the normal repair process. 
		 * @return The normal repair settings object associated with the processor 
		 */
		spNormalCalculationSettings GetNormalCalculationSettings(  ) const;

		/**
		 * The settings for the image mapping process. 
		 * @return The mappingimage settings object associated with the processor 
		 */
		spMappingImageSettings GetMappingImageSettings(  ) const;

		/**
		 * The settings for handling visibility weights. Visibility settings contains 
		 * the parameters for how to compute the visibility of a scene and how to use 
		 * it. 
		 * @return The visibility settings object associated with the processor 
		 */
		spVisibilitySettings GetVisibilitySettings(  ) const;

		/**
		 * The settings for handling visibility weights. 
		 * @return The vertex weight settings object associated with the processor 
		 */
		spVertexWeightSettings GetVertexWeightSettings(  ) const;

		/**
		 * Returns the max deviation reached for the last processing. 
		 * @return The max deviation of the last processing 
		 */
		real GetResultDeviation(  ) const;

	};

	/**
	 * Remeshing settings for the RemeshingLegacyProcessor class. The remesher creates 
	 * a completely new lightweight mesh from the input geometry, and is intended to 
	 * be viewed from the outside. Here you will set the OnScreenSize (larger numbers 
	 * means a more detailed mesh), merge distance (which fills in smaller gaps) and 
	 * a cutting plane (where all parts of the input mesh on the far side of that plane 
	 * will be culled). 
	 */
	class spRemeshingLegacySettings : public spSettingsObject
	{
		public:
		spRemeshingLegacySettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spRemeshingLegacySettings();
		spRemeshingLegacySettings( const spRemeshingLegacySettings &p );
		spRemeshingLegacySettings & operator=( const spRemeshingLegacySettings &p );
		const spRemeshingLegacySettings* operator->() const;
		spRemeshingLegacySettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spRemeshingLegacySettings is a or is 
		 * a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IRemeshingLegacySettings",type)==0) || (strcmp("spRemeshingLegacySettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spRemeshingLegacySettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spRemeshingLegacySettings handle 
		 * @return a handle to the spRemeshingLegacySettings object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spRemeshingLegacySettings SafeCast(spObject other);

		/**
		 * The on-screen rendering size of the geometry. Allowed values are in the range 
		 * 20 to 4000 pixels. 
		 * @param value The value OnScreenSize will be set to. Value cannot be less than 
		 * 20. Value cannot be greater than 4000. 
		 */
		void SetOnScreenSize( unsigned int value ) const;

		/**
		 * The on-screen rendering size of the geometry. Allowed values are in the range 
		 * 20 to 4000 pixels. 
		 */
		unsigned int GetOnScreenSize(  ) const;

		/**
		 * The on-screen merge distance in pixels. Smaller cavities will be removed. This 
		 * will be capped to the on-screen size of the remeshing. 
		 * @param value The value MergeDistance will be set to. Value cannot be less than 
		 * 0. Value cannot be greater than 4000. 
		 */
		void SetMergeDistance( unsigned int value ) const;

		/**
		 * The on-screen merge distance in pixels. Smaller cavities will be removed. This 
		 * will be capped to the on-screen size of the remeshing. 
		 */
		unsigned int GetMergeDistance(  ) const;

		/**
		 * The merge boldness. Defined from 0 to 1, low values will only merge deep cavities 
		 * while high values will merge anything that falls under the merge distance. 
		 * @param value The value MergeBoldness will be set to. Value cannot be less than 
		 * 0. Value cannot be greater than 1. 
		 */
		void SetMergeBoldness( real value ) const;

		/**
		 * The merge boldness. Defined from 0 to 1, low values will only merge deep cavities 
		 * while high values will merge anything that falls under the merge distance. 
		 *  
		 */
		real GetMergeBoldness(  ) const;

		/**
		 * The maximum size in pixels of a generated triangle Any value from 5 pixels 
		 * and above is allowed. If set to 0, there will be no restriction. 
		 * @param value The value MaxTriangleSize will be set to. Value cannot be less 
		 * than 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetMaxTriangleSize( unsigned int value ) const;

		/**
		 * The maximum size in pixels of a generated triangle Any value from 5 pixels 
		 * and above is allowed. If set to 0, there will be no restriction. 
		 */
		unsigned int GetMaxTriangleSize(  ) const;

		/**
		 * The surface transfer mode. 
		 * @param value The new surface transfer mode. 
		 */
		void SetSurfaceTransferMode( Simplygon::ESurfaceTransferMode value ) const;

		/**
		 * The surface transfer mode. 
		 */
		Simplygon::ESurfaceTransferMode GetSurfaceTransferMode(  ) const;

		/**
		 * Set to true to cap the mesh with user defined cutting planes. 
		 * @param value The bool UseCuttingPlanes will be set to. 
		 */
		void SetUseCuttingPlanes( bool value ) const;

		/**
		 * Set to true to cap the mesh with user defined cutting planes. 
		 */
		bool GetUseCuttingPlanes(  ) const;

		/**
		 * The normal hard angle cutoff in degrees. 
		 * @param value The value to which HardEdgeAngle will be set. Value cannot be 
		 * less than 0. Value cannot be greater than 180. 
		 */
		void SetHardEdgeAngle( real value ) const;

		/**
		 * The normal hard angle cutoff in degrees. 
		 */
		real GetHardEdgeAngle(  ) const;

		/**
		 * If true, the vertex normals channel will be sampled from the original mesh. 
		 * @param value The value to which TransferNormals will be set. 
		 */
		void SetTransferNormals( bool value ) const;

		/**
		 * If true, the vertex normals channel will be sampled from the original mesh. 
		 *  
		 */
		bool GetTransferNormals(  ) const;

		/**
		 * If true, vertex color channels will be sampled from the original mesh. 
		 * @param value The bool to which TransferColors will be set. 
		 */
		void SetTransferColors( bool value ) const;

		/**
		 * If true, vertex color channels will be sampled from the original mesh. 
		 */
		bool GetTransferColors(  ) const;

		/**
		 * If true, the terrain selection set along with the terrain empty space override 
		 * will be used to clip the remeshed geometry, like a clipping plane. 
		 * @param value The bool to which UseClippingGeometry will be set. 
		 */
		void SetUseClippingGeometry( bool value ) const;

		/**
		 * If true, the terrain selection set along with the terrain empty space override 
		 * will be used to clip the remeshed geometry, like a clipping plane. 
		 */
		bool GetUseClippingGeometry(  ) const;

		/**
		 * If true, a coordinate in the area that will be considered "outside" can be 
		 * overridden by the user, allowing the remesher to be used for things like interiors 
		 * of caves and rooms. 
		 * @param value The value to which UseEmptySpaceOverride will be set. 
		 */
		void SetUseEmptySpaceOverride( bool value ) const;

		/**
		 * If true, a coordinate in the area that will be considered "outside" can be 
		 * overridden by the user, allowing the remesher to be used for things like interiors 
		 * of caves and rooms. 
		 */
		bool GetUseEmptySpaceOverride(  ) const;

		/**
		 * The empty space override coordinate. 
		 * @param value_realInputDataPtr Is a pointer to a 3-tuple real which will be 
		 * copied and used as a marker designating empty space. 
		 */
		void SetEmptySpaceOverride( const real *value_realInputDataPtr ) const;

		/**
		 * The empty space override coordinate. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetEmptySpaceOverride(  ) const;

		/**
		 * Selects which SelectionSet should be processed. If set to -1, all geometries 
		 * in the scene will be processed. 
		 * @param value The desired SelectionSet id. Value cannot be less than -1. 
		 */
		void SetProcessSelectionSetID( rid value ) const;

		/**
		 * Selects which SelectionSet should be processed. If set to -1, all geometries 
		 * in the scene will be processed. 
		 */
		rid GetProcessSelectionSetID(  ) const;

		/**
		 * Which selection set should be processed. If the name is not found, all geometries 
		 * in the scene will be processed. If both selection set name and ID are set, 
		 * the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetProcessSelectionSetName( const char * value ) const;

		/**
		 * Which selection set should be processed. If the name is not found, all geometries 
		 * in the scene will be processed. If both selection set name and ID are set, 
		 * the name will be used. 
		 */
		spString GetProcessSelectionSetName(  ) const;

		/**
		 * The ID of the selection set containing all the cutting planes that should be 
		 * used. If set to -1, all cutting planes are selected. Cutting planes will only 
		 * be used if UseCuttingPlanes is true. If both selection set name and ID are 
		 * set, the name will be used. 
		 * @param value The ID of the selection set containing the cutting planes. Value 
		 * cannot be less than -1. 
		 */
		void SetCuttingPlaneSelectionSetID( rid value ) const;

		/**
		 * The ID of the selection set containing all the cutting planes that should be 
		 * used. If set to -1, all cutting planes are selected. Cutting planes will only 
		 * be used if UseCuttingPlanes is true. If both selection set name and ID are 
		 * set, the name will be used. 
		 */
		rid GetCuttingPlaneSelectionSetID(  ) const;

		/**
		 * The name of the selection set containing all the cutting planes that should 
		 * be used. If the name is not found, all cutting planes are selected. If both 
		 * selection set name and ID are set, the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetCuttingPlaneSelectionSetName( const char * value ) const;

		/**
		 * The name of the selection set containing all the cutting planes that should 
		 * be used. If the name is not found, all cutting planes are selected. If both 
		 * selection set name and ID are set, the name will be used. 
		 */
		spString GetCuttingPlaneSelectionSetName(  ) const;

		/**
		 * The ID of the selection set containing the terrain for clipping. If both selection 
		 * set name and ID are set, the name will be used. 
		 * @param value The ID of the selection set containing the clipping terrain. Value 
		 * cannot be less than -1. 
		 */
		void SetClippingGeometrySelectionSetID( rid value ) const;

		/**
		 * The ID of the selection set containing the terrain for clipping. If both selection 
		 * set name and ID are set, the name will be used. 
		 */
		rid GetClippingGeometrySelectionSetID(  ) const;

		/**
		 * The name of the selection set containing the terrain for clipping. If both 
		 * selection set name and ID are set, the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetClippingGeometrySelectionSetName( const char * value ) const;

		/**
		 * The name of the selection set containing the terrain for clipping. If both 
		 * selection set name and ID are set, the name will be used. 
		 */
		spString GetClippingGeometrySelectionSetName(  ) const;

		/**
		 * If true, a coordinate in the area that will be considered "outside" for the 
		 * clipping geometry can be overridden by the user. 
		 * @param value The value to which UseClippingGeometryEmptySpaceOverride will 
		 * be set. 
		 */
		void SetUseClippingGeometryEmptySpaceOverride( bool value ) const;

		/**
		 * If true, a coordinate in the area that will be considered "outside" for the 
		 * clipping geometry can be overridden by the user. 
		 */
		bool GetUseClippingGeometryEmptySpaceOverride(  ) const;

		/**
		 * If true, an alternate algorithm is used for the remeshing which is significantly 
		 * faster, but supports smaller sizes ( up to 1000 OnScreenSize ), does not include 
		 * any advanced features, and may be less precise. 
		 * @param value The value to which UsePreviewMode will be set. 
		 */
		void SetUsePreviewMode( bool value ) const;

		/**
		 * If true, an alternate algorithm is used for the remeshing which is significantly 
		 * faster, but supports smaller sizes ( up to 1000 OnScreenSize ), does not include 
		 * any advanced features, and may be less precise. 
		 */
		bool GetUsePreviewMode(  ) const;

		/**
		 * If true, the remeshing processor will not map backfacing triangles. 
		 * @param value The desired value of RespectWindingDirection. 
		 */
		void SetRespectWindingDirection( bool value ) const;

		/**
		 * If true, the remeshing processor will not map backfacing triangles. 
		 */
		bool GetRespectWindingDirection(  ) const;

		/**
		 * The clipping geometry empty space override coordinate. 
		 * @param value_realInputDataPtr Is a pointer to a 3-tuple real which will be 
		 * copied and used as a marker designating empty space. 
		 */
		void SetClippingGeometryEmptySpaceOverride( const real *value_realInputDataPtr ) const;

		/**
		 * The clipping geometry empty space override coordinate. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetClippingGeometryEmptySpaceOverride(  ) const;

		/**
		 * The name of the scene node in the output Scene containing the remeshed geometry. 
		 * @param value The desired OutputSceneNodeName. 
		 */
		void SetOutputSceneNodeName( const char * value ) const;

		/**
		 * The name of the scene node in the output Scene containing the remeshed geometry. 
		 *  
		 */
		spString GetOutputSceneNodeName(  ) const;

	};

	/**
	 * Remeshing settings for the RemeshingProcessor class. 
	 */
	class spRemeshingSettings : public spSettingsObject
	{
		public:
		spRemeshingSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spRemeshingSettings();
		spRemeshingSettings( const spRemeshingSettings &p );
		spRemeshingSettings & operator=( const spRemeshingSettings &p );
		const spRemeshingSettings* operator->() const;
		spRemeshingSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spRemeshingSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IRemeshingSettings",type)==0) || (strcmp("spRemeshingSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spRemeshingSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spRemeshingSettings handle 
		 * @return a handle to the spRemeshingSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spRemeshingSettings SafeCast(spObject other);

		/**
		 * The on-screen rendering size of the geometry. Allowed values are in the range 
		 * 20 to 10000 pixels. 
		 * @param value The value OnScreenSize will be set to. Value cannot be less than 
		 * 20. Value cannot be greater than 10000. 
		 */
		void SetOnScreenSize( unsigned int value ) const;

		/**
		 * The on-screen rendering size of the geometry. Allowed values are in the range 
		 * 20 to 10000 pixels. 
		 */
		unsigned int GetOnScreenSize(  ) const;

		/**
		 * The remeshing mode, options are Outside, Inside and Manual. RemeshingMode defines 
		 * if the remeshing processor remeshes the outside or the inside of the input 
		 * geometry. Manual needs the user to define a position in space that will be 
		 * considered as outside for the purposes of the remeshing. Position is set with 
		 * RemeshingModeManualPosition. Hole filling only works with the mode Outside. 
		 * @param value The new remeshing mode. 
		 */
		void SetRemeshingMode( Simplygon::ERemeshingMode value ) const;

		/**
		 * The remeshing mode, options are Outside, Inside and Manual. RemeshingMode defines 
		 * if the remeshing processor remeshes the outside or the inside of the input 
		 * geometry. Manual needs the user to define a position in space that will be 
		 * considered as outside for the purposes of the remeshing. Position is set with 
		 * RemeshingModeManualPosition. Hole filling only works with the mode Outside. 
		 *  
		 */
		Simplygon::ERemeshingMode GetRemeshingMode(  ) const;

		/**
		 * HoleFilling defines how aggressively the remesher will fill holes and cavities. 
		 * What this does is to measure the volume and hole opening sizes of concavities 
		 * in the input geometry and fill them in in the remeshing if the concavity is 
		 * large enough with a small enough opening. This removes a lot of unnecessary 
		 * geometry and is recommended to be kept at it's default rather than turning 
		 * it off, it will in the vast majority of cases have a positive effect on the 
		 * result. 
		 * @param value The new hole fill mode. 
		 */
		void SetHoleFilling( Simplygon::EHoleFilling value ) const;

		/**
		 * HoleFilling defines how aggressively the remesher will fill holes and cavities. 
		 * What this does is to measure the volume and hole opening sizes of concavities 
		 * in the input geometry and fill them in in the remeshing if the concavity is 
		 * large enough with a small enough opening. This removes a lot of unnecessary 
		 * geometry and is recommended to be kept at it's default rather than turning 
		 * it off, it will in the vast majority of cases have a positive effect on the 
		 * result. 
		 */
		Simplygon::EHoleFilling GetHoleFilling(  ) const;

		/**
		 * The surface transfer mode. 
		 * @param value The new surface transfer mode. 
		 */
		void SetSurfaceTransferMode( Simplygon::ESurfaceTransferMode value ) const;

		/**
		 * The surface transfer mode. 
		 */
		Simplygon::ESurfaceTransferMode GetSurfaceTransferMode(  ) const;

		/**
		 * The normal hard angle cutoff in degrees. 
		 * @param value The value to which HardEdgeAngle will be set. Value cannot be 
		 * less than 0. Value cannot be greater than 180. 
		 */
		void SetHardEdgeAngle( real value ) const;

		/**
		 * The normal hard angle cutoff in degrees. 
		 */
		real GetHardEdgeAngle(  ) const;

		/**
		 * If the flag is set, the normal calculation will only allow hard edges along 
		 * texture borders. Any vertex normal within a texture chart (not along the border) 
		 * will be forced soft. Caveat: If this is enabled, some normals might be highly 
		 * interpolated, and deviate substantially from the triangle normal. 
		 * @param value The desired ForceSoftEdgesWithinTextureCharts flag. 
		 */
		void SetForceSoftEdgesWithinTextureCharts( bool value ) const;

		/**
		 * If the flag is set, the normal calculation will only allow hard edges along 
		 * texture borders. Any vertex normal within a texture chart (not along the border) 
		 * will be forced soft. Caveat: If this is enabled, some normals might be highly 
		 * interpolated, and deviate substantially from the triangle normal. 
		 */
		bool GetForceSoftEdgesWithinTextureCharts(  ) const;

		/**
		 * If set, the vertex normals channel will be sampled from the original mesh. 
		 * @param value The value to which TransferNormals will be set. 
		 */
		void SetTransferNormals( bool value ) const;

		/**
		 * If set, the vertex normals channel will be sampled from the original mesh. 
		 *  
		 */
		bool GetTransferNormals(  ) const;

		/**
		 * If set, vertex color channels will be sampled from the original mesh. 
		 * @param value The bool to which TransferColors will be set. 
		 */
		void SetTransferColors( bool value ) const;

		/**
		 * If set, vertex color channels will be sampled from the original mesh. 
		 */
		bool GetTransferColors(  ) const;

		/**
		 * Selects which SelectionSet should be processed. If set to -1, all geometries 
		 * in the scene will be processed. 
		 * @param value The desired SelectionSet id. Value cannot be less than -1. 
		 */
		void SetProcessSelectionSetID( rid value ) const;

		/**
		 * Selects which SelectionSet should be processed. If set to -1, all geometries 
		 * in the scene will be processed. 
		 */
		rid GetProcessSelectionSetID(  ) const;

		/**
		 * Selects which selection set should be processed. If the selection set is not 
		 * found, all geometries in the scene will be processed. If both selection set 
		 * name and ID are set, the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetProcessSelectionSetName( const char * value ) const;

		/**
		 * Selects which selection set should be processed. If the selection set is not 
		 * found, all geometries in the scene will be processed. If both selection set 
		 * name and ID are set, the name will be used. 
		 */
		spString GetProcessSelectionSetName(  ) const;

		/**
		 * If false, the processor will remove all geometry and scene nodes which was 
		 * not selected for processing from the scene. If true, only the geometry in the 
		 * ProcessSelectionSet will be replaced or updated. If old nodes are kept and 
		 * a new geometry is added to the scene, it will always be the last child of the 
		 * scene root. If generating a mappingimage to cast materials, new materialIds 
		 * will also be appended to the end of the old material table instead of replacing 
		 * the old ones. 
		 * @param value The desired KeepUnprocessedSceneMeshes flag. 
		 */
		void SetKeepUnprocessedSceneMeshes( bool value ) const;

		/**
		 * If false, the processor will remove all geometry and scene nodes which was 
		 * not selected for processing from the scene. If true, only the geometry in the 
		 * ProcessSelectionSet will be replaced or updated. If old nodes are kept and 
		 * a new geometry is added to the scene, it will always be the last child of the 
		 * scene root. If generating a mappingimage to cast materials, new materialIds 
		 * will also be appended to the end of the old material table instead of replacing 
		 * the old ones. 
		 */
		bool GetKeepUnprocessedSceneMeshes(  ) const;

		/**
		 * X component was a 3-tuple real that acts as the marker designating remeshing 
		 * processors starting position 
		 * @param value The value of X Component of a 3-tuple real. Value cannot be less 
		 * than -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetRemeshingModeManualPositionX( real value ) const;

		/**
		 * X component was a 3-tuple real that acts as the marker designating remeshing 
		 * processors starting position 
		 */
		real GetRemeshingModeManualPositionX(  ) const;

		/**
		 * Y component was a 3-tuple real that acts as the marker designating remeshing 
		 * processors starting position 
		 * @param value The value of Y Component of a 3-tuple real. Value cannot be less 
		 * than -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetRemeshingModeManualPositionY( real value ) const;

		/**
		 * Y component was a 3-tuple real that acts as the marker designating remeshing 
		 * processors starting position 
		 */
		real GetRemeshingModeManualPositionY(  ) const;

		/**
		 * Z component was a 3-tuple real that acts as the marker designating remeshing 
		 * processors starting position 
		 * @param value The value of Z Component of a 3-tuple real. Value cannot be less 
		 * than -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetRemeshingModeManualPositionZ( real value ) const;

		/**
		 * Z component was a 3-tuple real that acts as the marker designating remeshing 
		 * processors starting position 
		 */
		real GetRemeshingModeManualPositionZ(  ) const;

	};

	/**
	 * RemeshingLegacyProcessor creates a new geometry that is based on the input geometry, 
	 * but that is topologically based on the size of the input geometry rendered at 
	 * a specific screen size, and allowed pixel error. The remesher will on demand 
	 * also add texture coordinates and a mapping texture to the output remeshed geometry. 
	 * The geometry that is to be remeshed can be defined either using an in-memory 
	 * geometry data object, or using a geometry file placed on disk, the latter being 
	 * the preferred method, if the source geometry is very large as it can be swapped 
	 * in/out of memory as needed. 
	 */
	class spRemeshingLegacyProcessor : public spProcessingObject
	{
		public:
		spRemeshingLegacyProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spRemeshingLegacyProcessor();
		spRemeshingLegacyProcessor( const spRemeshingLegacyProcessor &p );
		spRemeshingLegacyProcessor & operator=( const spRemeshingLegacyProcessor &p );
		const spRemeshingLegacyProcessor* operator->() const;
		spRemeshingLegacyProcessor( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spRemeshingLegacyProcessor is a or is 
		 * a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IRemeshingLegacyProcessor",type)==0) || (strcmp("spRemeshingLegacyProcessor",type)==0) )
				return true;
			return spProcessingObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spRemeshingLegacyProcessor 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spRemeshingLegacyProcessor handle 
		 * @return a handle to the spRemeshingLegacyProcessor object, if the cast can 
		 * be made, and a NULL handle otherwise 
		 */
		static spRemeshingLegacyProcessor SafeCast(spObject other);

		/**
		 * The scene used for remeshing processing. All mesh nodes in the whole scene 
		 * tree will be replaced by one proxy mesh. Please note that internal references 
		 * might be modified by the processor. The caller should refresh any reference 
		 * that is cached outside the scene after running the processor. 
		 * @param value The scene to process. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The scene used for remeshing processing. All mesh nodes in the whole scene 
		 * tree will be replaced by one proxy mesh. Please note that internal references 
		 * might be modified by the processor. The caller should refresh any reference 
		 * that is cached outside the scene after running the processor. 
		 */
		spScene GetScene(  ) const;

		/**
		 * The MappingImage object that is generated if GenerateMappingImage is set in 
		 * the MappingImageSettings. This returns mapping image index 0, use GetMappingImageForImageIndex 
		 * to retrieve for a specific index. A new object is generated for each call to 
		 * RunProcessing(). 
		 * @return The current mappingimage 
		 */
		spMappingImage GetMappingImage(  ) const;

		/**
		 * The MappingImage object that is generated if GenerateMappingImage is set in 
		 * the MappingImageSettings. Called with an id, it will fetch that specific mapping 
		 * image if using multi-material output. A new object is generated for each call 
		 * to RunProcessing(). 
		 * @param value The ID of the mapping image. 
		 * @return The current mappingimage 
		 */
		spMappingImage GetMappingImageForImageIndex( rid value ) const;

		/**
		 * The settings for the remeshing process. 
		 * @return The remeshing settings object. 
		 */
		spRemeshingLegacySettings GetRemeshingLegacySettings(  ) const;

		/**
		 * The settings for the image mapping process. 
		 * @return The mapping image settings object. 
		 */
		spMappingImageSettings GetMappingImageSettings(  ) const;

		/**
		 * The settings for the bone removal process. 
		 * @return The bone settings object. 
		 */
		spBoneSettings GetBoneSettings(  ) const;

		/**
		 * The settings for handling visibility weights. Visibility settings contains 
		 * the parameters for how to compute the visibility of a scene and how to use 
		 * it. 
		 * @return The visibility settings object associated with the processor 
		 */
		spVisibilitySettings GetVisibilitySettings(  ) const;

		/**
		 * When called after processing, this returns the id of a new selection set in 
		 * the scene which contains the mesh node and geometry created in the remeshing 
		 * processing. 
		 * @return The remeshed geometry selection set id 
		 */
		rid GetResultSelectionSetId(  ) const;

	};

	/**
	 * The RemeshingProcessor takes an input scene and replaces it with a lightweight 
	 * proxy geometry that resembles the original, but does not share vertex data or 
	 * parts of the original mesh data. The remeshed object is created and optimized 
	 * for a certain on-screen pixel size - which means that holes and parts that are 
	 * close to each other will have their gaps filled if the distance is below a pixel. 
	 * At default settings, the proxy mesh is assumed to be viewed from the outside. 
	 * Any interior mesh that cannot be seen is removed. The result is a very light-weight 
	 * mesh that is highly optimized for real-time viewing, or to speed up off-line 
	 * rendering of small objects. Simplygon is capable of remeshing arbitrary geometry, 
	 * including non-manifold surfaces. 
	 */
	class spRemeshingProcessor : public spProcessingObject
	{
		public:
		spRemeshingProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spRemeshingProcessor();
		spRemeshingProcessor( const spRemeshingProcessor &p );
		spRemeshingProcessor & operator=( const spRemeshingProcessor &p );
		const spRemeshingProcessor* operator->() const;
		spRemeshingProcessor( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spRemeshingProcessor is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IRemeshingProcessor",type)==0) || (strcmp("spRemeshingProcessor",type)==0) )
				return true;
			return spProcessingObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spRemeshingProcessor 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spRemeshingProcessor handle 
		 * @return a handle to the spRemeshingProcessor object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spRemeshingProcessor SafeCast(spObject other);

		/**
		 * The scene used for remeshing processing. All mesh nodes in the whole scene 
		 * tree will be replaced by one proxy mesh. Please note that internal references 
		 * might be modified by the processor. The caller should refresh any reference 
		 * that is cached outside the scene after running the processor. 
		 * @param value The scene to process. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The scene used for remeshing processing. All mesh nodes in the whole scene 
		 * tree will be replaced by one proxy mesh. Please note that internal references 
		 * might be modified by the processor. The caller should refresh any reference 
		 * that is cached outside the scene after running the processor. 
		 */
		spScene GetScene(  ) const;

		/**
		 * The MappingImage object that is generated if GenerateMappingImage is set in 
		 * the MappingImageSettings. This returns mapping image index 0, use GetMappingImageForImageIndex 
		 * to retrieve for a specific index. A new object is generated for each call to 
		 * RunProcessing(). 
		 * @return The generated mappingimage 
		 */
		spMappingImage GetMappingImage(  ) const;

		/**
		 * The MappingImage object that is generated if GenerateMappingImage is set in 
		 * the MappingImageSettings. Called with an id, it will fetch that specific mapping 
		 * image if using multi-material output. A new object is generated for each call 
		 * to RunProcessing(). 
		 * @param OutputMaterialId The value for the OutputMaterialId. 
		 * @return The generated mappingimage 
		 */
		spMappingImage GetMappingImageForImageIndex( rid OutputMaterialId ) const;

		/**
		 * The settings for the remeshing process. 
		 * @return The remeshing settings object. 
		 */
		spRemeshingSettings GetRemeshingSettings(  ) const;

		/**
		 * The settings for the image mapping process. 
		 * @return The mapping image settings object. 
		 */
		spMappingImageSettings GetMappingImageSettings(  ) const;

		/**
		 * The settings for the bone removal process. 
		 * @return The bone settings object. 
		 */
		spBoneSettings GetBoneSettings(  ) const;

		/**
		 * Get settings for volumetric triangle culling functionality. 
		 * @return The geometry culling settings object associated with the processor 
		 *  
		 */
		spGeometryCullingSettings GetGeometryCullingSettings(  ) const;

		/**
		 * The settings for handling visibility weights. Visibility settings contains 
		 * the parameters for how to compute the visibility of a scene and how to use 
		 * it. 
		 * @return The visibility settings object associated with the processor 
		 */
		spVisibilitySettings GetVisibilitySettings(  ) const;

	};

	/**
	 * Scene is the main keeper of a scene and scene graph in simplygon. The scene 
	 * is self-contained, with materials, textures, etc. to describe a full scene. 
	 */
	class spScene : public spObject
	{
		public:
		spScene( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spScene();
		spScene( const spScene &p );
		spScene & operator=( const spScene &p );
		const spScene* operator->() const;
		spScene( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spScene is a or is a descendant of the 
		 * class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IScene",type)==0) || (strcmp("spScene",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spScene 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spScene handle 
		 * @return a handle to the spScene object, if the cast can be made, and a NULL 
		 * handle otherwise 
		 */
		static spScene SafeCast(spObject other);

		/**
		 * The root node of the scene. 
		 * @return The root node 
		 */
		spSceneNode GetRootNode(  ) const;

		/**
		 * The material table of the scene. 
		 * @return The material table 
		 */
		spMaterialTable GetMaterialTable(  ) const;

		/**
		 * The bone table of the scene. 
		 * @return The bone table 
		 */
		spSceneBoneTable GetBoneTable(  ) const;

		/**
		 * The selection set table of the scene. 
		 * @return The selection set table 
		 */
		spSelectionSetTable GetSelectionSetTable(  ) const;

		/**
		 * The texture table of the scene. 
		 * @return The texture table 
		 */
		spTextureTable GetTextureTable(  ) const;

		/**
		 * The MappingImage object for the scene. 
		 */
		spMappingImage GetMappingImage(  ) const;

		/**
		 * Removes all scene nodes listed in a selection set. 
		 * @param selectionSetID The ID of the selection set containing the nodes to remove. 
		 *  
		 */
		void RemoveSceneNodesInSelectionSet( int selectionSetID ) const;

		/**
		 * Removes all scene nodes. 
		 */
		void RemoveSceneNodes(  ) const;

		/**
		 * Removes all scene nodes of a specific type. 
		 * @param nodeType The type of object to remove from the scene (i.e. ISceneMesh) 
		 *  
		 */
		void RemoveSceneNodesOfType( const char * nodeType ) const;

		/**
		 * Returns a scene containing the axis aligned bounding boxes of either the entire 
		 * scene or per mesh in the scene. 
		 * @param perMesh Selects whether to generate an AABB per mesh or only one for 
		 * the entire scene. 
		 */
		spScene CreateAABB( bool perMesh ) const;

		/**
		 * Clears the whole scene and releases all items in the graph. 
		 */
		void Clear(  ) const;

		/**
		 * Loads a scene from file. 
		 * @param path The path of the scene file. 
		 * @return True on success, false if file was not found 
		 */
		bool LoadFromFile( const char * path ) const;

		/**
		 * Saves a scene to file. 
		 * @param path The path to which the scene file will be saved. 
		 * @return True on success, false if file could not be written to 
		 */
		bool SaveToFile( const char * path ) const;

		/**
		 * Evaluates the global transformation of the specified node at a specific time. 
		 * EvaluateDefaultGlobalTransformation is used to evaluate the default transformation, 
		 * regardless of node animation. 
		 * @param node The node to evaluate. 
		 * @param global_transform The transformation matrix that receives the global 
		 * transformation. 
		 */
		void EvaluateDefaultGlobalTransformation( const spSceneNode & node , const spMatrix4x4 & global_transform ) const;

		/**
		 * The inferior (minimum) extent of the scene. 
		 * @return The returned data array. The array contains 3 items. 
		 * @return The minimum extent of the scene 
		 */
		spRealData GetInf(  ) const;

		/**
		 * The superior (maximum) extent of the scene. 
		 * @return The returned data array. The array contains 3 items. 
		 * @return The maximum extent of the scene 
		 */
		spRealData GetSup(  ) const;

		/**
		 * The scene radius. 
		 * @return The radius of the scene 
		 */
		real GetRadius(  ) const;

		/**
		 * Calculates the axis-aligned bounding box of the whole scene. If the node tree 
		 * contains no geometric data, or all data is hidden, the bounding box is not 
		 * calculated, and the method returns false. 
		 * @return True if the calculation succeeded 
		 */
		bool CalculateExtents(  ) const;

		/**
		 * Gets a node defined by a path. Please note that the path must contain names 
		 * for each level to be able to find the specified node. 
		 * @param path The path of the node to get. 
		 * @return The node associated with path 
		 */
		spSceneNode GetNodeFromPath( const char * path ) const;

		/**
		 * Gets a node defined by an id. 
		 * @param node_id The id of the node to get. 
		 * @return The node associated with the id 
		 */
		spSceneNode GetNodeByGUID( const char * node_id ) const;

		/**
		 * Gets a node defined by an id from the specified node tree. 
		 * @param node_id The id of the node to get. 
		 * @param node Id is the id of the node to get. 
		 * @return The node associated with the id 
		 */
		spSceneNode GetSubNodeByGUID( const char * node_id , const spSceneNode & node ) const;

		/**
		 * Adds a custom data field. To be able to add a field, it must have a name that 
		 * does not conflict with the existing custom fields. 
		 * @param base_type The is the type of the field to be added. 
		 * @param name The name of the new field. 
		 * @param tuple_size The tuple size of the new field. 
		 */
		spValueArray AddCustomField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const;

		/**
		 * Removes a custom data field. 
		 * @param name The name of the field to be removed. 
		 */
		void RemoveCustomField( const char * name ) const;

		/**
		 * Adds/Removes/Gets a custom data field. 
		 * @param name The name of the field to be fetched. 
		 * @return an array containing the field data 
		 */
		spValueArray GetCustomField( const char * name ) const;

		/**
		 * Checks if a custom field is present in the scene. 
		 * @param name The name of the field to be checked. 
		 * @return True is the field exists, false otherwise 
		 */
		bool HasCustomField( const char * name ) const;

		/**
		 * Removes all bones in the scene that are not linked by any SceneMesh geometry 
		 * data. Note that the removal only removes leaf nodes in the scene. 
		 */
		void RemoveUnlinkedBones(  ) const;

		/**
		 * Will remove mesh nodes that consist of empty geometry. The node transformation 
		 * will be added to all child transformations. If the root node is a sceneMesh 
		 * with empty geometry, it will be replaced with a generic sceneNode having the 
		 * same transformation. 
		 */
		void Compact(  ) const;

		/**
		 * Appends another scene to this scene. All materials, textures etc. 
		 * @param otherScene The scene object to merge into current scene. 
		 */
		void Append( const spScene & otherScene ) const;

		/**
		 * Combines all the geometries from the selection set and returns a copy. If the 
		 * selection set ID is -1, then all the geometries will be copied. 
		 * @param selectionSetID The ID of the selection set containing node ids to combine. 
		 *  
		 * @return a copy of all geometries combined 
		 */
		spGeometryData NewCombinedGeometryFromSelectionSet( int selectionSetID ) const;

		/**
		 * Combines all the geometries from the scene and returns a copy. 
		 * @return a copy of all geometries combined 
		 */
		spGeometryData NewCombinedGeometry(  ) const;

		/**
		 * Selects all nodes of the type specified in the parameter and returns the selection 
		 * set ID. If no types were found, it returns -1. 
		 * @param nodeTypeName The type of node to select, for example "ISceneMesh". 
		 * @return The selection set ID with the selection 
		 */
		int SelectNodes( const char * nodeTypeName ) const;

		/**
		 * Deep copies the source scene, and all things assigned to it, including all 
		 * nodes, geometry data, materials and tables. 
		 * @param src Is source scene to copy. 
		 */
		void DeepCopy( const spScene & src ) const;

		/**
		 * Creates a new deep copy of the scene, and all things assigned to it, including 
		 * all nodes, geometry data, materials and tables. 
		 * @return a deep copy of the scene object. 
		 */
		spScene NewCopy(  ) const;

		/**
		 * Traverses the scene meshes in the scene and returns the total triangle count. 
		 *  
		 */
		unsigned int GetTriangleCount(  ) const;

		/**
		 * Clears all previous data in both the material and texture tables and creates 
		 * new, empty materials for every material id referenced by the MaterialIds field 
		 * in the scenes geometrydata objects. Useful for cleaning up scenes containing 
		 * invalid material references and making them exportable when you are primarily 
		 * interested in the geometry and not the materials. 
		 */
		void StandardizeMaterials(  ) const;

		/**
		 * Get the number of cascaded child scenes. 
		 */
		unsigned int GetCascadedSceneCount(  ) const;

		/**
		 * Get the scene for the given cascaded child scene index, which must be less 
		 * than the number of cascaded child scenes. 
		 * @param index The cascaded child scene index. 
		 * @return The cascaded child scene object. 
		 */
		spScene GetCascadedSceneForIndex( unsigned int index ) const;

		/**
		 * Get all unique material channel names for all materials used in scene. 
		 * @param channels The array receiving unique channel names. 
		 */
		void GetMaterialChannels( const spStringArray & channels ) const;

		/**
		 * Get all unique material channel names having texture inputs for all materials 
		 * used in scene. 
		 * @param channels The array receiving unique channel names. 
		 */
		void GetMaterialChannelsWithTextureInputs( const spStringArray & channels ) const;

	};

	/**
	 * SceneNode is the base class for all scene graph nodes in simplygon. It has relative 
	 * transformation to its parent, and functions to add children to the node. 
	 */
	class spSceneNode : public spObject
	{
		public:
		spSceneNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSceneNode();
		spSceneNode( const spSceneNode &p );
		spSceneNode & operator=( const spSceneNode &p );
		const spSceneNode* operator->() const;
		spSceneNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSceneNode is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISceneNode",type)==0) || (strcmp("spSceneNode",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSceneNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSceneNode handle 
		 * @return a handle to the spSceneNode object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spSceneNode SafeCast(spObject other);

		/**
		 * The scene object of the node. 
		 * @return The scene object. 
		 */
		spScene GetScene(  ) const;

		/**
		 * The parent node of this node. 
		 * @return The parent node 
		 */
		spSceneNode GetParent(  ) const;

		/**
		 * The relative transformation of this node. 
		 * @return The relative transformation as a 4x4 matrix 
		 */
		spMatrix4x4 GetRelativeTransform(  ) const;

		/**
		 * The OriginalName parameter which can be used to specify the original name of 
		 * a node, for debugging of merging purposes. This parameter is not copied or 
		 * cloned, and is not used internally by Simplygon. 
		 * @param value Is a string the name is to be set to. 
		 */
		void SetOriginalName( const char * value ) const;

		/**
		 * The OriginalName parameter which can be used to specify the original name of 
		 * a node, for debugging of merging purposes. This parameter is not copied or 
		 * cloned, and is not used internally by Simplygon. 
		 */
		spString GetOriginalName(  ) const;

		/**
		 * The IsVisible flag. If set, the node is visible. 
		 * @param value The bool that isVisible is to be set to. 
		 */
		void SetIsVisible( bool value ) const;

		/**
		 * The IsVisible flag. If set, the node is visible. 
		 */
		bool GetIsVisible(  ) const;

		/**
		 * The IsFrozen flag. If set, the node will not be modified by processing modules. 
		 * @param value The bool that isFrozen is to be set to. 
		 */
		void SetIsFrozen( bool value ) const;

		/**
		 * The IsFrozen flag. If set, the node will not be modified by processing modules. 
		 *  
		 */
		bool GetIsFrozen(  ) const;

		/**
		 * If set, the node is new, copied, or modified by processing modules. This can 
		 * be useful to track modifications in the scene graph. 
		 * @param value The bool that IsModified is to be set to. 
		 */
		void SetIsModified( bool value ) const;

		/**
		 * If set, the node is new, copied, or modified by processing modules. This can 
		 * be useful to track modifications in the scene graph. 
		 */
		bool GetIsModified(  ) const;

		/**
		 * The unique id for this node. 
		 * @param value The node id of type string. 
		 */
		void SetNodeGUID( const char * value ) const;

		/**
		 * The unique id for this node. 
		 */
		spString GetNodeGUID(  ) const;

		/**
		 * The inferior (minimum) extent of the node. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetInf(  ) const;

		/**
		 * The superior (maximum) extent of the node. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetSup(  ) const;

		/**
		 * The number of direct children of this node. 
		 * @return The number of direct children of this node 
		 */
		unsigned int GetChildCount(  ) const;

		/**
		 * Get a pointer to the i:th child of this node. 
		 * @param index The local index of the child (0->GetChildCount()-1) 
		 */
		spSceneNode GetChild( rid index ) const;

		/**
		 * Finds the first child that has the name. 
		 * @param name The name of the child to look for. 
		 */
		spSceneNode FindNamedChild( const char * name ) const;

		/**
		 * Adds a child node to this node. If the child is already a child of another 
		 * node, it is removed from this node. 
		 * @param child The child object. 
		 */
		void AddChild( const spSceneNode & child ) const;

		/**
		 * Creates a SceneMesh node as a child node to this node. 
		 * @param geom The GeometryData object to associate with this node. 
		 */
		spSceneMesh CreateChildMesh( const spGeometryData & geom ) const;

		/**
		 * Creates a ScenePlane node as a child node to this node. 
		 * @param position_realInputDataPtr The point on the plane. 
		 * @param normal_realInputDataPtr The normal to the plane. 
		 */
		spScenePlane CreateChildPlane( const real *position_realInputDataPtr , const real *normal_realInputDataPtr ) const;

		/**
		 * Removes a child from the node. 
		 * @param child The child to be removed. 
		 */
		void RemoveChild( const spSceneNode & child ) const;

		/**
		 * Removes all children of this node. 
		 */
		void RemoveChildren(  ) const;

		/**
		 * Removes this node from its parent. 
		 */
		void RemoveFromParent(  ) const;

		/**
		 * Returns true if the node has the specified child. 
		 * @param child The child node to look for. 
		 * @return True if child exists in the scene, otherwise false 
		 */
		bool HasChild( const spSceneNode & child ) const;

		/**
		 * Deep copies this node tree (this node and all the descendants of this node) 
		 * and returns the copy top node. Please note that the copy is not added to any 
		 * scene, and can be added anywhere. Also note that the clone shares all data 
		 * pointers with the original nodes, such as geometry data objects. 
		 * @return a new copy of the ISceneNode 
		 */
		spSceneNode NewCopy(  ) const;

		/**
		 * @deprecated Method is marked as deprecated and will be removed in future version. 
		 * Use \link NewCopy NewCopy() \endlink instead. See NewCopy 
		 * @return a new clone of the ISceneNode 
		 */
		SGDEPRECATED spSceneNode NewClone(  ) const;

		/**
		 * Evaluates the default global transformation of the node, regardless of node 
		 * animation. 
		 * @param global_transform The transformation matrix that receives the global 
		 * transformation. 
		 */
		void EvaluateDefaultGlobalTransformation( const spMatrix4x4 & global_transform ) const;

		/**
		 * Calculates the axis-aligned bounding box of the node and all its children. 
		 * If the node tree contains no geometric data, or all data is hidden, the bounding 
		 * box is not calculated, and the method returns false. 
		 * @return True if the calculation succeeded 
		 */
		bool CalculateExtents(  ) const;

		/**
		 * The path to this node in the scene. Please note that only paths where each 
		 * node has a name can be used to get to the node using the path. 
		 * @return The path to this node in the scene 
		 */
		spString GetPath(  ) const;

	};

	/**
	 * SceneNodeCollection holds a number of SceneNode objects. The objects can be 
	 * looked up by their names (if they have been named through SetName()). 
	 */
	class spSceneNodeCollection : public spObjectCollection
	{
		public:
		spSceneNodeCollection( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSceneNodeCollection();
		spSceneNodeCollection( const spSceneNodeCollection &p );
		spSceneNodeCollection & operator=( const spSceneNodeCollection &p );
		const spSceneNodeCollection* operator->() const;
		spSceneNodeCollection( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSceneNodeCollection is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISceneNodeCollection",type)==0) || (strcmp("spSceneNodeCollection",type)==0) )
				return true;
			return spObjectCollection::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSceneNodeCollection 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSceneNodeCollection handle 
		 * @return a handle to the spSceneNodeCollection object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spSceneNodeCollection SafeCast(spObject other);

		/**
		 * Adds an object object to the collection. The handle refers to the object until 
		 * it is removed from the collection again. 
		 * @param obj The node that is to be added to the collection. 
		 * @return The handle of the added node in the collection 
		 */
		rhandle AddSceneNode( const spSceneNode & obj ) const;

		/**
		 * The object the handle is referring to. 
		 * @param objhandle The handle of the node. 
		 * @return The node associated with the handle 
		 */
		spSceneNode GetSceneNode( rhandle objhandle ) const;

		/**
		 * Removes an object from the collection. Only the first occurrence of the object 
		 * is removed. 
		 * @param pobj The node to be be removed. 
		 */
		void RemoveSceneNode( const spSceneNode & pobj ) const;

		/**
		 * Finds a named object. 
		 * @param name The name of the searched for object. 
		 * @return The found node, or null if no matching node is found 
		 */
		spSceneNode FindSceneNode( const char * name ) const;

		/**
		 * Returns the object of the next item. 
		 * @param phandle_rhandleInputDataPtr The handle of a node in the collection. 
		 *  
		 * @return The node after phandle 
		 */
		spSceneNode GetNextItemAsSceneNode( rhandle *phandle_rhandleInputDataPtr ) const;

		/**
		 * Returns true if the object is in the collection. 
		 * @param pobj Is an arbitrary node. 
		 * @return True if pobj is in the current collection, false otherwise 
		 */
		bool IsSceneNodeInCollection( const spSceneNode & pobj ) const;

	};

	/**
	 * SceneMesh is the mesh node in the simplygon scene graph 
	 */
	class spSceneMesh : public spSceneNode
	{
		public:
		spSceneMesh( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSceneMesh();
		spSceneMesh( const spSceneMesh &p );
		spSceneMesh & operator=( const spSceneMesh &p );
		const spSceneMesh* operator->() const;
		spSceneMesh( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSceneMesh is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISceneMesh",type)==0) || (strcmp("spSceneMesh",type)==0) )
				return true;
			return spSceneNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSceneMesh 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSceneMesh handle 
		 * @return a handle to the spSceneMesh object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spSceneMesh SafeCast(spObject other);

		/**
		 * The geometry data of the mesh node. 
		 * @param value The geometry that is to be set. 
		 */
		void SetGeometry( const spGeometryData & value ) const;

		/**
		 * The geometry data of the mesh node. 
		 */
		spGeometryData GetGeometry(  ) const;

	};

	/**
	 * SceneLodGroup is a LOD grouping for the scene graph 
	 */
	class spSceneLodGroup : public spSceneNode
	{
		public:
		spSceneLodGroup( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSceneLodGroup();
		spSceneLodGroup( const spSceneLodGroup &p );
		spSceneLodGroup & operator=( const spSceneLodGroup &p );
		const spSceneLodGroup* operator->() const;
		spSceneLodGroup( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSceneLodGroup is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISceneLodGroup",type)==0) || (strcmp("spSceneLodGroup",type)==0) )
				return true;
			return spSceneNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSceneLodGroup 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSceneLodGroup handle 
		 * @return a handle to the spSceneLodGroup object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spSceneLodGroup SafeCast(spObject other);

		/**
		 * The threshold distances associated with the LODs of the LOD group. 
		 * @return The thresholds of the LODs as a realarray 
		 */
		spRealArray GetThresholds(  ) const;

		/**
		 * Returns the child node to use for rendering based on the distance parameter 
		 * and the current threshold values. 
		 * @param distance The distance in units. 
		 * @return The LOD with the thresholds that contain distance 
		 */
		spSceneNode GetLodForDistance( real distance ) const;

	};

	/**
	 * SceneBone is the bone node in the simplygon scene graph 
	 */
	class spSceneBone : public spSceneNode
	{
		public:
		spSceneBone( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSceneBone();
		spSceneBone( const spSceneBone &p );
		spSceneBone & operator=( const spSceneBone &p );
		const spSceneBone* operator->() const;
		spSceneBone( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSceneBone is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISceneBone",type)==0) || (strcmp("spSceneBone",type)==0) )
				return true;
			return spSceneNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSceneBone 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSceneBone handle 
		 * @return a handle to the spSceneBone object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spSceneBone SafeCast(spObject other);

		/**
		 * Looks through the hierarchy and fetches the previous BoneNode. If none is found, 
		 * this is a Root-Bone-Node. -1 means it has no parent, otherwise, the ID is the 
		 * parent ID. 
		 * @return The id of the parent bone, or -1 if no parent exists 
		 */
		rid GetParentBone(  ) const;

		/**
		 * Looks through the sub-tree and collects the IDs of the bones found. 
		 * @param child_bones The array to which the ids of found child bones will be 
		 * written. 
		 */
		void CollectAllChildBones( const spRidArray & child_bones ) const;

		/**
		 * The BoneId. 
		 * @return The id of the current scene bone 
		 */
		rid GetBoneId(  ) const;

	};

	/**
	 * SceneBoneTable keeps information on bones used while rendering. 
	 */
	class spSceneBoneTable : public spTable
	{
		public:
		spSceneBoneTable( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSceneBoneTable();
		spSceneBoneTable( const spSceneBoneTable &p );
		spSceneBoneTable & operator=( const spSceneBoneTable &p );
		const spSceneBoneTable* operator->() const;
		spSceneBoneTable( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSceneBoneTable is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISceneBoneTable",type)==0) || (strcmp("spSceneBoneTable",type)==0) )
				return true;
			return spTable::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSceneBoneTable 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSceneBoneTable handle 
		 * @return a handle to the spSceneBoneTable object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spSceneBoneTable SafeCast(spObject other);

		/**
		 * Adds a bone to the table. The returned value is the id of the bone within the 
		 * table. 
		 * @param bone The scenebone to be added. 
		 * @return The id of the added bone within the table 
		 */
		rid AddBone( const spSceneBone & bone ) const;

		/**
		 * Finds a bone in the table, using the bone name. If multiple bones have the 
		 * same name, the first will be returned. If the bone was not found, null is returned. 
		 * @param name The string to be searched for. 
		 * @return The first matching bone, or null if no matches are found 
		 */
		spSceneBone FindBone( const char * name ) const;

		/**
		 * Finds the id of a bone in the table, using the bone name. If multiple bones 
		 * have the same name, the first will be returned. If the bone was not found, 
		 * -1 is returned. 
		 * @param name The string to be searched for. 
		 * @return The id of the first matching bone, or -1 if no matches are found 
		 */
		rid FindBoneId( const char * name ) const;

		/**
		 * Returns the i:th bone, using the id of the bone. 
		 * @param id The id of the wanted bone. 
		 * @return The bone corresponding to the id 
		 */
		spSceneBone GetBone( rid id ) const;

		/**
		 * Removes a bone. If GetBone is called with the bone id, the value returned will 
		 * be null. 
		 * @param id The id of the bone that is to be removed. 
		 */
		void RemoveBone( rid id ) const;

		/**
		 * Returns the number of bones in the table. 
		 * @return The number of bones in the table 
		 */
		unsigned int GetBonesCount(  ) const;

	};

	/**
	 * ScenePlane is the plane node in the simplygon scene graph that can be used in 
	 * various processes, for example as a cutting plane in the RemeshingProcessor. 
	 */
	class spScenePlane : public spSceneNode
	{
		public:
		spScenePlane( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spScenePlane();
		spScenePlane( const spScenePlane &p );
		spScenePlane & operator=( const spScenePlane &p );
		const spScenePlane* operator->() const;
		spScenePlane( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spScenePlane is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IScenePlane",type)==0) || (strcmp("spScenePlane",type)==0) )
				return true;
			return spSceneNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spScenePlane 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spScenePlane handle 
		 * @return a handle to the spScenePlane object, if the cast can be made, and a 
		 * NULL handle otherwise 
		 */
		static spScenePlane SafeCast(spObject other);

		/**
		 * The position (translation) of the plane. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetPosition(  ) const;

		/**
		 * The position (translation) of the plane. 
		 * @param vec_realInputDataPtr The new position. 
		 */
		void SetPosition( const real *vec_realInputDataPtr ) const;

		/**
		 * The normal of the plane. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetNormal(  ) const;

		/**
		 * The normal of the plane. 
		 * @param vec_realInputDataPtr The new normal. 
		 */
		void SetNormal( const real *vec_realInputDataPtr ) const;

	};

	/**
	 * SceneCamera is the camera node in the Simplygon scene graph. SceneCamera contains 
	 * settings that specify how the camera works and it contains a number of views 
	 * for that type of camera. A view is a combination of a CameraPosition and a TargetPosition. 
	 * The SceneCamera can contain any number of views but every element in TargetPositions 
	 * has to correspond to a tuple element in CameraPosition. TargetPositions is not 
	 * needed if the camera is set to being omni directional. 
	 */
	class spSceneCamera : public spSceneNode
	{
		public:
		spSceneCamera( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSceneCamera();
		spSceneCamera( const spSceneCamera &p );
		spSceneCamera & operator=( const spSceneCamera &p );
		const spSceneCamera* operator->() const;
		spSceneCamera( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSceneCamera is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISceneCamera",type)==0) || (strcmp("spSceneCamera",type)==0) )
				return true;
			return spSceneNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSceneCamera 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSceneCamera handle 
		 * @return a handle to the spSceneCamera object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spSceneCamera SafeCast(spObject other);

		/**
		 * The camera type. Perspective - A regular camera that uses the FieldOfView. 
		 * Omnidirectional - An omni directional camera view all directions from its position 
		 * and ignores the TargetPositions and FieldOfView. Orthographic - Orthographic 
		 * cameras render the scene in a direction determined by the vector from CameraPositions 
		 * to TargetPositions, it uses OrthographicCameraPixelSize and ignores the FieldOfView 
		 * and UseNormalizedCoordinates. 
		 * @param value The desired CameraType. 
		 */
		void SetCameraType( Simplygon::ECameraType value ) const;

		/**
		 * The camera type. Perspective - A regular camera that uses the FieldOfView. 
		 * Omnidirectional - An omni directional camera view all directions from its position 
		 * and ignores the TargetPositions and FieldOfView. Orthographic - Orthographic 
		 * cameras render the scene in a direction determined by the vector from CameraPositions 
		 * to TargetPositions, it uses OrthographicCameraPixelSize and ignores the FieldOfView 
		 * and UseNormalizedCoordinates. 
		 */
		Simplygon::ECameraType GetCameraType(  ) const;

		/**
		 * CameraPositions is an IRealArray (with tuple size 3) where each tuple is a 
		 * 3d camera position. 
		 * @return The current array of camera positions 
		 */
		spRealArray GetCameraPositions(  ) const;

		/**
		 * TargetPositions is an IRealArray (with tuple size 3) where each tuple is a 
		 * 3d camera target position. 
		 * @return The current array of target positions 
		 */
		spRealArray GetTargetPositions(  ) const;

		/**
		 * Normalized coordinates means that the coordinates are relative to the scene: 
		 * the origin is in the center of the scene and 1 unit length is the distance 
		 * of the scene radius. This can be used to have cameras in front of or above 
		 * the scene for instance without having to know the coordinates of the scene. 
		 * If set to false, then absolute coordinates will be used instead. 
		 * @param value The desired UseNormalizedCoordinates flag. 
		 */
		void SetUseNormalizedCoordinates( bool value ) const;

		/**
		 * Normalized coordinates means that the coordinates are relative to the scene: 
		 * the origin is in the center of the scene and 1 unit length is the distance 
		 * of the scene radius. This can be used to have cameras in front of or above 
		 * the scene for instance without having to know the coordinates of the scene. 
		 * If set to false, then absolute coordinates will be used instead. 
		 */
		bool GetUseNormalizedCoordinates(  ) const;

		/**
		 * Specifies/Gets the length of the side of a square pixel if the camera type 
		 * is Orthographic. 
		 * @param value The desired OrthographicCameraPixelSize value. 
		 */
		void SetOrthographicCameraPixelSize( real value ) const;

		/**
		 * Specifies/Gets the length of the side of a square pixel if the camera type 
		 * is Orthographic. 
		 */
		real GetOrthographicCameraPixelSize(  ) const;

		/**
		 * The field of view (in radians) of the camera. 
		 * @param value The desired FieldOfView value. 
		 */
		void SetFieldOfView( real value ) const;

		/**
		 * The field of view (in radians) of the camera. 
		 */
		real GetFieldOfView(  ) const;

		/**
		 * Determines the resolution by specifying the field of view per pixel (both vertically 
		 * and horizontally) if the camera type is Perspective or Omnidirectional. For 
		 * instance, if the camera type is Perspective and has PI/2 radians field of view 
		 * (for the entire camera) and the pixel field of view is (PI/2)/512 the camera 
		 * will have 512x512 pixels. 
		 * @param value The desired PixelFieldOfView value. 
		 */
		void SetPixelFieldOfView( real value ) const;

		/**
		 * Determines the resolution by specifying the field of view per pixel (both vertically 
		 * and horizontally) if the camera type is Perspective or Omnidirectional. For 
		 * instance, if the camera type is Perspective and has PI/2 radians field of view 
		 * (for the entire camera) and the pixel field of view is (PI/2)/512 the camera 
		 * will have 512x512 pixels. 
		 */
		real GetPixelFieldOfView(  ) const;

		/**
		 * Returns the number of views. 
		 * @return The number of views. 
		 */
		unsigned int GetNumberOfViews(  ) const;

		/**
		 * Validates the camera properties. Asserts on invalid properties. 
		 * @return True if the ISceneCamera is valid. 
		 */
		bool ValidateCamera(  ) const;

		/**
		 * Creates a set of camera views placed on a custom sphere around the center of 
		 * the scene. 
		 * @param fidelity Determines both the resolution and the amount of cameras and 
		 * should be between 0 and 10. 
		 * @param pitch_angle Amount of degrees the sphere should be pitch rotated. 
		 * @param yaw_angle Amount of degrees the sphere should be yaw rotated. 
		 * @param coverage_angle 360 would be entire sphere, 180 would be hemisphere, 
		 * 0 would be no sphere. 
		 */
		void SetCustomSphereCameraPath( int fidelity , real pitch_angle , real yaw_angle , real coverage_angle ) const;

	};

	/**
	 * Class for saving scene data to different file formats depending on the extension 
	 * of the set file name. 
	 */
	class spSceneExporter : public spObject
	{
		public:
		spSceneExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSceneExporter();
		spSceneExporter( const spSceneExporter &p );
		spSceneExporter & operator=( const spSceneExporter &p );
		const spSceneExporter* operator->() const;
		spSceneExporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSceneExporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISceneExporter",type)==0) || (strcmp("spSceneExporter",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSceneExporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSceneExporter handle 
		 * @return a handle to the spSceneExporter object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spSceneExporter SafeCast(spObject other);

		/**
		 * The main export file path. This must always be set. 
		 * @param value The desired main export file path. 
		 */
		void SetExportFilePath( const char * value ) const;

		/**
		 * The main export file path. This must always be set. 
		 */
		spString GetExportFilePath(  ) const;

		/**
		 * The primary texture coordinate layer name. Used by file formats that only support 
		 * one texture coordinate layer (like .obj) 
		 * @param value The desired primary texture coordinate layer name. 
		 */
		void SetPrimaryTexCoordName( const char * value ) const;

		/**
		 * The primary texture coordinate layer name. Used by file formats that only support 
		 * one texture coordinate layer (like .obj) 
		 */
		spString GetPrimaryTexCoordName(  ) const;

		/**
		 * The scene to export. 
		 * @param value The scene object to export. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * Runs the export. Note that all parameters must be setup before importing. 
		 */
		bool RunExport(  ) const;

		/**
		 * Close any open file or stream, release any allocated data. 
		 */
		void Clear(  ) const;

		/**
		 * Flag to control if output file formats that support embedding referenced resources 
		 * (like textures) should do so. 
		 * @param value Embed flag. 
		 */
		void SetEmbedReferences( bool value ) const;

		/**
		 * Flag to control if output file formats that support embedding referenced resources 
		 * (like textures) should do so. 
		 */
		bool GetEmbedReferences(  ) const;

		/**
		 * Flag to control if cascaded scenes should be included in the export. 
		 * @param value Export cascaded scenes flag. 
		 */
		void SetExportCascadedScenes( bool value ) const;

		/**
		 * Flag to control if cascaded scenes should be included in the export. 
		 */
		bool GetExportCascadedScenes(  ) const;

	};

	/**
	 * Class for loading scene data from different file formats. 
	 */
	class spSceneImporter : public spObject
	{
		public:
		spSceneImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSceneImporter();
		spSceneImporter( const spSceneImporter &p );
		spSceneImporter & operator=( const spSceneImporter &p );
		const spSceneImporter* operator->() const;
		spSceneImporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSceneImporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISceneImporter",type)==0) || (strcmp("spSceneImporter",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSceneImporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSceneImporter handle 
		 * @return a handle to the spSceneImporter object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spSceneImporter SafeCast(spObject other);

		/**
		 * The main import file path. This must always be set. 
		 * @param value The desired main import file path. 
		 */
		void SetImportFilePath( const char * value ) const;

		/**
		 * The main import file path. This must always be set. 
		 */
		spString GetImportFilePath(  ) const;

		/**
		 * The imported scene data. 
		 * @return The imported scene data 
		 */
		spScene GetScene(  ) const;

		/**
		 * Runs the import. Note that all parameters must be setup before importing. 
		 */
		bool RunImport(  ) const;

		/**
		 * Close any open file or stream, release any allocated data. 
		 */
		void Clear(  ) const;

	};

	/**
	 * SelectionSet is a set of scene node GUIDs referencing scene nodes in a scene. 
	 */
	class spSelectionSet : public spObject
	{
		public:
		spSelectionSet( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSelectionSet();
		spSelectionSet( const spSelectionSet &p );
		spSelectionSet & operator=( const spSelectionSet &p );
		const spSelectionSet* operator->() const;
		spSelectionSet( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSelectionSet is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISelectionSet",type)==0) || (strcmp("spSelectionSet",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSelectionSet 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSelectionSet handle 
		 * @return a handle to the spSelectionSet object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spSelectionSet SafeCast(spObject other);

		/**
		 * Adds a node id to the set. 
		 * @param NodeId The node id that is to be added to the set. 
		 */
		void AddItem( const char * NodeId ) const;

		/**
		 * Removes an node id from the set. 
		 * @param NodeId The node id that is to be removed from to the set. 
		 */
		void RemoveItem( const char * NodeId ) const;

		/**
		 * Adds the ids of this node and its children from this selectionset recursively. 
		 * @param node The top node in the hierarchy to add. 
		 */
		void AddHierarchy( const spSceneNode & node ) const;

		/**
		 * Removes the ids of this node and its children from this selectionset recursively. 
		 * @param node The top node in the hierarchy to remove. 
		 */
		void RemoveHierarchy( const spSceneNode & node ) const;

		/**
		 * Clears the set. 
		 */
		void Clear(  ) const;

		/**
		 * The number of items in the set. 
		 * @return The number of items in the set. 
		 */
		unsigned int GetItemCount(  ) const;

		/**
		 * Returns the node id in the i:th place in the set. 
		 * @param index The index of the node id to get from the set. 
		 * @return The node id at the specified index. 
		 */
		spString GetItem( unsigned int index ) const;

	};

	/**
	 * SelectionSetTable keeps a table of SelectionSet. 
	 */
	class spSelectionSetTable : public spTable
	{
		public:
		spSelectionSetTable( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSelectionSetTable();
		spSelectionSetTable( const spSelectionSetTable &p );
		spSelectionSetTable & operator=( const spSelectionSetTable &p );
		const spSelectionSetTable* operator->() const;
		spSelectionSetTable( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSelectionSetTable is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISelectionSetTable",type)==0) || (strcmp("spSelectionSetTable",type)==0) )
				return true;
			return spTable::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSelectionSetTable 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSelectionSetTable handle 
		 * @return a handle to the spSelectionSetTable object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spSelectionSetTable SafeCast(spObject other);

		/**
		 * Adds a selection set to the table. The returned value is the id of the selection 
		 * set within the table. 
		 * @param selectionSet The selection set to be added. 
		 * @return The id of the added selection set within the table 
		 */
		rid AddSelectionSet( const spSelectionSet & selectionSet ) const;

		/**
		 * Finds a selection set in the table, using the name. If multiple selection sets 
		 * have the same name, the first match will be returned. If the selection set 
		 * was not found, null will be returned. 
		 * @param name The string to be searched for. 
		 * @return The first matching selection set, or null if no matches are found 
		 */
		spSelectionSet FindSelectionSet( const char * name ) const;

		/**
		 * Finds the id of a selection set in the table, using the name. If multiple selection 
		 * sets have the same name, the first will be returned. If the selection set was 
		 * not found, the return will be -1. 
		 * @param name The string to be searched for. 
		 * @return The id of the first matching selection set, or -1 if no matches are 
		 * found 
		 */
		rid FindSelectionSetId( const char * name ) const;

		/**
		 * Returns the i:th selection set, using the id of the selection set. 
		 * @param id The id of the selection set in the table. 
		 * @return The selection set corresponding to the id 
		 */
		spSelectionSet GetSelectionSet( rid id ) const;

		/**
		 * Removes a selection set from the table by set ID. 
		 * @param id The id of the selection set that is to be removed. 
		 */
		void RemoveSelectionSet( rid id ) const;

		/**
		 * Removes a selection set from the table by name. 
		 * @param name The name of the set to be removed from to the table. 
		 */
		void RemoveNamedSelectionSet( const char * name ) const;

		/**
		 * Returns the number of selection sets in the table. 
		 * @return The number of selection sets in the table 
		 */
		unsigned int GetSelectionSetCount(  ) const;

	};

	/**
	 * Texture describes a texture object, containing either image data or a path that 
	 * is referenced by texture nodes in materials. 
	 */
	class spTexture : public spObject
	{
		public:
		spTexture( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spTexture();
		spTexture( const spTexture &p );
		spTexture & operator=( const spTexture &p );
		const spTexture* operator->() const;
		spTexture( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spTexture is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ITexture",type)==0) || (strcmp("spTexture",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spTexture 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spTexture handle 
		 * @return a handle to the spTexture object, if the cast can be made, and a NULL 
		 * handle otherwise 
		 */
		static spTexture SafeCast(spObject other);

		/**
		 * The file path of the texture. This path has two meanings: It can point to an 
		 * existing file to use as image data for the texture if the image data object 
		 * is not set. If the image data object is set on the texture, it is the path 
		 * to where the image should be saved if the owning scene is exported. If you 
		 * run a pipeline through the batch tool and Simplygon Grid, the returned texture 
		 * object will have the image data embedded in the texture objects and this path 
		 * indicates where it should be saved if the texture are to be stored separately. 
		 * Use ExportImageData() to write out embedded data to the file path, then use 
		 * GetFilePath() to get the final path for the texture image file. 
		 * @param value The path of the texture image data file. 
		 */
		void SetFilePath( const char * value ) const;

		/**
		 * The file path of the texture. This path has two meanings: It can point to an 
		 * existing file to use as image data for the texture if the image data object 
		 * is not set. If the image data object is set on the texture, it is the path 
		 * to where the image should be saved if the owning scene is exported. If you 
		 * run a pipeline through the batch tool and Simplygon Grid, the returned texture 
		 * object will have the image data embedded in the texture objects and this path 
		 * indicates where it should be saved if the texture are to be stored separately. 
		 * Use ExportImageData() to write out embedded data to the file path, then use 
		 * GetFilePath() to get the final path for the texture image file. 
		 */
		spString GetFilePath(  ) const;

		/**
		 * Set/Get a named texture image data. If this is defined, it will be used instead 
		 * of the texture file defined in GetFilePath/SetFilePath(). See the help for 
		 * GetFilePath() for additional information regarding the file path meaning in 
		 * conjunction with embedded image data objects. 
		 * @param value The image data object containing the texture data. 
		 */
		void SetImageData( const spImageData & value ) const;

		/**
		 * Set/Get a named texture image data. If this is defined, it will be used instead 
		 * of the texture file defined in GetFilePath/SetFilePath(). See the help for 
		 * GetFilePath() for additional information regarding the file path meaning in 
		 * conjunction with embedded image data objects. 
		 */
		spImageData GetImageData(  ) const;

		/**
		 * Changes the prefix path (drive, directory) in the texture, with the new one, 
		 * if the current path matches the current_path_prefix. This method is useful 
		 * when external textures are placed in a specific folder, which needs to be moved. 
		 * @param current_path_prefix The current prefix path, either relative or absolute. 
		 *  
		 * @param new_path_prefix The new prefix path. 
		 */
		void ChangeTexturePrefixPath( const char * current_path_prefix , const char * new_path_prefix ) const;

		/**
		 * Write out the embedded image data to the file indicated by the set file path. 
		 * Once this method returns, use GetFilePath() to get the potentially updated 
		 * final file path used to write the image data file. 
		 * @return true if the export was successful, false if not. 
		 */
		bool ExportImageData(  ) const;

	};

	/**
	 * TextureTable keeps information on textures used while rendering. 
	 */
	class spTextureTable : public spTable
	{
		public:
		spTextureTable( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spTextureTable();
		spTextureTable( const spTextureTable &p );
		spTextureTable & operator=( const spTextureTable &p );
		const spTextureTable* operator->() const;
		spTextureTable( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spTextureTable is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ITextureTable",type)==0) || (strcmp("spTextureTable",type)==0) )
				return true;
			return spTable::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spTextureTable 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spTextureTable handle 
		 * @return a handle to the spTextureTable object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spTextureTable SafeCast(spObject other);

		/**
		 * Adds a texture to the table. The returned value is the id of the texture within 
		 * the table. 
		 * @param texture The texture to add into the table. 
		 * @return the texture id of the texture in the table 
		 */
		rid AddTexture( const spTexture & texture ) const;

		/**
		 * Finds a texture in the table, using the texture name. If multiple textures 
		 * have the same name, the first will be returned. If the texture was not found, 
		 * null will be returned. 
		 * @param name The texture name to look for. 
		 * @return the texture if found, null otherwise 
		 */
		spTexture FindTexture( const char * name ) const;

		/**
		 * Finds a texture in the table, using the texture path. If multiple textures 
		 * have the same path, the first will be returned. If the texture was not found, 
		 * null will be returned. 
		 * @param path Is the texture path. 
		 * @return the texture if found, null otherwise 
		 */
		spTexture FindTextureUsingPath( const char * path ) const;

		/**
		 * Finds the id of a texture in the table, using the texture name. If multiple 
		 * textures have the same name, the first will be returned. If the texture was 
		 * not found, -1 will be returned. 
		 * @param name The texture name to look for. 
		 * @return the texture id if found, -1 otherwise 
		 */
		rid FindTextureId( const char * name ) const;

		/**
		 * Sets a texture in the table. 
		 * @param id The id of the texture in the table. 
		 * @param texture The texture to set into the table. 
		 */
		void SetTexture( rid id , const spTexture & texture ) const;

		/**
		 * Returns the i:th texture, using the id of the texture. 
		 * @param id The id of the texture in the table. 
		 * @return the the texture in the table 
		 */
		spTexture GetTexture( rid id ) const;

		/**
		 * Removes a texture. If GetTexture is called with the texture id, the value returned 
		 * will be null. 
		 * @param id The id of the texture in the table. 
		 */
		void RemoveTexture( rid id ) const;

		/**
		 * Returns the number of textures in the table. 
		 */
		unsigned int GetTexturesCount(  ) const;

		/**
		 * Changes the prefix path (drive, directory) of all matching texture paths in 
		 * all the textures in the table, with the new one. This method is useful when 
		 * external textures are placed in a specific folder, which needs to be moved. 
		 * @param current_path_prefix The current prefix path, either relative or absolute. 
		 *  
		 * @param new_path_prefix The new prefix path. 
		 */
		void ChangeTexturePrefixPath( const char * current_path_prefix , const char * new_path_prefix ) const;

	};

	/**
	 * Settings for volumetric triangle culling functionality. These settings control 
	 * the clipping planes and geometries that are used for triangle culling the output 
	 * of Simplygon scene processors. 
	 */
	class spGeometryCullingSettings : public spSettingsObject
	{
		public:
		spGeometryCullingSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGeometryCullingSettings();
		spGeometryCullingSettings( const spGeometryCullingSettings &p );
		spGeometryCullingSettings & operator=( const spGeometryCullingSettings &p );
		const spGeometryCullingSettings* operator->() const;
		spGeometryCullingSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGeometryCullingSettings is a or is 
		 * a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGeometryCullingSettings",type)==0) || (strcmp("spGeometryCullingSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGeometryCullingSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGeometryCullingSettings handle 
		 * @return a handle to the spGeometryCullingSettings object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spGeometryCullingSettings SafeCast(spObject other);

		/**
		 * If true the ScenePlanes in the input scene (or the planes selected by the selection 
		 * set settings) will be used to clip the mesh. 
		 * @param value The bool UseClippingPlanes will be set to. 
		 */
		void SetUseClippingPlanes( bool value ) const;

		/**
		 * If true the ScenePlanes in the input scene (or the planes selected by the selection 
		 * set settings) will be used to clip the mesh. 
		 */
		bool GetUseClippingPlanes(  ) const;

		/**
		 * If set, the geometries defined in the matching selection set will be used to 
		 * clip the process geometry. What side of the geometry that will be culled is 
		 * determined by the triangle facing, so make sure your winding is correct and 
		 * that triangles point "up" toward the space you want to keep. Inconsistent triangle 
		 * winding or meshes that do not have a clear local inside and outside will cause 
		 * inconsistent results when used as clipping geometries. 
		 * @param value The bool UseClippingGeometry will be set to. 
		 */
		void SetUseClippingGeometry( bool value ) const;

		/**
		 * If set, the geometries defined in the matching selection set will be used to 
		 * clip the process geometry. What side of the geometry that will be culled is 
		 * determined by the triangle facing, so make sure your winding is correct and 
		 * that triangles point "up" toward the space you want to keep. Inconsistent triangle 
		 * winding or meshes that do not have a clear local inside and outside will cause 
		 * inconsistent results when used as clipping geometries. 
		 */
		bool GetUseClippingGeometry(  ) const;

		/**
		 * Which SelectionSet containing sceneplanes will be used for clipping. Set name 
		 * is prioritized over id if both are set. 
		 * @param value The desired SelectionSet id. Value cannot be less than -1. 
		 */
		void SetClippingPlaneSelectionSetID( rid value ) const;

		/**
		 * Which SelectionSet containing sceneplanes will be used for clipping. Set name 
		 * is prioritized over id if both are set. 
		 */
		rid GetClippingPlaneSelectionSetID(  ) const;

		/**
		 * Which SelectionSet containing sceneplanes will be used for clipping. Set name 
		 * is prioritized over id if both are set. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetClippingPlaneSelectionSetName( const char * value ) const;

		/**
		 * Which SelectionSet containing sceneplanes will be used for clipping. Set name 
		 * is prioritized over id if both are set. 
		 */
		spString GetClippingPlaneSelectionSetName(  ) const;

		/**
		 * Which SelectionSet containing geometries will be used for clipping. Set name 
		 * is prioritized over id if both are set. 
		 * @param value The desired SelectionSet id. Value cannot be less than -1. 
		 */
		void SetClippingGeometrySelectionSetID( rid value ) const;

		/**
		 * Which SelectionSet containing geometries will be used for clipping. Set name 
		 * is prioritized over id if both are set. 
		 */
		rid GetClippingGeometrySelectionSetID(  ) const;

		/**
		 * Which SelectionSet containing geometries will be used for clipping. Set name 
		 * is prioritized over id if both are set. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetClippingGeometrySelectionSetName( const char * value ) const;

		/**
		 * Which SelectionSet containing geometries will be used for clipping. Set name 
		 * is prioritized over id if both are set. 
		 */
		spString GetClippingGeometrySelectionSetName(  ) const;

	};

	/**
	 * Class for loading image data from different file formats. 
	 */
	class spImageDataImporter : public spObject
	{
		public:
		spImageDataImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spImageDataImporter();
		spImageDataImporter( const spImageDataImporter &p );
		spImageDataImporter & operator=( const spImageDataImporter &p );
		const spImageDataImporter* operator->() const;
		spImageDataImporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spImageDataImporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IImageDataImporter",type)==0) || (strcmp("spImageDataImporter",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spImageDataImporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spImageDataImporter handle 
		 * @return a handle to the spImageDataImporter object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spImageDataImporter SafeCast(spObject other);

		/**
		 * The main import file path. This must always be set. 
		 * @param value The desired main import file path. 
		 */
		void SetImportFilePath( const char * value ) const;

		/**
		 * The main import file path. This must always be set. 
		 */
		spString GetImportFilePath(  ) const;

		/**
		 * The override file extension. This is specified including the dot, eg ".tga". 
		 * @param value The desired override file extension. 
		 */
		void SetExtensionOverride( const char * value ) const;

		/**
		 * The override file extension. This is specified including the dot, eg ".tga". 
		 *  
		 */
		spString GetExtensionOverride(  ) const;

		/**
		 * The imported image data. 
		 * @return The imported image data 
		 */
		spImageData GetImage(  ) const;

		/**
		 * Set/Get CapToPowerOfTwo. If set, the width and height of the loaded image will 
		 * be capped to the closest power of two below the size of the image. 
		 * @param value The desired CapToPowerOfTwo flag. 
		 */
		void SetCapToPowerOfTwo( bool value ) const;

		/**
		 * Set/Get CapToPowerOfTwo. If set, the width and height of the loaded image will 
		 * be capped to the closest power of two below the size of the image. 
		 */
		bool GetCapToPowerOfTwo(  ) const;

		/**
		 * Set/Get MaxWidth. If set to a value above 0, the image that is wider will be 
		 * rescaled to MaxWidth. 
		 * @param value The desired MaxWidth. 
		 */
		void SetMaxWidth( unsigned int value ) const;

		/**
		 * Set/Get MaxWidth. If set to a value above 0, the image that is wider will be 
		 * rescaled to MaxWidth. 
		 */
		unsigned int GetMaxWidth(  ) const;

		/**
		 * Set/Get MaxHeight. If set to a value above 0, the image that is higher will 
		 * be rescaled to MaxHeight. 
		 * @param value The desired MaxHeight. 
		 */
		void SetMaxHeight( unsigned int value ) const;

		/**
		 * Set/Get MaxHeight. If set to a value above 0, the image that is higher will 
		 * be rescaled to MaxHeight. 
		 */
		unsigned int GetMaxHeight(  ) const;

		/**
		 * Set/Get ImportOnlyHeader. If set to true only gets header information from 
		 * the image, and does not load the actual file into memory. 
		 * @param value The desired ImportOnlyHeader value. 
		 */
		void SetImportOnlyHeader( bool value ) const;

		/**
		 * Set/Get ImportOnlyHeader. If set to true only gets header information from 
		 * the image, and does not load the actual file into memory. 
		 */
		bool GetImportOnlyHeader(  ) const;

		/**
		 * After RunImport(), returns the NumberOfChannels (1, 3, 4) in the source image. 
		 * @return The current NumberOfChannels 
		 */
		unsigned int GetNumberOfChannels(  ) const;

		/**
		 * After RunImport(), returns the BitsPerPixel (8bpp-64bpp). If divided by NumberOfChannels, 
		 * will give the number of bits per channel. 
		 * @return The current BitsPerPixel 
		 */
		unsigned int GetBitsPerPixel(  ) const;

		/**
		 * Return the format of the image. 
		 * @return The current image file format 
		 */
		Simplygon::EImageInputFormat GetImageFileFormat(  ) const;

		/**
		 * Runs the import. Note that all parameters must be setup before importing. 
		 */
		bool RunImport(  ) const;

		/**
		 * Close any open file or stream, release any allocated data. 
		 */
		void Clear(  ) const;

	};

	/**
	 * MappingImageMeshData stores the mapped meshes and their paths in the original 
	 * scene. This can be used to find a specific triangle on the original mesh in 
	 * the scene from the combined id in the mapping image. 
	 */
	class spMappingImageMeshData : public spObject
	{
		public:
		spMappingImageMeshData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spMappingImageMeshData();
		spMappingImageMeshData( const spMappingImageMeshData &p );
		spMappingImageMeshData & operator=( const spMappingImageMeshData &p );
		const spMappingImageMeshData* operator->() const;
		spMappingImageMeshData( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spMappingImageMeshData is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IMappingImageMeshData",type)==0) || (strcmp("spMappingImageMeshData",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spMappingImageMeshData 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spMappingImageMeshData handle 
		 * @return a handle to the spMappingImageMeshData object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spMappingImageMeshData SafeCast(spObject other);

		/**
		 * The MappedGeometriesCount, the number of mapped geometries. 
		 * @return The number of mapped geometries in the mapping image 
		 */
		unsigned int GetMappedGeometriesCount(  ) const;

		/**
		 * The Id of the first triangle of the geometry at the specified index. 
		 * @param GeometryIndex The index of the geometry in the list of mapped geometries. 
		 *  
		 * @return The start triangle id of the geometry 
		 */
		rid GetStartTriangleIdOfGeometry( rid GeometryIndex ) const;

		/**
		 * The mesh path in the scene of the geometry at the specified index. 
		 * @param GeometryIndex The index of the geometry in the list of mapped geometries. 
		 *  
		 * @return The path in the scene of the mesh that has this geometry 
		 */
		spString GetScenePathOfGeometry( rid GeometryIndex ) const;

		/**
		 * The node guid containing the original geometry. 
		 * @param GeometryIndex Is index of the geometry in the list of mapped geometries. 
		 *  
		 * @return The guid 
		 */
		spString GetNodeGuidOfGeometry( rid GeometryIndex ) const;

		/**
		 * Clear the MappingImageMeshData. 
		 */
		void Clear(  ) const;

	};

	/**
	 * ShadingNode is the parent of all nodes in a shading network. 
	 */
	class spShadingNode : public spObject
	{
		public:
		spShadingNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingNode();
		spShadingNode( const spShadingNode &p );
		spShadingNode & operator=( const spShadingNode &p );
		const spShadingNode* operator->() const;
		spShadingNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingNode",type)==0) || (strcmp("spShadingNode",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingNode handle 
		 * @return a handle to the spShadingNode object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spShadingNode SafeCast(spObject other);

		/**
		 * The input count. 
		 * @return The input count 
		 */
		unsigned int GetParameterCount(  ) const;

		/**
		 * The name of a parameter. 
		 * @param parameter_id The id of the input to fetch the name of. 
		 * @return The name of the parameter 
		 */
		spString GetParameterName( rid parameter_id ) const;

		/**
		 * The default parameter values. 
		 * @param parameter_id The id of the input to be set. 
		 * @param r The value of red to which the default input will be set. 
		 * @param g The value of green to which the default input will be set. 
		 * @param b The value of blue to which the default input will be set. 
		 * @param a The value of alpha to which the default input will be set. 
		 */
		void SetDefaultParameter( rid parameter_id , real r , real g , real b , real a ) const;

		/**
		 * The default parameter values. 
		 * @param parameter_id The id of the input to be fetched. 
		 * @return The Red default parameter value 
		 */
		real GetDefaultParameterRed( rid parameter_id ) const;

		/**
		 * The default parameter values. 
		 * @param parameter_id The id of the input to be fetched. 
		 * @return The Green default parameter value 
		 */
		real GetDefaultParameterGreen( rid parameter_id ) const;

		/**
		 * The default parameter values. 
		 * @param parameter_id The id of the input to be fetched. 
		 * @return The Blue default parameter value 
		 */
		real GetDefaultParameterBlue( rid parameter_id ) const;

		/**
		 * The default parameter values. 
		 * @param parameter_id The id of the input to be fetched. 
		 * @return The Alpha default parameter value 
		 */
		real GetDefaultParameterAlpha( rid parameter_id ) const;

	};

	/**
	 * FilterNode is the parent of all non-source nodes in a shading network. 
	 */
	class spShadingFilterNode : public spShadingNode
	{
		public:
		spShadingFilterNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingFilterNode();
		spShadingFilterNode( const spShadingFilterNode &p );
		spShadingFilterNode & operator=( const spShadingFilterNode &p );
		const spShadingFilterNode* operator->() const;
		spShadingFilterNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingFilterNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingFilterNode",type)==0) || (strcmp("spShadingFilterNode",type)==0) )
				return true;
			return spShadingNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingFilterNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingFilterNode handle 
		 * @return a handle to the spShadingFilterNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingFilterNode SafeCast(spObject other);

		/**
		 * The default node inputs. 
		 * @param input_id The id of the input to be set. 
		 * @param input_node The node to be set as input. 
		 */
		bool SetInput( rid input_id , const spShadingNode & input_node ) const;

		/**
		 * The default node inputs. 
		 * @param input_id The id of the input to be fetched. 
		 * @return The input node 
		 */
		spShadingNode GetInput( rid input_id ) const;

		/**
		 * Get if the parameter is inputable. If true, a different node can be set as 
		 * this parameters value. If false, the parameter can only be set manually and 
		 * not through a node input. 
		 * @param param_id The id of the parameter to be checked. 
		 * @return True if parameter is inputable, false if it is not 
		 */
		bool GetParameterIsInputable( rid param_id ) const;

	};

	/**
	 * TextureNode describes a texture source node in a shading network. 
	 */
	class spShadingTextureNode : public spShadingNode
	{
		public:
		spShadingTextureNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingTextureNode();
		spShadingTextureNode( const spShadingTextureNode &p );
		spShadingTextureNode & operator=( const spShadingTextureNode &p );
		const spShadingTextureNode* operator->() const;
		spShadingTextureNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingTextureNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingTextureNode",type)==0) || (strcmp("spShadingTextureNode",type)==0) )
				return true;
			return spShadingNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingTextureNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingTextureNode handle 
		 * @return a handle to the spShadingTextureNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingTextureNode SafeCast(spObject other);

		/**
		 * The name of the texture in the texture table used for casting. If both this 
		 * and texture image is set, the casting uses the texture image. 
		 * @param value The path the texture will be read from. 
		 */
		void SetTextureName( const char * value ) const;

		/**
		 * The name of the texture in the texture table used for casting. If both this 
		 * and texture image is set, the casting uses the texture image. 
		 */
		spString GetTextureName(  ) const;

		/**
		 * The name of the texture coordinate. If not set, the material uses the texture 
		 * level (index) instead. The TexCoordName is required when generating shader 
		 * data. 
		 * @param value The desired texture level name. 
		 */
		void SetTexCoordName( const char * value ) const;

		/**
		 * The name of the texture coordinate. If not set, the material uses the texture 
		 * level (index) instead. The TexCoordName is required when generating shader 
		 * data. 
		 */
		spString GetTexCoordName(  ) const;

		/**
		 * The texture texture coordinate level. The texture level is used during casting 
		 * if the TexCoordName has not been set. Setting the TexCoordName is still required 
		 * for generating shader code. 
		 * @param value The desired texture level. 
		 */
		void SetTexCoordLevel( int value ) const;

		/**
		 * The texture texture coordinate level. The texture level is used during casting 
		 * if the TexCoordName has not been set. Setting the TexCoordName is still required 
		 * for generating shader code. 
		 */
		int GetTexCoordLevel(  ) const;

		/**
		 * The use of sRGB when decoding the texture into an RGBA value. 
		 * @param value The flag to use sRGB. 
		 */
		void SetUseSRGB( bool value ) const;

		/**
		 * The use of sRGB when decoding the texture into an RGBA value. 
		 */
		bool GetUseSRGB(  ) const;

		/**
		 * The TileU value, which is multiplied into the U-coordinate when sampling. 
		 * @param value The new value. 
		 */
		void SetTileU( real value ) const;

		/**
		 * The TileU value, which is multiplied into the U-coordinate when sampling. 
		 */
		real GetTileU(  ) const;

		/**
		 * The TileV value, which is multiplied into the U-coordinate when sampling. 
		 * @param value The new value. 
		 */
		void SetTileV( real value ) const;

		/**
		 * The TileV value, which is multiplied into the U-coordinate when sampling. 
		 */
		real GetTileV(  ) const;

		/**
		 * The OffsetU value, which is will be added to the U-coordinate when sampling. 
		 * @param value The new value. 
		 */
		void SetOffsetU( real value ) const;

		/**
		 * The OffsetU value, which is will be added to the U-coordinate when sampling. 
		 *  
		 */
		real GetOffsetU(  ) const;

		/**
		 * The OffsetV value, which is will be added to the V-coordinate when sampling. 
		 * @param value The new value. 
		 */
		void SetOffsetV( real value ) const;

		/**
		 * The OffsetV value, which is will be added to the V-coordinate when sampling. 
		 *  
		 */
		real GetOffsetV(  ) const;

		/**
		 * The texture wrap mode in both U and V direction, which determines what happens 
		 * to texture samples outside the 0-1 range. Setting this property affects both 
		 * U and V direction, and getting this property returns the wrap mode in U direction 
		 * in the case when they are different. 
		 * @param value The new texture wrap mode. 
		 */
		void SetTextureWrapMode( Simplygon::ETextureWrapMode value ) const;

		/**
		 * The texture wrap mode in both U and V direction, which determines what happens 
		 * to texture samples outside the 0-1 range. Setting this property affects both 
		 * U and V direction, and getting this property returns the wrap mode in U direction 
		 * in the case when they are different. 
		 */
		Simplygon::ETextureWrapMode GetTextureWrapMode(  ) const;

		/**
		 * The texture wrap mode in U direction, which determines what happens to texture 
		 * samples outside the 0-1 range. 
		 * @param value The new texture wrap mode in U direction. 
		 */
		void SetTextureWrapModeU( Simplygon::ETextureWrapMode value ) const;

		/**
		 * The texture wrap mode in U direction, which determines what happens to texture 
		 * samples outside the 0-1 range. 
		 */
		Simplygon::ETextureWrapMode GetTextureWrapModeU(  ) const;

		/**
		 * The texture wrap mode in V direction, which determines what happens to texture 
		 * samples outside the 0-1 range. 
		 * @param value The new texture wrap mode in V direction. 
		 */
		void SetTextureWrapModeV( Simplygon::ETextureWrapMode value ) const;

		/**
		 * The texture wrap mode in V direction, which determines what happens to texture 
		 * samples outside the 0-1 range. 
		 */
		Simplygon::ETextureWrapMode GetTextureWrapModeV(  ) const;

		/**
		 * The rotation value, which is used to rotate the UV coordinates when sampling. 
		 * @param value The rotation value. 
		 */
		void SetRotation( real value ) const;

		/**
		 * The rotation value, which is used to rotate the UV coordinates when sampling. 
		 *  
		 */
		real GetRotation(  ) const;

	};

	/**
	 * SwizzlingNode describes a node that can remap the input to the specified output. 
	 */
	class spShadingSwizzlingNode : public spShadingFilterNode
	{
		public:
		spShadingSwizzlingNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingSwizzlingNode();
		spShadingSwizzlingNode( const spShadingSwizzlingNode &p );
		spShadingSwizzlingNode & operator=( const spShadingSwizzlingNode &p );
		const spShadingSwizzlingNode* operator->() const;
		spShadingSwizzlingNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingSwizzlingNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingSwizzlingNode",type)==0) || (strcmp("spShadingSwizzlingNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingSwizzlingNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingSwizzlingNode handle 
		 * @return a handle to the spShadingSwizzlingNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingSwizzlingNode SafeCast(spObject other);

		/**
		 * The component index in the input color that Red component will be copied from. 
		 * @param value The input component index. Allowed values are 0:R 1:G 2:B 3:A. 
		 * Value cannot be less than 0. Value cannot be greater than 3. 
		 */
		void SetRedComponent( unsigned int value ) const;

		/**
		 * The component index in the input color that Red component will be copied from. 
		 *  
		 */
		unsigned int GetRedComponent(  ) const;

		/**
		 * The component index in the input color that Green component will be copied 
		 * from. 
		 * @param value The input component index. Allowed values are 0:R 1:G 2:B 3:A. 
		 * Value cannot be less than 0. Value cannot be greater than 3. 
		 */
		void SetGreenComponent( unsigned int value ) const;

		/**
		 * The component index in the input color that Green component will be copied 
		 * from. 
		 */
		unsigned int GetGreenComponent(  ) const;

		/**
		 * The component index in the input color that Blue component will be copied from. 
		 * @param value The input component index. Allowed values are 0:R 1:G 2:B 3:A. 
		 * Value cannot be less than 0. Value cannot be greater than 3. 
		 */
		void SetBlueComponent( unsigned int value ) const;

		/**
		 * The component index in the input color that Blue component will be copied from. 
		 *  
		 */
		unsigned int GetBlueComponent(  ) const;

		/**
		 * The component index in the input color that Alpha component will be copied 
		 * from. 
		 * @param value The input component index. Allowed values are 0:R 1:G 2:B 3:A. 
		 * Value cannot be less than 0. Value cannot be greater than 3. 
		 */
		void SetAlphaComponent( unsigned int value ) const;

		/**
		 * The component index in the input color that Alpha component will be copied 
		 * from. 
		 */
		unsigned int GetAlphaComponent(  ) const;

	};

	/**
	 * ColorNode describes a single color source node in a shading network 
	 */
	class spShadingColorNode : public spShadingNode
	{
		public:
		spShadingColorNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingColorNode();
		spShadingColorNode( const spShadingColorNode &p );
		spShadingColorNode & operator=( const spShadingColorNode &p );
		const spShadingColorNode* operator->() const;
		spShadingColorNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingColorNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingColorNode",type)==0) || (strcmp("spShadingColorNode",type)==0) )
				return true;
			return spShadingNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingColorNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingColorNode handle 
		 * @return a handle to the spShadingColorNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingColorNode SafeCast(spObject other);

		/**
		 * The color value. 
		 * @param r The desired value of the red channel. 
		 * @param g The desired value of the green channel. 
		 * @param b The desired value of the blue channel. 
		 * @param a The desired value of the alpha channel. 
		 */
		void SetColor( real r , real g , real b , real a ) const;

	};

	/**
	 * AddNode describes a single addition shading node in a shading network. Input 
	 * 1 and 2 are added per-component to produce the output. 
	 */
	class spShadingAddNode : public spShadingFilterNode
	{
		public:
		spShadingAddNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingAddNode();
		spShadingAddNode( const spShadingAddNode &p );
		spShadingAddNode & operator=( const spShadingAddNode &p );
		const spShadingAddNode* operator->() const;
		spShadingAddNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingAddNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingAddNode",type)==0) || (strcmp("spShadingAddNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingAddNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingAddNode handle 
		 * @return a handle to the spShadingAddNode object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spShadingAddNode SafeCast(spObject other);

	};

	/**
	 * SubtractNode describes a single subtracting shading node in a shading network. 
	 * Input 2 is subtracted from input 1 per-component. 
	 */
	class spShadingSubtractNode : public spShadingFilterNode
	{
		public:
		spShadingSubtractNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingSubtractNode();
		spShadingSubtractNode( const spShadingSubtractNode &p );
		spShadingSubtractNode & operator=( const spShadingSubtractNode &p );
		const spShadingSubtractNode* operator->() const;
		spShadingSubtractNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingSubtractNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingSubtractNode",type)==0) || (strcmp("spShadingSubtractNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingSubtractNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingSubtractNode handle 
		 * @return a handle to the spShadingSubtractNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingSubtractNode SafeCast(spObject other);

	};

	/**
	 * MultiplyNode describes a single multiplying shading node in a shading network. 
	 * Input 1 and Input 2 is multiplied per-component. 
	 */
	class spShadingMultiplyNode : public spShadingFilterNode
	{
		public:
		spShadingMultiplyNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingMultiplyNode();
		spShadingMultiplyNode( const spShadingMultiplyNode &p );
		spShadingMultiplyNode & operator=( const spShadingMultiplyNode &p );
		const spShadingMultiplyNode* operator->() const;
		spShadingMultiplyNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingMultiplyNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingMultiplyNode",type)==0) || (strcmp("spShadingMultiplyNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingMultiplyNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingMultiplyNode handle 
		 * @return a handle to the spShadingMultiplyNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingMultiplyNode SafeCast(spObject other);

	};

	/**
	 * ShadingColorCorrectionNode is used to adjust the Hue & Saturation of Input 1, 
	 * using Input 2 (r=Hue change, g=Saturation change). The adjustments are in the 
	 * range (-1 to 1), where 0 equals no adjustment. In the case of Hue, -1 or 1 equals 
	 * a full rotation in either direction. In the case of Saturation, -1 is fully 
	 * grayscale, and 1 is double the saturation of before. 
	 */
	class spShadingColorCorrectionNode : public spShadingFilterNode
	{
		public:
		spShadingColorCorrectionNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingColorCorrectionNode();
		spShadingColorCorrectionNode( const spShadingColorCorrectionNode &p );
		spShadingColorCorrectionNode & operator=( const spShadingColorCorrectionNode &p );
		const spShadingColorCorrectionNode* operator->() const;
		spShadingColorCorrectionNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingColorCorrectionNode is a or 
		 * is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingColorCorrectionNode",type)==0) || (strcmp("spShadingColorCorrectionNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingColorCorrectionNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingColorCorrectionNode handle 
		 * @return a handle to the spShadingColorCorrectionNode object, if the cast can 
		 * be made, and a NULL handle otherwise 
		 */
		static spShadingColorCorrectionNode SafeCast(spObject other);

	};

	/**
	 * This node describes an exponentiation. The output will be Input 1 to the power 
	 * of Input 2, and it is calculated per-component. 
	 */
	class spShadingPowNode : public spShadingFilterNode
	{
		public:
		spShadingPowNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingPowNode();
		spShadingPowNode( const spShadingPowNode &p );
		spShadingPowNode & operator=( const spShadingPowNode &p );
		const spShadingPowNode* operator->() const;
		spShadingPowNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingPowNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingPowNode",type)==0) || (strcmp("spShadingPowNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingPowNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingPowNode handle 
		 * @return a handle to the spShadingPowNode object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spShadingPowNode SafeCast(spObject other);

	};

	/**
	 * DivideNode describes a single division shading node node in a shading network. 
	 * Input 1 is divided by Input 2 per-component to produce the output. 
	 */
	class spShadingDivideNode : public spShadingFilterNode
	{
		public:
		spShadingDivideNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingDivideNode();
		spShadingDivideNode( const spShadingDivideNode &p );
		spShadingDivideNode & operator=( const spShadingDivideNode &p );
		const spShadingDivideNode* operator->() const;
		spShadingDivideNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingDivideNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingDivideNode",type)==0) || (strcmp("spShadingDivideNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingDivideNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingDivideNode handle 
		 * @return a handle to the spShadingDivideNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingDivideNode SafeCast(spObject other);

	};

	/**
	 * ClampNode describes a single clamp shading node in a shading network. Input 
	 * 1 is clamped per-component between Input 2 and 3. 
	 */
	class spShadingClampNode : public spShadingFilterNode
	{
		public:
		spShadingClampNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingClampNode();
		spShadingClampNode( const spShadingClampNode &p );
		spShadingClampNode & operator=( const spShadingClampNode &p );
		const spShadingClampNode* operator->() const;
		spShadingClampNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingClampNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingClampNode",type)==0) || (strcmp("spShadingClampNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingClampNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingClampNode handle 
		 * @return a handle to the spShadingClampNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingClampNode SafeCast(spObject other);

	};

	/**
	 * MaxNode describes a single max shading node in a shading network. The output 
	 * has the per-channel max values of the two inputs. 
	 */
	class spShadingMaxNode : public spShadingFilterNode
	{
		public:
		spShadingMaxNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingMaxNode();
		spShadingMaxNode( const spShadingMaxNode &p );
		spShadingMaxNode & operator=( const spShadingMaxNode &p );
		const spShadingMaxNode* operator->() const;
		spShadingMaxNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingMaxNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingMaxNode",type)==0) || (strcmp("spShadingMaxNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingMaxNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingMaxNode handle 
		 * @return a handle to the spShadingMaxNode object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spShadingMaxNode SafeCast(spObject other);

	};

	/**
	 * MinNode describes a single min shading node in a shading network. The output 
	 * has the per-channel min values of the two inputs. 
	 */
	class spShadingMinNode : public spShadingFilterNode
	{
		public:
		spShadingMinNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingMinNode();
		spShadingMinNode( const spShadingMinNode &p );
		spShadingMinNode & operator=( const spShadingMinNode &p );
		const spShadingMinNode* operator->() const;
		spShadingMinNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingMinNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingMinNode",type)==0) || (strcmp("spShadingMinNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingMinNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingMinNode handle 
		 * @return a handle to the spShadingMinNode object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spShadingMinNode SafeCast(spObject other);

	};

	/**
	 * StepNode describes a single step shading node, where the per-component output 
	 * is either 1 or 0 depending on if input0 is larger or smaller than input1. Basically, 
	 * (Input0 >= Input1) ? 1 : 0 
	 */
	class spShadingStepNode : public spShadingFilterNode
	{
		public:
		spShadingStepNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingStepNode();
		spShadingStepNode( const spShadingStepNode &p );
		spShadingStepNode & operator=( const spShadingStepNode &p );
		const spShadingStepNode* operator->() const;
		spShadingStepNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingStepNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingStepNode",type)==0) || (strcmp("spShadingStepNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingStepNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingStepNode handle 
		 * @return a handle to the spShadingStepNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingStepNode SafeCast(spObject other);

	};

	/**
	 * ShadingEqualNode describes an "is equal to" operator, where the per-component 
	 * output is either 1 or 0 depending on if input0 is equal to input1. Basically, 
	 * (Input0 == Input1) ? 1 : 0 
	 */
	class spShadingEqualNode : public spShadingFilterNode
	{
		public:
		spShadingEqualNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingEqualNode();
		spShadingEqualNode( const spShadingEqualNode &p );
		spShadingEqualNode & operator=( const spShadingEqualNode &p );
		const spShadingEqualNode* operator->() const;
		spShadingEqualNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingEqualNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingEqualNode",type)==0) || (strcmp("spShadingEqualNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingEqualNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingEqualNode handle 
		 * @return a handle to the spShadingEqualNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingEqualNode SafeCast(spObject other);

	};

	/**
	 * NotEqualNode describes the "is not equal" operator, where the per-component 
	 * output is either 1 or 0 depending on if input0 is equal to input1. Basically, 
	 * (Input0 != Input1) ? 1 : 0 
	 */
	class spShadingNotEqualNode : public spShadingFilterNode
	{
		public:
		spShadingNotEqualNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingNotEqualNode();
		spShadingNotEqualNode( const spShadingNotEqualNode &p );
		spShadingNotEqualNode & operator=( const spShadingNotEqualNode &p );
		const spShadingNotEqualNode* operator->() const;
		spShadingNotEqualNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingNotEqualNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingNotEqualNode",type)==0) || (strcmp("spShadingNotEqualNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingNotEqualNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingNotEqualNode handle 
		 * @return a handle to the spShadingNotEqualNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingNotEqualNode SafeCast(spObject other);

	};

	/**
	 * VertexColorNode describes a vertex color source node in a shading network. 
	 */
	class spShadingVertexColorNode : public spShadingNode
	{
		public:
		spShadingVertexColorNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingVertexColorNode();
		spShadingVertexColorNode( const spShadingVertexColorNode &p );
		spShadingVertexColorNode & operator=( const spShadingVertexColorNode &p );
		const spShadingVertexColorNode* operator->() const;
		spShadingVertexColorNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingVertexColorNode is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingVertexColorNode",type)==0) || (strcmp("spShadingVertexColorNode",type)==0) )
				return true;
			return spShadingNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingVertexColorNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingVertexColorNode handle 
		 * @return a handle to the spShadingVertexColorNode object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spShadingVertexColorNode SafeCast(spObject other);

		/**
		 * The vertex color index. This is the vertex color field in the geometry which 
		 * will be used for casting with this node. 
		 * @param value Vertex color index which will be used. 
		 */
		void SetVertexColorIndex( rid value ) const;

		/**
		 * The vertex color index. This is the vertex color field in the geometry which 
		 * will be used for casting with this node. 
		 */
		rid GetVertexColorIndex(  ) const;

		/**
		 * The vertex color set. This is the vertex color field in the geometry which 
		 * will be used for casting with this node. 
		 * @param value Vertex color set which will be used. 
		 */
		void SetVertexColorSet( const char * value ) const;

		/**
		 * The vertex color set. This is the vertex color field in the geometry which 
		 * will be used for casting with this node. 
		 */
		spString GetVertexColorSet(  ) const;

	};

	/**
	 * InterpolateNode describes a single interpolating shading node node in a shading 
	 * network. Input 1 and Input 2 is interpolated per-component using Input 3. Blend 
	 * values below 0 and over 1 will be clamped. 
	 */
	class spShadingInterpolateNode : public spShadingFilterNode
	{
		public:
		spShadingInterpolateNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingInterpolateNode();
		spShadingInterpolateNode( const spShadingInterpolateNode &p );
		spShadingInterpolateNode & operator=( const spShadingInterpolateNode &p );
		const spShadingInterpolateNode* operator->() const;
		spShadingInterpolateNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingInterpolateNode is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingInterpolateNode",type)==0) || (strcmp("spShadingInterpolateNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingInterpolateNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingInterpolateNode handle 
		 * @return a handle to the spShadingInterpolateNode object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spShadingInterpolateNode SafeCast(spObject other);

	};

	/**
	 * CustomNode describes a custom shading node in a shading network. The output 
	 * is produced based on customizable user specified operations. The custom node 
	 * has a user specified amount of input parameters. Use SetInputCount() to specify 
	 * the number of inputs. The user has to assign and implement event handlers (called 
	 * observers) for the custom node to be able to evaluate to colors. See CustomNodeExample 
	 * and API documentation for further explanations and code samples. 
	 */
	class spShadingCustomNode : public spShadingFilterNode
	{
		public:
		spShadingCustomNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingCustomNode();
		spShadingCustomNode( const spShadingCustomNode &p );
		spShadingCustomNode & operator=( const spShadingCustomNode &p );
		const spShadingCustomNode* operator->() const;
		spShadingCustomNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingCustomNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingCustomNode",type)==0) || (strcmp("spShadingCustomNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingCustomNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingCustomNode handle 
		 * @return a handle to the spShadingCustomNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingCustomNode SafeCast(spObject other);

		/**
		 * The number of inputs for this custom node. 
		 * @param value The number of inputs for this custom node. 
		 */
		void SetInputCount( unsigned int value ) const;

		/**
		 * The number of inputs for this custom node. 
		 */
		unsigned int GetInputCount(  ) const;

		/**
		 * Get color value from node input index. 
		 * @param value Index of node inputs. 
		 */
		ShadingColor GetInputValue( unsigned int value ) const;

		/**
		 * Set custom shader code from OnShadingCustomNodeGenerateShaderCode observer 
		 * method. 
		 * @param value Custom shader code. 
		 */
		void SetCustomShaderCode( const char * value ) const;

	};

	/**
	 * LayeredBlendNode is a node with an arbitrary number of inputs that can be blended 
	 * differently. 
	 */
	class spShadingLayeredBlendNode : public spShadingFilterNode
	{
		public:
		spShadingLayeredBlendNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingLayeredBlendNode();
		spShadingLayeredBlendNode( const spShadingLayeredBlendNode &p );
		spShadingLayeredBlendNode & operator=( const spShadingLayeredBlendNode &p );
		const spShadingLayeredBlendNode* operator->() const;
		spShadingLayeredBlendNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingLayeredBlendNode is a or is 
		 * a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingLayeredBlendNode",type)==0) || (strcmp("spShadingLayeredBlendNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingLayeredBlendNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingLayeredBlendNode handle 
		 * @return a handle to the spShadingLayeredBlendNode object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spShadingLayeredBlendNode SafeCast(spObject other);

		/**
		 * The number of inputs for this node. 
		 * @param value The number of inputs for this node. Value cannot be less than 
		 * 0. Value cannot be greater than SG_NUM_SUPPORTED_CUSTOM_NODE_INPUTS. 
		 */
		void SetInputCount( unsigned int value ) const;

		/**
		 * The number of inputs for this node. 
		 */
		unsigned int GetInputCount(  ) const;

		/**
		 * The blend type per input connection. 
		 * @param _input The input index. 
		 * @param _blendType The blend type to use. 
		 */
		void SetPerInputBlendType( int _input , Simplygon::ETextureBlendType _blendType ) const;

		/**
		 * The blend type per input connection. 
		 * @param _input The input index. 
		 * @return The input blend type 
		 */
		Simplygon::ETextureBlendType GetPerInputBlendType( int _input ) const;

	};

	/**
	 * This node describes an normalization of the x,y,z components of the input. 
	 */
	class spShadingNormalize3Node : public spShadingFilterNode
	{
		public:
		spShadingNormalize3Node( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingNormalize3Node();
		spShadingNormalize3Node( const spShadingNormalize3Node &p );
		spShadingNormalize3Node & operator=( const spShadingNormalize3Node &p );
		const spShadingNormalize3Node* operator->() const;
		spShadingNormalize3Node( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingNormalize3Node is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingNormalize3Node",type)==0) || (strcmp("spShadingNormalize3Node",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingNormalize3Node 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingNormalize3Node handle 
		 * @return a handle to the spShadingNormalize3Node object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spShadingNormalize3Node SafeCast(spObject other);

	};

	/**
	 * This node describes a square root calculation. The output will be the per-component 
	 * square root of input 1 
	 */
	class spShadingSqrtNode : public spShadingFilterNode
	{
		public:
		spShadingSqrtNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingSqrtNode();
		spShadingSqrtNode( const spShadingSqrtNode &p );
		spShadingSqrtNode & operator=( const spShadingSqrtNode &p );
		const spShadingSqrtNode* operator->() const;
		spShadingSqrtNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingSqrtNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingSqrtNode",type)==0) || (strcmp("spShadingSqrtNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingSqrtNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingSqrtNode handle 
		 * @return a handle to the spShadingSqrtNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingSqrtNode SafeCast(spObject other);

	};

	/**
	 * This node describes an dot of the x,y,z components of the inputs. 
	 */
	class spShadingDot3Node : public spShadingFilterNode
	{
		public:
		spShadingDot3Node( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingDot3Node();
		spShadingDot3Node( const spShadingDot3Node &p );
		spShadingDot3Node & operator=( const spShadingDot3Node &p );
		const spShadingDot3Node* operator->() const;
		spShadingDot3Node( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingDot3Node is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingDot3Node",type)==0) || (strcmp("spShadingDot3Node",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingDot3Node 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingDot3Node handle 
		 * @return a handle to the spShadingDot3Node object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingDot3Node SafeCast(spObject other);

	};

	/**
	 * This node describes the cross of the x,y,z components of the input. 
	 */
	class spShadingCross3Node : public spShadingFilterNode
	{
		public:
		spShadingCross3Node( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingCross3Node();
		spShadingCross3Node( const spShadingCross3Node &p );
		spShadingCross3Node & operator=( const spShadingCross3Node &p );
		const spShadingCross3Node* operator->() const;
		spShadingCross3Node( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingCross3Node is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingCross3Node",type)==0) || (strcmp("spShadingCross3Node",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingCross3Node 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingCross3Node handle 
		 * @return a handle to the spShadingCross3Node object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingCross3Node SafeCast(spObject other);

	};

	/**
	 * This node describes cosine of the x,y,z,w components of the input. 
	 */
	class spShadingCosNode : public spShadingFilterNode
	{
		public:
		spShadingCosNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingCosNode();
		spShadingCosNode( const spShadingCosNode &p );
		spShadingCosNode & operator=( const spShadingCosNode &p );
		const spShadingCosNode* operator->() const;
		spShadingCosNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingCosNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingCosNode",type)==0) || (strcmp("spShadingCosNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingCosNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingCosNode handle 
		 * @return a handle to the spShadingCosNode object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spShadingCosNode SafeCast(spObject other);

	};

	/**
	 * This node describes Sin of the x,y,z components of the input. 
	 */
	class spShadingSinNode : public spShadingFilterNode
	{
		public:
		spShadingSinNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingSinNode();
		spShadingSinNode( const spShadingSinNode &p );
		spShadingSinNode & operator=( const spShadingSinNode &p );
		const spShadingSinNode* operator->() const;
		spShadingSinNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingSinNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingSinNode",type)==0) || (strcmp("spShadingSinNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingSinNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingSinNode handle 
		 * @return a handle to the spShadingSinNode object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spShadingSinNode SafeCast(spObject other);

	};

	/**
	 * GreaterThanNode describes the "is greater than" operator, where the per-component 
	 * output is either 1 or 0 depending on if input0 is greater than input1. Basically, 
	 * (Input0 > Input1) ? 1 : 0 
	 */
	class spShadingGreaterThanNode : public spShadingFilterNode
	{
		public:
		spShadingGreaterThanNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingGreaterThanNode();
		spShadingGreaterThanNode( const spShadingGreaterThanNode &p );
		spShadingGreaterThanNode & operator=( const spShadingGreaterThanNode &p );
		const spShadingGreaterThanNode* operator->() const;
		spShadingGreaterThanNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingGreaterThanNode is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingGreaterThanNode",type)==0) || (strcmp("spShadingGreaterThanNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingGreaterThanNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingGreaterThanNode handle 
		 * @return a handle to the spShadingGreaterThanNode object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spShadingGreaterThanNode SafeCast(spObject other);

	};

	/**
	 * LessThanNode describes the "is less than" operator, where the per-component 
	 * output is either 1 or 0 depending on if input0 is LessThan to input1. Basically, 
	 * (Input0 < Input1) ? 1 : 0 
	 */
	class spShadingLessThanNode : public spShadingFilterNode
	{
		public:
		spShadingLessThanNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingLessThanNode();
		spShadingLessThanNode( const spShadingLessThanNode &p );
		spShadingLessThanNode & operator=( const spShadingLessThanNode &p );
		const spShadingLessThanNode* operator->() const;
		spShadingLessThanNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingLessThanNode is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingLessThanNode",type)==0) || (strcmp("spShadingLessThanNode",type)==0) )
				return true;
			return spShadingFilterNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingLessThanNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingLessThanNode handle 
		 * @return a handle to the spShadingLessThanNode object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShadingLessThanNode SafeCast(spObject other);

	};

	/**
	 * Geometry field node describes a source node for geometry field data in a shading 
	 * network, such as normals and tangents. 
	 */
	class spShadingGeometryFieldNode : public spShadingNode
	{
		public:
		spShadingGeometryFieldNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShadingGeometryFieldNode();
		spShadingGeometryFieldNode( const spShadingGeometryFieldNode &p );
		spShadingGeometryFieldNode & operator=( const spShadingGeometryFieldNode &p );
		const spShadingGeometryFieldNode* operator->() const;
		spShadingGeometryFieldNode( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShadingGeometryFieldNode is a or is 
		 * a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShadingGeometryFieldNode",type)==0) || (strcmp("spShadingGeometryFieldNode",type)==0) )
				return true;
			return spShadingNode::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShadingGeometryFieldNode 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShadingGeometryFieldNode handle 
		 * @return a handle to the spShadingGeometryFieldNode object, if the cast can 
		 * be made, and a NULL handle otherwise 
		 */
		static spShadingGeometryFieldNode SafeCast(spObject other);

		/**
		 * The geometry field type to sample. 
		 * @param value Field type to sample. 
		 */
		void SetFieldType( rid value ) const;

		/**
		 * The geometry field type to sample. 
		 */
		Simplygon::EGeometryDataFieldType GetFieldType(  ) const;

		/**
		 * The geometry field index, for those fields that have multiple layers. If both 
		 * name and index is set, the name has priority. 
		 * @param value Field index which will be used. 
		 */
		void SetFieldIndex( rid value ) const;

		/**
		 * The geometry field index, for those fields that have multiple layers. If both 
		 * name and index is set, the name has priority. 
		 */
		rid GetFieldIndex(  ) const;

		/**
		 * The geometry field name, for those fields that have multiple layers. If both 
		 * name and index is set, the name has priority. 
		 * @param value Field name which will be used. 
		 */
		void SetFieldName( const char * value ) const;

		/**
		 * The geometry field name, for those fields that have multiple layers. If both 
		 * name and index is set, the name has priority. 
		 */
		spString GetFieldName(  ) const;

	};

	/**
	 * Given a material, the shader data class keeps the relevant shader data and is 
	 * able to generate a GLSL/HLSL shader. 
	 */
	class spShaderGenerator : public spObject
	{
		public:
		spShaderGenerator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spShaderGenerator();
		spShaderGenerator( const spShaderGenerator &p );
		spShaderGenerator & operator=( const spShaderGenerator &p );
		const spShaderGenerator* operator->() const;
		spShaderGenerator( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spShaderGenerator is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IShaderGenerator",type)==0) || (strcmp("spShaderGenerator",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spShaderGenerator 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spShaderGenerator handle 
		 * @return a handle to the spShaderGenerator object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spShaderGenerator SafeCast(spObject other);

		/**
		 * The material, for which to create a shader. 
		 * @param value The material object. 
		 */
		void SetMaterial( const spMaterial & value ) const;

		/**
		 * The material, for which to create a shader. 
		 */
		spMaterial GetMaterial(  ) const;

		/**
		 * The prefix for all global identifiers. 
		 * @param value The prefix string. 
		 */
		void SetIdentifersPrefix( const char * value ) const;

		/**
		 * The prefix for all global identifiers. 
		 */
		spString GetIdentifersPrefix(  ) const;

		/**
		 * The GenerateFullShader flag value. If set, the shader generator will generate 
		 * a full shader, and not just the material shader tree. If false, the generator 
		 * will define the basic samplers, the per-fragment information and all the sampling 
		 * tree functions, but not the vertex and fragment shaders, that the user will 
		 * have to generate manually. This is useful for custom shader integration. 
		 * @param value The desired flag value. 
		 */
		void SetGenerateFullShader( bool value ) const;

		/**
		 * The GenerateFullShader flag value. If set, the shader generator will generate 
		 * a full shader, and not just the material shader tree. If false, the generator 
		 * will define the basic samplers, the per-fragment information and all the sampling 
		 * tree functions, but not the vertex and fragment shaders, that the user will 
		 * have to generate manually. This is useful for custom shader integration. 
		 */
		bool GetGenerateFullShader(  ) const;

		/**
		 * The GenerateTextureSamplerData flag value. If set, the shader generator will 
		 * generate sampler registers and uniforms (HLSL: map_[x] values, state_[x]). 
		 * If not set, the user will need to define them manually. As a help, the code 
		 * is still generated, but commented out. This flag only applies to when the shader 
		 * only generates the shading sampling tree, and is ignored if the GenerateFullShader 
		 * is set. 
		 * @param value The desired flag value. 
		 */
		void SetGenerateTextureSamplerData( bool value ) const;

		/**
		 * The GenerateTextureSamplerData flag value. If set, the shader generator will 
		 * generate sampler registers and uniforms (HLSL: map_[x] values, state_[x]). 
		 * If not set, the user will need to define them manually. As a help, the code 
		 * is still generated, but commented out. This flag only applies to when the shader 
		 * only generates the shading sampling tree, and is ignored if the GenerateFullShader 
		 * is set. 
		 */
		bool GetGenerateTextureSamplerData(  ) const;

		/**
		 * Generates a shader, given a material that uses shading node networks. To generate 
		 * the actual shader code, use GetHLSLCode, GetGLSLVertexCode and GetGLSLFragmentCode. 
		 * @return will return true if the shader could be generated from the material 
		 *  
		 */
		bool GenerateShaderData(  ) const;

		/**
		 * Returns a string containing the HLSL shader code. GenerateShader must have 
		 * been called prior to this call. 
		 */
		spString GetHLSLCode(  ) const;

		/**
		 * Returns a string containing the GLSL vertex shader GenerateShader must have 
		 * been called prior to this call. Note: If GenerateFullShader is set to false, 
		 * this code will be empty, as the code generated is only used by the fragment 
		 * shader. 
		 */
		spString GetGLSLVertexCode(  ) const;

		/**
		 * Returns a string containing the GLSL fragment shader GenerateShader must have 
		 * been called prior to this call. 
		 */
		spString GetGLSLFragmentCode(  ) const;

		/**
		 * The number of unique texture paths used in the material. For the shader to 
		 * use these textures, they are required to be uploaded to the texture channel 
		 * corresponding to their position in the array. The shader will generate these 
		 * sampler variables with the naming convention "map_i" (i : the array index of 
		 * the texture). GenerateShader must have been called prior to this call. Enumerate 
		 * 0 to Count, and use GetShaderInputTexturePath to retrieve a specific path. 
		 * @return The number of unique texture paths 
		 */
		unsigned int GetShaderInputTexturePathsCount(  ) const;

		/**
		 * Get a specific path from the list of unique paths. See notes of GetShaderInputTexturePathsCount 
		 * for more documentation on usage. 
		 * @param index The index of the path to retrieve. 
		 * @return The texture path 
		 */
		spString GetShaderInputTexturePath( rid index ) const;

		/**
		 * The number of unique UV sets used in the material. For the shader to use these 
		 * UV sets, they are required to be uploaded as texture coordinates corresponding 
		 * to their position in the array. The shader will generate the texcoords variables 
		 * with the naming convention "tex_i" (i : the array index of the UV set). GenerateShader 
		 * must have been called prior to this call. 
		 * @return The number of unique UV sets 
		 */
		unsigned int GetShaderInputUVSetsCount(  ) const;

		/**
		 * Get a specific set from the list of unique sets. See notes of GetShaderInputUVSetsCount 
		 * for more documentation on usage. 
		 * @param index The index of the set to retrieve. 
		 * @return The set name 
		 */
		spString GetShaderInputUVSet( rid index ) const;

		/**
		 * Returns the index that is set for the specific input UV set. If the UV set 
		 * is not used by the generated shader, the returned value is -1. Note that the 
		 * UV set name must match exactly, including case. 
		 * @param uvset The uv set name. 
		 * @return The index of the uv set, if used, or -1 if not used. 
		 */
		rid GetShaderInputUVIndex( const char * uvset ) const;

		/**
		 * The number of unique vertex colors used in the material. For the shader to 
		 * use these vertex colors, they are required to be uploaded as vertex color corresponding 
		 * to their position in the array. The shader will generate the vertex color variables 
		 * with the naming convention "vertexcolor_i" (i : the array index of the vertex 
		 * color). GenerateShader must have been called prior to this call. 
		 * @return The number of unique color sets 
		 */
		unsigned int GetShaderInputVertexColorsCount(  ) const;

		/**
		 * Get a specific set from the list of unique sets. See notes of GetShaderInputVertexColorsCount 
		 * for more documentation on usage. 
		 * @param index The index of the set to retrieve. 
		 * @return The set name 
		 */
		spString GetShaderInputVertexColor( rid index ) const;

		/**
		 * Returns the index that is set for the specific input vertex color set. If the 
		 * vertex color set is not used by the generated shader, the returned value is 
		 * -1. Note that the vertex color set name must match exactly, including case. 
		 * @param colorset The name of the color set. 
		 * @return The index of the vertex color set, if used, or -1 if not used. 
		 */
		rid GetShaderInputVertexColorsIndex( const char * colorset ) const;

		/**
		 * Unloads all shader data and resets it. 
		 */
		void UnloadData(  ) const;

	};

	/**
	 * AggregationProcessor combines all specified geometries in the scene into one 
	 * geometry. All materials are combined and receive a new shared texture atlas. 
	 */
	class spAggregationProcessor : public spProcessingObject
	{
		public:
		spAggregationProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spAggregationProcessor();
		spAggregationProcessor( const spAggregationProcessor &p );
		spAggregationProcessor & operator=( const spAggregationProcessor &p );
		const spAggregationProcessor* operator->() const;
		spAggregationProcessor( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spAggregationProcessor is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IAggregationProcessor",type)==0) || (strcmp("spAggregationProcessor",type)==0) )
				return true;
			return spProcessingObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spAggregationProcessor 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spAggregationProcessor handle 
		 * @return a handle to the spAggregationProcessor object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spAggregationProcessor SafeCast(spObject other);

		/**
		 * The scene that will be aggregated. Please note that internal references might 
		 * be modified by the processor. The caller should refresh any reference that 
		 * is cached outside the scene after running the processor. 
		 * @param value The scene to process. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The scene that will be aggregated. Please note that internal references might 
		 * be modified by the processor. The caller should refresh any reference that 
		 * is cached outside the scene after running the processor. 
		 */
		spScene GetScene(  ) const;

		/**
		 * The MappingImage object that is generated if MappingImageSettings::GenerateMappingImage 
		 * is set. This returns mapping image index 0, use GetMappingImageForImageIndex 
		 * to retrieve for a specific index. A new object is generated for each call to 
		 * RunProcessing(). 
		 * @return The generated mappingimage. 
		 */
		spMappingImage GetMappingImage(  ) const;

		/**
		 * The MappingImage object that is generated if MappingImageSettings::GenerateMappingImage 
		 * is set. Called with an id, it will fetch that specific mapping image if using 
		 * multi-material output. A new object is generated for each call to RunProcessing(). 
		 * @param OutputMaterialId The value for the OutputMaterialId. 
		 * @return The generated mappingimage. 
		 */
		spMappingImage GetMappingImageForImageIndex( rid OutputMaterialId ) const;

		/**
		 * The settings for the combining process. 
		 */
		spAggregationSettings GetAggregationSettings(  ) const;

		/**
		 * The settings for the image mapping process. 
		 */
		spMappingImageSettings GetMappingImageSettings(  ) const;

		/**
		 * The settings for handling visibility weights. Visibility settings contains 
		 * the parameters for how to compute the visibility of a scene and how to use 
		 * it. 
		 */
		spVisibilitySettings GetVisibilitySettings(  ) const;

		/**
		 * The settings for handling geometry culling. 
		 */
		spGeometryCullingSettings GetGeometryCullingSettings(  ) const;

		/**
		 * The settings for handling visibility weights. 
		 */
		spVertexWeightSettings GetVertexWeightSettings(  ) const;

	};

	/**
	 * Settings for the AggregationSettings class. The AggregationProcessor converts 
	 * entire scenes containing multiple draw calls into a single new object with a 
	 * single texture per material channel. The user can set whether or not the AggregationProcessor 
	 * should create new UVs based on the old UVs or create a completely new UV parameterization. 
	 */
	class spAggregationSettings : public spSettingsObject
	{
		public:
		spAggregationSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spAggregationSettings();
		spAggregationSettings( const spAggregationSettings &p );
		spAggregationSettings & operator=( const spAggregationSettings &p );
		const spAggregationSettings* operator->() const;
		spAggregationSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spAggregationSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IAggregationSettings",type)==0) || (strcmp("spAggregationSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spAggregationSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spAggregationSettings handle 
		 * @return a handle to the spAggregationSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spAggregationSettings SafeCast(spObject other);

		/**
		 * Which SelectionSet should be processed. If set to -1, all geometries in the 
		 * scene will be processed. 
		 * @param value The desired SelectionSet id. Value cannot be less than -1. 
		 */
		void SetProcessSelectionSetID( rid value ) const;

		/**
		 * Which SelectionSet should be processed. If set to -1, all geometries in the 
		 * scene will be processed. 
		 */
		rid GetProcessSelectionSetID(  ) const;

		/**
		 * Which selection set should be processed. If the selection set is not found, 
		 * all geometries in the scene will be processed. If both selection set name and 
		 * ID are set, the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetProcessSelectionSetName( const char * value ) const;

		/**
		 * Which selection set should be processed. If the selection set is not found, 
		 * all geometries in the scene will be processed. If both selection set name and 
		 * ID are set, the name will be used. 
		 */
		spString GetProcessSelectionSetName(  ) const;

		/**
		 * If false, the processor will remove all geometry and scene meshes which were 
		 * not selected for processing from the scene. If true, only the geometry in the 
		 * ProcessSelectionSet will be replaced or updated, while the rest of the scene 
		 * tree is kept intact. New geometry is always added as the last child of the 
		 * scene root. If generating a mappingimage to cast materials, new materialIds 
		 * will also be appended to the end of the old material table instead of replacing 
		 * the old ones. 
		 * @param value The desired KeepUnprocessedSceneMeshes flag. 
		 */
		void SetKeepUnprocessedSceneMeshes( bool value ) const;

		/**
		 * If false, the processor will remove all geometry and scene meshes which were 
		 * not selected for processing from the scene. If true, only the geometry in the 
		 * ProcessSelectionSet will be replaced or updated, while the rest of the scene 
		 * tree is kept intact. New geometry is always added as the last child of the 
		 * scene root. If generating a mappingimage to cast materials, new materialIds 
		 * will also be appended to the end of the old material table instead of replacing 
		 * the old ones. 
		 */
		bool GetKeepUnprocessedSceneMeshes(  ) const;

		/**
		 * The processor will merge all the geometries in the scene into a single geometry 
		 * if this is enabled. 
		 * @param value The desired MergeGeometries flag. 
		 */
		void SetMergeGeometries( bool value ) const;

		/**
		 * The processor will merge all the geometries in the scene into a single geometry 
		 * if this is enabled. 
		 */
		bool GetMergeGeometries(  ) const;

		/**
		 * Enables culling object insides and permits use of GeometryCullingSettings. 
		 * If both this and visibility related culling is enabled, this is run first, 
		 * then visibility. 
		 * @param value The desired EnableTriangleCulling flag. 
		 */
		void SetEnableGeometryCulling( bool value ) const;

		/**
		 * Enables culling object insides and permits use of GeometryCullingSettings. 
		 * If both this and visibility related culling is enabled, this is run first, 
		 * then visibility. 
		 */
		bool GetEnableGeometryCulling(  ) const;

		/**
		 * The accuracy of the triangle intersection math to find and cull insides used 
		 * by the EnableTriangleCulling setting. Defined from 0 to 1 where 0 is max speed 
		 * and 1 is max precision. 
		 * @param value The desired TriangleCullingPrecision value. Value cannot be less 
		 * than 0.0. Value cannot be greater than 1.0. 
		 */
		void SetGeometryCullingPrecision( real value ) const;

		/**
		 * The accuracy of the triangle intersection math to find and cull insides used 
		 * by the EnableTriangleCulling setting. Defined from 0 to 1 where 0 is max speed 
		 * and 1 is max precision. 
		 */
		real GetGeometryCullingPrecision(  ) const;

		/**
		 * Subdivides the geometry based on the tiling texture coords. The cutting frequency 
		 * "SubdivisionTileSize" is a positive integer multiplier (i.e. the mesh will 
		 * be cut each time its U or V texcoords crosses the SubdivisionTileSize). The 
		 * output UVs will be in the range [(0,0),(SubdivisionTileSize,SubdivisionTileSize)]. 
		 * @param value The desired SubdivideGeometryBasedOnUVTiles flag. 
		 */
		void SetSubdivideGeometryBasedOnUVTiles( bool value ) const;

		/**
		 * Subdivides the geometry based on the tiling texture coords. The cutting frequency 
		 * "SubdivisionTileSize" is a positive integer multiplier (i.e. the mesh will 
		 * be cut each time its U or V texcoords crosses the SubdivisionTileSize). The 
		 * output UVs will be in the range [(0,0),(SubdivisionTileSize,SubdivisionTileSize)]. 
		 *  
		 */
		bool GetSubdivideGeometryBasedOnUVTiles(  ) const;

		/**
		 * The cutting frequency used when SubdivideGeometryBasedOnUVTiles is enabled. 
		 * @param value The desired SubdivisionTileSize value. Value cannot be less than 
		 * 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetSubdivisionTileSize( unsigned int value ) const;

		/**
		 * The cutting frequency used when SubdivideGeometryBasedOnUVTiles is enabled. 
		 *  
		 */
		unsigned int GetSubdivisionTileSize(  ) const;

	};

	/**
	 * Computes new texture coordinates for a geometry with overlapping UV charts. 
	 */
	class spChartAggregator : public spObject
	{
		public:
		spChartAggregator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spChartAggregator();
		spChartAggregator( const spChartAggregator &p );
		spChartAggregator & operator=( const spChartAggregator &p );
		const spChartAggregator* operator->() const;
		spChartAggregator( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spChartAggregator is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IChartAggregator",type)==0) || (strcmp("spChartAggregator",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spChartAggregator 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spChartAggregator handle 
		 * @return a handle to the spChartAggregator object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spChartAggregator SafeCast(spObject other);

		/**
		 * Executes the parameterization of the geometry. 
		 * @param geom The geometry which is to be parameterized. 
		 * @param arr The array where the result is stored. 
		 * @return True if the parameterization succeeds, false otherwise. 
		 */
		bool Parameterize( const spGeometryData & geom , const spRealArray & arr ) const;

		/**
		 * The number of input materials used in the original geometry for mapping to 
		 * multiple output materials. This needs to be set before you can set any specific 
		 * in-out material mapping. 0 signifies that no in-out material mapping is used, 
		 * ie. the process will produce one resulting mapping image. 
		 * @param value The number of outputs. 
		 */
		void SetInputMaterialCount( unsigned int value ) const;

		/**
		 * The number of input materials used in the original geometry for mapping to 
		 * multiple output materials. This needs to be set before you can set any specific 
		 * in-out material mapping. 0 signifies that no in-out material mapping is used, 
		 * ie. the process will produce one resulting mapping image. 
		 */
		unsigned int GetInputMaterialCount(  ) const;

		/**
		 * The number of output mapping images that are to be generated. The triangle 
		 * field OutputMaterialIds also needs to be set, or the material IDs of the original 
		 * geometry needs to be set to a specific output material in this setting object. 
		 * @param value The number of outputs. Value cannot be less than 1. Value cannot 
		 * be greater than SG_MAXIMUM_CHART_AGGREGATOR_OUTPUT_MATERIAL_COUNT. 
		 */
		void SetOutputMaterialCount( unsigned int value ) const;

		/**
		 * The number of output mapping images that are to be generated. The triangle 
		 * field OutputMaterialIds also needs to be set, or the material IDs of the original 
		 * geometry needs to be set to a specific output material in this setting object. 
		 *  
		 */
		unsigned int GetOutputMaterialCount(  ) const;

		/**
		 * The material mapping for InMaterialId, meaning what material of the generated 
		 * LOD InMaterialId will be baked into. Both InputMaterialCount and OutputMaterialCount 
		 * need to be set for this mapping to work, and all original materials need to 
		 * be mapped to an existing output id. 
		 * @param InMaterialId The input material ID. 
		 * @param OutMaterialId The output material ID. 
		 */
		void SetInputOutputMaterialMapping( unsigned int InMaterialId , int OutMaterialId ) const;

		/**
		 * The previously set material mapping for mat_id. 
		 * @param InMaterialId The input material ID. 
		 * @return The currently mapped output material for InMaterialId. -1 means mapping 
		 * is not set. 
		 */
		int GetInputOutputMaterialMapping( unsigned int InMaterialId ) const;

		/**
		 * The width of the texture to use. 
		 * @param value The texture width. 
		 */
		void SetTextureWidth( unsigned int value ) const;

		/**
		 * The width of the texture to use. 
		 */
		unsigned int GetTextureWidth(  ) const;

		/**
		 * The width of the texture to use. 
		 * @param id The output material ID. 
		 * @param value The texture width. 
		 */
		void SetTextureWidthForMaterialIndex( unsigned int id , unsigned int value ) const;

		/**
		 * The width of the texture to use. 
		 * @param id The output material ID. 
		 * @return The current value of texture width. 
		 */
		unsigned int GetTextureWidthForMaterialIndex( unsigned int id ) const;

		/**
		 * The height of the texture to use. 
		 * @param value The texture height. 
		 */
		void SetTextureHeight( unsigned int value ) const;

		/**
		 * The height of the texture to use. 
		 */
		unsigned int GetTextureHeight(  ) const;

		/**
		 * The height of the texture to use. 
		 * @param id The output material ID. 
		 * @param value The texture height. 
		 */
		void SetTextureHeightForMaterialIndex( unsigned int id , unsigned int value ) const;

		/**
		 * The height of the texture to use. 
		 * @param id The output material ID. 
		 * @return The current value of texture height. 
		 */
		unsigned int GetTextureHeightForMaterialIndex( unsigned int id ) const;

		/**
		 * The minimum number of pixels between charts. 
		 * @param value The value to which GutterSpace will be set. 
		 */
		void SetGutterSpace( unsigned int value ) const;

		/**
		 * The minimum number of pixels between charts. 
		 */
		unsigned int GetGutterSpace(  ) const;

		/**
		 * The minimum number of pixels between charts. 
		 * @param id The output material ID. 
		 * @param value The value to which GutterSpace will be set. 
		 */
		void SetGutterSpaceForMaterialIndex( unsigned int id , unsigned int value ) const;

		/**
		 * The minimum number of pixels between charts. 
		 * @param id The output material ID. 
		 * @return The current value of GutterSpace 
		 */
		unsigned int GetGutterSpaceForMaterialIndex( unsigned int id ) const;

		/**
		 * The automatic_texture_size flag. If true, then texture sizes will be computed 
		 * for the reduced mesh depending on its pixel size on screen. 
		 * @param value The desired flag. 
		 */
		void SetUseAutomaticTextureSize( bool value ) const;

		/**
		 * The automatic_texture_size flag. If true, then texture sizes will be computed 
		 * for the reduced mesh depending on its pixel size on screen. 
		 */
		bool GetUseAutomaticTextureSize(  ) const;

		/**
		 * A texture dimension length multiplier for the automatic texture size. 
		 * @param value The desired multiplier. 
		 */
		void SetAutomaticTextureSizeMultiplier( real value ) const;

		/**
		 * A texture dimension length multiplier for the automatic texture size. 
		 */
		real GetAutomaticTextureSizeMultiplier(  ) const;

		/**
		 * If UseAutomaticTextureSize is enabled, then force the texture sizes to be a 
		 * power of 2. 
		 * @param value The desired flag. 
		 */
		void SetForcePower2Texture( bool value ) const;

		/**
		 * If UseAutomaticTextureSize is enabled, then force the texture sizes to be a 
		 * power of 2. 
		 */
		bool GetForcePower2Texture(  ) const;

		/**
		 * Which TexCoord level to get charts from during re-parameterization. If a TexCoordName 
		 * is set, it will override the TexCoordLevel. 
		 * @param value The level/id of the TexCoord to use (i.e. 0-255). 
		 */
		void SetTexCoordLevel( unsigned int value ) const;

		/**
		 * Which TexCoord level to get charts from during re-parameterization. If a TexCoordName 
		 * is set, it will override the TexCoordLevel. 
		 */
		unsigned int GetTexCoordLevel(  ) const;

		/**
		 * Which TexCoord name to get charts from during re-parameterization. 
		 * @param value The name of the TexCoord to use (i.e. 'TexCoord0'-'TexCoord255'). 
		 *  
		 */
		void SetTexCoordName( const char * value ) const;

		/**
		 * Which TexCoord name to get charts from during re-parameterization. 
		 */
		spString GetTexCoordName(  ) const;

		/**
		 * Determines which method to use when aggregating the UVs. TextureSizeProportions: 
		 * Aggregated UV charts will be scaled to keep their relative pixel density relative 
		 * to all other UV charts. The user can still set the size of the output texture 
		 * maps. SurfaceArea: Aggregated UV charts will have their size set based on its 
		 * actual geometrical size. OriginalPixelDensity: The combined atlas will be resized 
		 * to fit each chart so that all charts retain the same amount of pixels as they 
		 * originally had. This will override any manually set texture size. UVSizeProportions: 
		 * Aggregated UV charts will have their size set based on its original UV size, 
		 * disregarding the size of the texture they are used in. 
		 * @param value The ChartAggregatorMode value to use. 
		 */
		void SetChartAggregatorMode( Simplygon::EChartAggregatorMode value ) const;

		/**
		 * Determines which method to use when aggregating the UVs. TextureSizeProportions: 
		 * Aggregated UV charts will be scaled to keep their relative pixel density relative 
		 * to all other UV charts. The user can still set the size of the output texture 
		 * maps. SurfaceArea: Aggregated UV charts will have their size set based on its 
		 * actual geometrical size. OriginalPixelDensity: The combined atlas will be resized 
		 * to fit each chart so that all charts retain the same amount of pixels as they 
		 * originally had. This will override any manually set texture size. UVSizeProportions: 
		 * Aggregated UV charts will have their size set based on its original UV size, 
		 * disregarding the size of the texture they are used in. 
		 */
		Simplygon::EChartAggregatorMode GetChartAggregatorMode(  ) const;

		/**
		 * If multiple UV charts overlap and have the same material, SurfaceAreaScale 
		 * specifies which of those instances determines the the output scale. It is only 
		 * valid when the ChartAggregatorMode is SurfaceArea and SeparateOverlappingCharts 
		 * is false. 
		 * @param value The SurfaceAreaScale value to use. 
		 */
		void SetSurfaceAreaScale( Simplygon::ESurfaceAreaScale value ) const;

		/**
		 * If multiple UV charts overlap and have the same material, SurfaceAreaScale 
		 * specifies which of those instances determines the the output scale. It is only 
		 * valid when the ChartAggregatorMode is SurfaceArea and SeparateOverlappingCharts 
		 * is false. 
		 */
		Simplygon::ESurfaceAreaScale GetSurfaceAreaScale(  ) const;

		/**
		 * The Separate Overlapping Charts flag. If charts are overlapping in the original 
		 * texture coords, they will be separated. 
		 * @param value The desired flag value. 
		 */
		void SetSeparateOverlappingCharts( bool value ) const;

		/**
		 * The scene material table. 
		 * @param value The scene material table. 
		 */
		void SetMaterialTable( const spMaterialTable & value ) const;

		/**
		 * The scene texture table. 
		 * @param value The scene texture table. 
		 */
		void SetTextureTable( const spTextureTable & value ) const;

		/**
		 * If KeepOriginalChartSizes is enabled: calling GetKeepOriginalChartSizesTextureWidth 
		 * and GetKeepOriginalChartSizesTextureHeight after parameterization will return 
		 * the final texture sizes. 
		 * @return The current KeepOriginalChartSizesTextureWidth size. 
		 */
		unsigned int GetKeepOriginalChartSizesTextureWidth(  ) const;

		/**
		 * If KeepOriginalChartSizes is enabled: calling GetKeepOriginalChartSizesTextureWidth 
		 * and GetKeepOriginalChartSizesTextureHeight after parameterization will return 
		 * the final texture sizes. 
		 * @param OutputID The output id. 
		 * @return The current KeepOriginalChartSizesTextureWidth size. 
		 */
		unsigned int GetKeepOriginalChartSizesTextureWidthForMaterialIndex( unsigned int OutputID ) const;

		/**
		 * If KeepOriginalChartSizes is enabled: calling GetKeepOriginalChartSizesTextureWidth 
		 * and GetKeepOriginalChartSizesTextureHeight after parameterization will return 
		 * the final texture sizes. 
		 * @return The current KeepOriginalChartSizesTextureHeight size. 
		 */
		unsigned int GetKeepOriginalChartSizesTextureHeight(  ) const;

		/**
		 * If KeepOriginalChartSizes is enabled: calling GetKeepOriginalChartSizesTextureWidth 
		 * and GetKeepOriginalChartSizesTextureHeight after parameterization will return 
		 * the final texture sizes. 
		 * @param OutputID The output id. 
		 * @return The current KeepOriginalChartSizesTextureHeight size. 
		 */
		unsigned int GetKeepOriginalChartSizesTextureHeightForMaterialIndex( unsigned int OutputID ) const;

		/**
		 * Set OriginalChartProportionsChannel to an SG_MATERIAL_CHANNEL_[...]. This channel 
		 * determines which texture channel to look at when determining which chart sizes 
		 * to keep. 
		 * @param value The new OriginalChartProportionsChannel value. 
		 */
		void SetOriginalChartProportionsChannel( const char * value ) const;

		/**
		 * Set OriginalChartProportionsChannel to an SG_MATERIAL_CHANNEL_[...]. This channel 
		 * determines which texture channel to look at when determining which chart sizes 
		 * to keep. 
		 */
		spString GetOriginalChartProportionsChannel(  ) const;

		/**
		 * The UseVertexWeights flag to scale the charts according to their vertex weights. 
		 * @param value The desired flag value. 
		 */
		void SetUseVertexWeights( bool value ) const;

		/**
		 * The UseVertexWeights flag to scale the charts according to their vertex weights. 
		 *  
		 */
		bool GetUseVertexWeights(  ) const;

		/**
		 * If LockUVRotation is enabled, only the original UV rotation will be used. Otherwise 
		 * 4 rotations are used (90 degree rotations). 
		 * @param value The new LockUVRotation. 
		 */
		void SetLockUVRotation( bool value ) const;

		/**
		 * If LockUVRotation is enabled, only the original UV rotation will be used. Otherwise 
		 * 4 rotations are used (90 degree rotations). 
		 */
		bool GetLockUVRotation(  ) const;

		/**
		 * If ExpandZeroAreaUVs is enabled then triangles that have zero area will be 
		 * slightly expanded. 
		 * @param value The new ExpandZeroAreaUVs. 
		 */
		void SetExpandZeroAreaUVs( bool value ) const;

		/**
		 * If ExpandZeroAreaUVs is enabled then triangles that have zero area will be 
		 * slightly expanded. 
		 */
		bool GetExpandZeroAreaUVs(  ) const;

	};

	/**
	 * VertexColorCasterSettings is the interface for basic vertex color caster settings. 
	 */
	class spVertexColorCasterSettings : public spMaterialCasterSettings
	{
		public:
		spVertexColorCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spVertexColorCasterSettings();
		spVertexColorCasterSettings( const spVertexColorCasterSettings &p );
		spVertexColorCasterSettings & operator=( const spVertexColorCasterSettings &p );
		const spVertexColorCasterSettings* operator->() const;
		spVertexColorCasterSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spVertexColorCasterSettings is a or is 
		 * a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IVertexColorCasterSettings",type)==0) || (strcmp("spVertexColorCasterSettings",type)==0) )
				return true;
			return spMaterialCasterSettings::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spVertexColorCasterSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spVertexColorCasterSettings handle 
		 * @return a handle to the spVertexColorCasterSettings object, if the cast can 
		 * be made, and a NULL handle otherwise 
		 */
		static spVertexColorCasterSettings SafeCast(spObject other);

		/**
		 * The OutputColorLevel index. 
		 * @param value The OutputColorLevel index value. 
		 */
		void SetOutputColorLevel( rid value ) const;

		/**
		 * The OutputColorLevel index. 
		 */
		rid GetOutputColorLevel(  ) const;

		/**
		 * The OutputColorName string . 
		 * @param value The OutputColorLevel index value. 
		 */
		void SetOutputColorName( const char * value ) const;

		/**
		 * The OutputColorName string . 
		 */
		spString GetOutputColorName(  ) const;

		/**
		 * The color space edge threshold, which will define how many hard color borders 
		 * there will be. Corners more similar than the threshold will be merged. This 
		 * works similarly to HardEdgeAngle for normals; lower values leads more hard 
		 * borders between neighboring corner colors, and higher values will give you 
		 * more shared, smoother, colors. This also impacts data usage when using packed 
		 * geometry since (more unique colors) == (more vertices). The distance is measured 
		 * in RGBA space. 
		 * @param value The ColorSpaceEdgeThreshold value. Value cannot be less than 0. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetColorSpaceEdgeThreshold( real value ) const;

		/**
		 * The color space edge threshold, which will define how many hard color borders 
		 * there will be. Corners more similar than the threshold will be merged. This 
		 * works similarly to HardEdgeAngle for normals; lower values leads more hard 
		 * borders between neighboring corner colors, and higher values will give you 
		 * more shared, smoother, colors. This also impacts data usage when using packed 
		 * geometry since (more unique colors) == (more vertices). The distance is measured 
		 * in RGBA space. 
		 */
		real GetColorSpaceEdgeThreshold(  ) const;

	};

	/**
	 * VertexColorCaster. 
	 */
	class spVertexColorCaster : public spMaterialCaster
	{
		public:
		spVertexColorCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spVertexColorCaster();
		spVertexColorCaster( const spVertexColorCaster &p );
		spVertexColorCaster & operator=( const spVertexColorCaster &p );
		const spVertexColorCaster* operator->() const;
		spVertexColorCaster( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spVertexColorCaster is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IVertexColorCaster",type)==0) || (strcmp("spVertexColorCaster",type)==0) )
				return true;
			return spMaterialCaster::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spVertexColorCaster 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spVertexColorCaster handle 
		 * @return a handle to the spVertexColorCaster object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spVertexColorCaster SafeCast(spObject other);

		/**
		 * The scene used for vertex casting. 
		 * @param value Is the scene object. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The color caster settings object. 
		 * @return Color caster settings object 
		 */
		spVertexColorCasterSettings GetVertexColorCasterSettings(  ) const;

	};

	/**
	 * Class for saving image data to different file formats. 
	 */
	class spImageDataExporter : public spObject
	{
		public:
		spImageDataExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spImageDataExporter();
		spImageDataExporter( const spImageDataExporter &p );
		spImageDataExporter & operator=( const spImageDataExporter &p );
		const spImageDataExporter* operator->() const;
		spImageDataExporter( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spImageDataExporter is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IImageDataExporter",type)==0) || (strcmp("spImageDataExporter",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spImageDataExporter 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spImageDataExporter handle 
		 * @return a handle to the spImageDataExporter object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spImageDataExporter SafeCast(spObject other);

		/**
		 * The main export file path. This must always be set. 
		 * @param value The desired main export file path. 
		 */
		void SetExportFilePath( const char * value ) const;

		/**
		 * The main export file path. This must always be set. 
		 */
		spString GetExportFilePath(  ) const;

		/**
		 * The image data to export. 
		 * @param value The image data object to export. 
		 */
		void SetImage( const spImageData & value ) const;

		/**
		 * Runs the export. Note that all parameters must be setup before exporting. 
		 */
		bool RunExport(  ) const;

		/**
		 * Output image file format to use. 
		 * @param value The desired output image file format. 
		 */
		void SetImageFileFormat( Simplygon::EImageOutputFormat value ) const;

		/**
		 * Output image file format to use. 
		 */
		Simplygon::EImageOutputFormat GetImageFileFormat(  ) const;

		/**
		 * The DDS block compression type to use. The block compression type will alter 
		 * the number of output channels. BC1-3 - 3 channels. BC4 - 1 channel. BC5 - 3 
		 * channels. 
		 * @param value The desired DDS compression type name. 
		 */
		void SetDDSCompressionType( Simplygon::EDDSCompressionType value ) const;

		/**
		 * The DDS block compression type to use. The block compression type will alter 
		 * the number of output channels. BC1-3 - 3 channels. BC4 - 1 channel. BC5 - 3 
		 * channels. 
		 */
		Simplygon::EDDSCompressionType GetDDSCompressionType(  ) const;

		/**
		 * Close any open file or stream, release any allocated data. 
		 */
		void Clear(  ) const;

	};

	/**
	 * AmbientOcclusionCaster generates an ambient occlusion map based on the original 
	 * geometry, and casts it. 
	 */
	class spAmbientOcclusionCaster : public spMaterialCaster
	{
		public:
		spAmbientOcclusionCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spAmbientOcclusionCaster();
		spAmbientOcclusionCaster( const spAmbientOcclusionCaster &p );
		spAmbientOcclusionCaster & operator=( const spAmbientOcclusionCaster &p );
		const spAmbientOcclusionCaster* operator->() const;
		spAmbientOcclusionCaster( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spAmbientOcclusionCaster is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IAmbientOcclusionCaster",type)==0) || (strcmp("spAmbientOcclusionCaster",type)==0) )
				return true;
			return spMaterialCaster::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spAmbientOcclusionCaster 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spAmbientOcclusionCaster handle 
		 * @return a handle to the spAmbientOcclusionCaster object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spAmbientOcclusionCaster SafeCast(spObject other);

		/**
		 * An additional scene that will be used to compute the ambient occlusion on the 
		 * main scene. 
		 * @param value The additional scene. 
		 */
		void SetAdditionalSourceScene( const spScene & value ) const;

		/**
		 * The ambient occlusion caster settings object. 
		 * @return Ambient occlusion caster settings object. 
		 */
		spAmbientOcclusionCasterSettings GetAmbientOcclusionCasterSettings(  ) const;

	};

	/**
	 * AmbientOcclusionCasterSettings manages settings for an ambient occlusion caster. 
	 */
	class spAmbientOcclusionCasterSettings : public spMaterialCasterSettings
	{
		public:
		spAmbientOcclusionCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spAmbientOcclusionCasterSettings();
		spAmbientOcclusionCasterSettings( const spAmbientOcclusionCasterSettings &p );
		spAmbientOcclusionCasterSettings & operator=( const spAmbientOcclusionCasterSettings &p );
		const spAmbientOcclusionCasterSettings* operator->() const;
		spAmbientOcclusionCasterSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spAmbientOcclusionCasterSettings is a 
		 * or is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IAmbientOcclusionCasterSettings",type)==0) || (strcmp("spAmbientOcclusionCasterSettings",type)==0) )
				return true;
			return spMaterialCasterSettings::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spAmbientOcclusionCasterSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spAmbientOcclusionCasterSettings 
		 * handle 
		 * @return a handle to the spAmbientOcclusionCasterSettings object, if the cast 
		 * can be made, and a NULL handle otherwise 
		 */
		static spAmbientOcclusionCasterSettings SafeCast(spObject other);

		/**
		 * This determines how many rays are traced per pixel (or subpixel) to evaluate 
		 * the occlusion. 
		 * @param value The desired number of rays. Value cannot be less than 0. Value 
		 * cannot be greater than UINT_MAX. 
		 */
		void SetRaysPerPixel( unsigned int value ) const;

		/**
		 * This determines how many rays are traced per pixel (or subpixel) to evaluate 
		 * the occlusion. 
		 */
		unsigned int GetRaysPerPixel(  ) const;

		/**
		 * How far away a surface has to be from another surface to generate no occlusion. 
		 * Only applicable if SimpleOcclusionMode is off. 
		 * @param value The far occlusion falloff. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetOcclusionFalloff( real value ) const;

		/**
		 * How far away a surface has to be from another surface to generate no occlusion. 
		 * Only applicable if SimpleOcclusionMode is off. 
		 */
		real GetOcclusionFalloff(  ) const;

		/**
		 * This is just a basic intensity scaler. Higher is "darker". 
		 * @param value The occlusion multiplier. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetOcclusionMultiplier( real value ) const;

		/**
		 * This is just a basic intensity scaler. Higher is "darker". 
		 */
		real GetOcclusionMultiplier(  ) const;

		/**
		 * If set, occlusion will not scale with distance, each ray will only be either 
		 * fully occluded or not at all. Speeds up processing time. 
		 * @param value The flag to which UseSimpleOcclusionMode will be set. 
		 */
		void SetUseSimpleOcclusionMode( bool value ) const;

		/**
		 * If set, occlusion will not scale with distance, each ray will only be either 
		 * fully occluded or not at all. Speeds up processing time. 
		 */
		bool GetUseSimpleOcclusionMode(  ) const;

	};

	/**
	 * The ImpostorProcessor generates an impostor of one of these impostor types: 
	 * BillboardCloud, Flipbook or ImpostorFromSingleView. 
	 */
	class spImpostorProcessor : public spProcessingObject
	{
		public:
		spImpostorProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spImpostorProcessor();
		spImpostorProcessor( const spImpostorProcessor &p );
		spImpostorProcessor & operator=( const spImpostorProcessor &p );
		const spImpostorProcessor* operator->() const;
		spImpostorProcessor( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spImpostorProcessor is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IImpostorProcessor",type)==0) || (strcmp("spImpostorProcessor",type)==0) )
				return true;
			return spProcessingObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spImpostorProcessor 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spImpostorProcessor handle 
		 * @return a handle to the spImpostorProcessor object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spImpostorProcessor SafeCast(spObject other);

		/**
		 * The scene for the impostor processing. Please note that internal references 
		 * might be modified by the processor. The caller should refresh any reference 
		 * that is cached outside the scene after running the processor. 
		 * @param value The scene for the impostor processing. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The scene for the impostor processing. Please note that internal references 
		 * might be modified by the processor. The caller should refresh any reference 
		 * that is cached outside the scene after running the processor. 
		 */
		spScene GetScene(  ) const;

		/**
		 * The settings for the ImpostorProcessor. 
		 * @return The ImpostorProcessor settings object associated with the processor 
		 *  
		 */
		spImpostorSettings GetImpostorSettings(  ) const;

		/**
		 * The settings for the the MappingImage. 
		 * @return The MappingImage settings object associated with the processor 
		 */
		spMappingImageSettings GetMappingImageSettings(  ) const;

		/**
		 * The MappingImage for the Impostor geometry. 
		 * @return The MappingImage object associated with the processor 
		 */
		spMappingImage GetMappingImage(  ) const;

		/**
		 * If an impostor has been generated with ImpostorType: ImpostorFromSingleView, 
		 * this function returns the quad GeometryData. 
		 * @return The Impostor GeometryData object created by the processor 
		 */
		spGeometryData GetImpostorGeometryFromSingleView(  ) const;

		/**
		 * If an impostor has been generated with ImpostorType: ImpostorFromSingleView, 
		 * this function returns the aspect ratio so the mapping setting can be set accordingly. 
		 * TextureHeight * AspectRatio = TextureWidth 
		 */
		real GetSingleViewAspectRatio(  ) const;

		/**
		 * If an impostor has been generated with ImpostorType: BillboardCloud, this function 
		 * returns the material id of the generated material. 
		 */
		rid GetBillboardCloudMaterialId(  ) const;

	};

	/**
	 * Settings for the ImpostorProcessor 
	 */
	class spImpostorSettings : public spSettingsObject
	{
		public:
		spImpostorSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spImpostorSettings();
		spImpostorSettings( const spImpostorSettings &p );
		spImpostorSettings & operator=( const spImpostorSettings &p );
		const spImpostorSettings* operator->() const;
		spImpostorSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spImpostorSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IImpostorSettings",type)==0) || (strcmp("spImpostorSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spImpostorSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spImpostorSettings handle 
		 * @return a handle to the spImpostorSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spImpostorSettings SafeCast(spObject other);

		/**
		 * Specifies which type of impostor should be created: BillboardCloud, Flipbook 
		 * or ImpostorFromSingleView. 
		 * @param value The ImpostorType value to use. 
		 */
		void SetImpostorType( Simplygon::EImpostorType value ) const;

		/**
		 * Specifies which type of impostor should be created: BillboardCloud, Flipbook 
		 * or ImpostorFromSingleView. 
		 */
		Simplygon::EImpostorType GetImpostorType(  ) const;

		/**
		 * Which selection set should be processed. If set to -1, all geometries in the 
		 * scene will be processed. If both selection set name and ID are set, the name 
		 * will be used. 
		 * @param value The desired SelectionSet id. Value cannot be less than -1. 
		 */
		void SetProcessSelectionSetID( rid value ) const;

		/**
		 * Which selection set should be processed. If set to -1, all geometries in the 
		 * scene will be processed. If both selection set name and ID are set, the name 
		 * will be used. 
		 */
		rid GetProcessSelectionSetID(  ) const;

		/**
		 * Which selection set should be processed. If the name is not found, all geometries 
		 * in the scene will be processed. If both selection set name and ID are set, 
		 * the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetProcessSelectionSetName( const char * value ) const;

		/**
		 * Which selection set should be processed. If the name is not found, all geometries 
		 * in the scene will be processed. If both selection set name and ID are set, 
		 * the name will be used. 
		 */
		spString GetProcessSelectionSetName(  ) const;

		/**
		 * The settings for creating the billboard cloud. 
		 * @return The settings for creating the billboard cloud. 
		 */
		spBillboardCloudSettings GetBillboardCloudSettings(  ) const;

		/**
		 * The settings for creating the flipbook. 
		 * @return The settings for creating the flipbook. 
		 */
		spFlipbookSettings GetFlipbookSettings(  ) const;

		/**
		 * The settings for the single view impostor. 
		 * @return The settings for the single view impostor. 
		 */
		spImpostorFromSingleViewSettings GetImpostorFromSingleViewSettings(  ) const;

	};

	/**
	 * ISurfaceMapper creates a mapping image between two user-defined geometries. 
	 * The mapper basically looks for the source geometry in the inverse normal direction 
	 * from the outwardly offset destination geometry, and maps pixels accordingly. 
	 * This means that you can modify the normals of the destination geometry to adjust 
	 * the search direction to your liking. The geometries can either be set as IGeometryDatas 
	 * or as the root nodes of scenes. If both are set, the scene is used. If only 
	 * a single source or a destination is set, or if the source and destination are 
	 * the same scene or geometry, the surface mapper will map the mesh onto itself. 
	 */
	class spSurfaceMapper : public spObject
	{
		public:
		spSurfaceMapper( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spSurfaceMapper();
		spSurfaceMapper( const spSurfaceMapper &p );
		spSurfaceMapper & operator=( const spSurfaceMapper &p );
		const spSurfaceMapper* operator->() const;
		spSurfaceMapper( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spSurfaceMapper is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ISurfaceMapper",type)==0) || (strcmp("spSurfaceMapper",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spSurfaceMapper 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spSurfaceMapper handle 
		 * @return a handle to the spSurfaceMapper object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spSurfaceMapper SafeCast(spObject other);

		/**
		 * The scene used for the surface transfer source. 
		 * @param value Is the source scene object. 
		 */
		void SetSourceScene( const spScene & value ) const;

		/**
		 * The scene used for the surface transfer source. 
		 */
		spScene GetSourceScene(  ) const;

		/**
		 * The scene used for the surface transfer destination. 
		 * @param value Is the destination scene object. 
		 */
		void SetDestinationScene( const spScene & value ) const;

		/**
		 * The scene used for the surface transfer destination. 
		 */
		spScene GetDestinationScene(  ) const;

		/**
		 * The source geometry data. 
		 * @param value Is the source geometry. 
		 */
		void SetSourceGeometry( const spGeometryData & value ) const;

		/**
		 * The source geometry data. 
		 */
		spGeometryData GetSourceGeometry(  ) const;

		/**
		 * The destination geometry data. 
		 * @param value Is the destination geometry. 
		 */
		void SetDestinationGeometry( const spGeometryData & value ) const;

		/**
		 * The destination geometry data. 
		 */
		spGeometryData GetDestinationGeometry(  ) const;

		/**
		 * The mapping image settings. Currently, the only applicable settings for this 
		 * mapper is texcoordlevel, texcoordname, size, and supersampling settings. 
		 * @return the mapping image settings object 
		 */
		spMappingImageSettings GetMappingImageSettings(  ) const;

		/**
		 * The mapping image. 
		 * @return the mapping image 
		 */
		spMappingImage GetMappingImage(  ) const;

		/**
		 * If set, the search direction from the destination mesh to the source mesh will 
		 * be determined by an internal normal calculation with the specified hard edge 
		 * angle. If false, the search direction will be determined by the existing normals 
		 * of the destination geometry. 
		 * @param value Is the desired flag value. 
		 */
		void SetRecalculateSearchDirection( bool value ) const;

		/**
		 * If set, the search direction from the destination mesh to the source mesh will 
		 * be determined by an internal normal calculation with the specified hard edge 
		 * angle. If false, the search direction will be determined by the existing normals 
		 * of the destination geometry. 
		 */
		bool GetRecalculateSearchDirection(  ) const;

		/**
		 * The hard edge angle in degrees. If RecalculateSearchDirection is on, the search 
		 * direction from the destination mesh to the source mesh will be determined by 
		 * an internal normal calculation with the specified hard edge angle. If false, 
		 * the search direction will be determined by the existing normals of the destination 
		 * geometry. 
		 * @param value Is the hard angle value. Value cannot be less than 0. Value cannot 
		 * be greater than 180. 
		 */
		void SetSearchDirectionHardEdgeAngle( real value ) const;

		/**
		 * The hard edge angle in degrees. If RecalculateSearchDirection is on, the search 
		 * direction from the destination mesh to the source mesh will be determined by 
		 * an internal normal calculation with the specified hard edge angle. If false, 
		 * the search direction will be determined by the existing normals of the destination 
		 * geometry. 
		 */
		real GetSearchDirectionHardEdgeAngle(  ) const;

		/**
		 * The search distance. If the source geometry is found within this distance from 
		 * the destination geometry, it will be mapped. If negative, it will be set to 
		 * a sane default internally, based on the mesh size. 
		 * @param value Is the search distance value. 
		 */
		void SetSearchDistance( real value ) const;

		/**
		 * The search distance. If the source geometry is found within this distance from 
		 * the destination geometry, it will be mapped. If negative, it will be set to 
		 * a sane default internally, based on the mesh size. 
		 */
		real GetSearchDistance(  ) const;

		/**
		 * The search offset. This is how far out from the destination geometry the search 
		 * for the source geometry will begin, propagating inwardly for the length of 
		 * SearchDistance. If negative, it will be set to a sane default internally, based 
		 * on the mesh size. 
		 * @param value Is the search offset value. 
		 */
		void SetSearchOffset( real value ) const;

		/**
		 * The search offset. This is how far out from the destination geometry the search 
		 * for the source geometry will begin, propagating inwardly for the length of 
		 * SearchDistance. If negative, it will be set to a sane default internally, based 
		 * on the mesh size. 
		 */
		real GetSearchOffset(  ) const;

		/**
		 * Runs the surface mapping. 
		 */
		void RunSurfaceMapping(  ) const;

	};

	/**
	 * The occlusion mesh processor creates a reconstruction of the input mesh from 
	 * its silhouette. This means concavities and internal geometry disappear. WARNING: 
	 * Experimental. Generates nice meshes, but currently very slow at high settings. 
	 * Recommended onscreensize ~100 
	 */
	class spOcclusionMeshProcessor : public spProcessingObject
	{
		public:
		spOcclusionMeshProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spOcclusionMeshProcessor();
		spOcclusionMeshProcessor( const spOcclusionMeshProcessor &p );
		spOcclusionMeshProcessor & operator=( const spOcclusionMeshProcessor &p );
		const spOcclusionMeshProcessor* operator->() const;
		spOcclusionMeshProcessor( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spOcclusionMeshProcessor is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IOcclusionMeshProcessor",type)==0) || (strcmp("spOcclusionMeshProcessor",type)==0) )
				return true;
			return spProcessingObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spOcclusionMeshProcessor 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spOcclusionMeshProcessor handle 
		 * @return a handle to the spOcclusionMeshProcessor object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spOcclusionMeshProcessor SafeCast(spObject other);

		/**
		 * The scene used for processing. All mesh nodes in the whole scene tree will 
		 * be replaced by one proxy mesh. Please note that internal references might be 
		 * modified by the processor. The caller should refresh any reference that is 
		 * cached outside the scene after running the processor. 
		 * @param value The scene node to which SceneRoot will be set. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The scene used for processing. All mesh nodes in the whole scene tree will 
		 * be replaced by one proxy mesh. Please note that internal references might be 
		 * modified by the processor. The caller should refresh any reference that is 
		 * cached outside the scene after running the processor. 
		 */
		spScene GetScene(  ) const;

		/**
		 * The settings for the OcclusionMeshProcessor. 
		 * @return The ImpostorProcessor settings object associated with the processor 
		 *  
		 */
		spOcclusionMeshSettings GetOcclusionMeshSettings(  ) const;

	};

	/**
	 * Settings for occlusion meshes 
	 */
	class spOcclusionMeshSettings : public spSettingsObject
	{
		public:
		spOcclusionMeshSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spOcclusionMeshSettings();
		spOcclusionMeshSettings( const spOcclusionMeshSettings &p );
		spOcclusionMeshSettings & operator=( const spOcclusionMeshSettings &p );
		const spOcclusionMeshSettings* operator->() const;
		spOcclusionMeshSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spOcclusionMeshSettings is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IOcclusionMeshSettings",type)==0) || (strcmp("spOcclusionMeshSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spOcclusionMeshSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spOcclusionMeshSettings handle 
		 * @return a handle to the spOcclusionMeshSettings object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spOcclusionMeshSettings SafeCast(spObject other);

		/**
		 * The onscreen size (px) of the output utility mesh. This will determine triangle 
		 * count and quality. 
		 * @param value The desired onscreen size. Value cannot be less than 20. Value 
		 * cannot be greater than 10000. 
		 */
		void SetOnScreenSize( unsigned int value ) const;

		/**
		 * The onscreen size (px) of the output utility mesh. This will determine triangle 
		 * count and quality. 
		 */
		unsigned int GetOnScreenSize(  ) const;

		/**
		 * The OnScreenErrorTolerance determines how large of an error that is tolerated, 
		 * in pixels. Valid range is 1-50. Since this setting is based around the absolute 
		 * worst-case scenario, you can usually get good results at relatively high tolerances. 
		 * @param value The desired OnScreenErrorTolerance. Value cannot be less than 
		 * 1. Value cannot be greater than 50. 
		 */
		void SetOnScreenErrorTolerance( unsigned int value ) const;

		/**
		 * The OnScreenErrorTolerance determines how large of an error that is tolerated, 
		 * in pixels. Valid range is 1-50. Since this setting is based around the absolute 
		 * worst-case scenario, you can usually get good results at relatively high tolerances. 
		 *  
		 */
		unsigned int GetOnScreenErrorTolerance(  ) const;

		/**
		 * Flips the winding of the triangles of the output, making frontfaces backfaces 
		 * and vice versa. Good for conservative z testing. 
		 * @param value The desired value of InvertOutputMesh. 
		 */
		void SetInvertOutputMesh( bool value ) const;

		/**
		 * Flips the winding of the triangles of the output, making frontfaces backfaces 
		 * and vice versa. Good for conservative z testing. 
		 */
		bool GetInvertOutputMesh(  ) const;

		/**
		 * Sets whether to transfer the bone weights and bone ids to the new geometry. 
		 * @param value The desired value of InvertOutputMesh. 
		 */
		void SetTransferSkinning( bool value ) const;

		/**
		 * Sets whether to transfer the bone weights and bone ids to the new geometry. 
		 *  
		 */
		bool GetTransferSkinning(  ) const;

		/**
		 * If set, cameras from the input scene will be used to define what angles the 
		 * occlusion mesh can be visible from, and optimize the output mesh accordingly. 
		 * Otherwise, the occlusion mesh will be assumed to be viewable from all directions. 
		 * @param value The desired value of UseCameras. 
		 */
		void SetUseCameras( bool value ) const;

		/**
		 * If set, cameras from the input scene will be used to define what angles the 
		 * occlusion mesh can be visible from, and optimize the output mesh accordingly. 
		 * Otherwise, the occlusion mesh will be assumed to be viewable from all directions. 
		 *  
		 */
		bool GetUseCameras(  ) const;

		/**
		 * The camera selection set id. This determines the selection set used for the 
		 * cameras for when UseCameras is on. A value of -1 uses all cameras in the scene. 
		 * @param value The desired OcclusionMode. 
		 */
		void SetCameraSelectionSetId( int value ) const;

		/**
		 * The camera selection set id. This determines the selection set used for the 
		 * cameras for when UseCameras is on. A value of -1 uses all cameras in the scene. 
		 *  
		 */
		int GetCameraSelectionSetId(  ) const;

		/**
		 * The camera selection set name. This determines the selection set used for the 
		 * cameras for when UseCameras is on. If set to null, all cameras in the scene 
		 * will be used. If both selection set name and ID are set, the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetCameraSelectionSetName( const char * value ) const;

		/**
		 * The camera selection set name. This determines the selection set used for the 
		 * cameras for when UseCameras is on. If set to null, all cameras in the scene 
		 * will be used. If both selection set name and ID are set, the name will be used. 
		 *  
		 */
		spString GetCameraSelectionSetName(  ) const;

		/**
		 * The occlusion mode. This decides if the processor generates an occluder (which 
		 * is smaller than the original mesh), an occludee (which is larger), or an output 
		 * that just tries to match the input. 
		 * @param value The desired OcclusionMode. 
		 */
		void SetOcclusionMode( Simplygon::EOcclusionMode value ) const;

		/**
		 * The occlusion mode. This decides if the processor generates an occluder (which 
		 * is smaller than the original mesh), an occludee (which is larger), or an output 
		 * that just tries to match the input. 
		 */
		Simplygon::EOcclusionMode GetOcclusionMode(  ) const;

	};

	/**
	 * Compares images. 
	 */
	class spImageComparer : public spObject
	{
		public:
		spImageComparer( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spImageComparer();
		spImageComparer( const spImageComparer &p );
		spImageComparer & operator=( const spImageComparer &p );
		const spImageComparer* operator->() const;
		spImageComparer( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spImageComparer is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IImageComparer",type)==0) || (strcmp("spImageComparer",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spImageComparer 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spImageComparer handle 
		 * @return a handle to the spImageComparer object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spImageComparer SafeCast(spObject other);

		/**
		 * The two images that will be compared. Both images needs to be of the same type 
		 * and the same size. 
		 * @param beforeImg The image data obejct for the before image. 
		 * @param afterImg The image data obejct for the after image. 
		 */
		void SetImages( const spImageData & beforeImg , const spImageData & afterImg ) const;

		/**
		 * The two image-masks for the comparison. Both image-masks needs to be of the 
		 * same size as the compared images (same item-count as the number of pixels in 
		 * the images). True means a pixel in the compared image contains a part of the 
		 * rendered object, false means the pixel is only "background" and does not need 
		 * to be compared. When a pixel in the mask is set to "true" in one image and 
		 * "false" in the other image, this means that there is a silhouette-error. How 
		 * much this error should be measured can be set with the "SilhouetteDifferenceError" 
		 * setting. If masks are not set, all pixels in the images will be compared as 
		 * is, without taking into account what part of the images are of the actual model 
		 * and which parts are just background. 
		 * @param beforeImgMask The bool array for the before image mask. 
		 * @param afterImgMask The bool array for the after image mask. 
		 */
		void SetImageMasks( const spBoolArray & beforeImgMask , const spBoolArray & afterImgMask ) const;

		/**
		 * Compares the images either set from "SetImages" or the two images set from 
		 * the "ImagePathBeforeImg" and "ImagePathAfterImg" strings. Will return -1 if 
		 * two images were not set (in the same manner) Returns -2 if images aren't of 
		 * the same size Returns -3 if images are not 2D images (ImageData supports 3D 
		 * images for example - don't try to use these) Returns -4 if ImgMasks are set, 
		 * but are not same size as the Before and AfterImg. Returns 0 on success. 
		 */
		int CompareImages(  ) const;

		/**
		 * The path to one of the images to be compared. Both images needs to be of the 
		 * same type and size for this to work. This can be used instead of setting the 
		 * images from the "SetImage" function, and will only be used if the "SetImage" 
		 * function was never used. 
		 * @param value The file path to the image. 
		 */
		void SetImagePathBeforeImg( const char * value ) const;

		/**
		 * The path to the other of the images to be compared. Both images needs to be 
		 * of the same type and size for this to work. This can be used instead of setting 
		 * the images from the "SetImage" function, and will only be used if the "SetImage" 
		 * function was never used. 
		 * @param value The file path to the image. 
		 */
		void SetImagePathAfterImg( const char * value ) const;

		/**
		 * The export-path for the resulting comparison. Can be used to get a visual feedback 
		 * of the results of the comparison. 
		 * @param value The file path to the image. 
		 */
		void SetImageDiffExportPath( const char * value ) const;

		/**
		 * The export-path for the most heavily impacted areas of the comparison. Can 
		 * be used to get a visual feedback of the results of the comparison, to see the 
		 * highlighted "problem areas". 
		 * @param value The file path to the image. 
		 */
		void SetDiffHighlightsExportPath( const char * value ) const;

		/**
		 * Returns the image for the resulting comparison. Can be used to get a visual 
		 * feedback of the results of the comparison. 
		 */
		spImageData GetImageDiff(  ) const;

		/**
		 * Returns the image for the most heavily impacted areas of the comparison. Can 
		 * be used to get a visual feedback of the results of the comparison, to see the 
		 * highlighted "problem areas". 
		 */
		spImageData GetDiffHighlights(  ) const;

		/**
		 * Returns the number of pixels that either the before- or the after-masks covers. 
		 * Can be good to know when looking at the TotalPixelError and HighlightAreaCoverage 
		 * numbers, to get a feel for the big the error of the image is relative to how 
		 * big the measured area actually was. 
		 */
		unsigned int GetTotalMaskCoverage(  ) const;

		/**
		 * Returns the size of the largest problem-areas. Preferably this value should 
		 * be not much larger than the 1-2 range, or the model should probably be further 
		 * away from the camera to get a good looking LOD-switch. 
		 */
		float GetMaxPixelError(  ) const;

		/**
		 * Return the sum of all pixel-errors of the whole image. Can be used to get a 
		 * feel for the over-all similarity between the two images. Especially when scaled 
		 * with the TotalMaskCoverage value. That way you can get the average pixel-error 
		 * of the model. 
		 */
		float GetTotalPixelError(  ) const;

		/**
		 * Returns the sum of all pixels that are in a "high-problem" area. Used together 
		 * with the TotalMaskCoverage value, this can let you know how large the problem-areas 
		 * are compared to the size of the model. 
		 */
		unsigned int GetHighlightAreaCoverage(  ) const;

		/**
		 * Decides how big of an impact the silhouette-difference between the two masks 
		 * will be. 0.0 means the silhouette difference will not be taken into account 
		 * at all, and 1.0 means it will be counted as maximum possible error. Default 
		 * value is set for the case where the background behind the model blends in somewhat 
		 * with the model and the difference in silhouette will not be fully seen. 
		 * @param value The value of silhouette-difference (0.0 - 1.0) 
		 */
		void SetSilhouetteDifferenceError( float value ) const;

	};

	/**
	 * Estimates a coarse recommended UV size (width and height) for a geometry based 
	 * on only its surface area and either the distance it is allowed to deviate or 
	 * its intended on screen size. The UVs are assumed to be unique i.e. not tiled/repeated. 
	 * RecommendedWidth and RecommendedHeight will only differ from each other if ForcePower2Texture 
	 * is enabled. 
	 */
	class spRecommendedTextureSizeCalculator : public spObject
	{
		public:
		spRecommendedTextureSizeCalculator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spRecommendedTextureSizeCalculator();
		spRecommendedTextureSizeCalculator( const spRecommendedTextureSizeCalculator &p );
		spRecommendedTextureSizeCalculator & operator=( const spRecommendedTextureSizeCalculator &p );
		const spRecommendedTextureSizeCalculator* operator->() const;
		spRecommendedTextureSizeCalculator( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spRecommendedTextureSizeCalculator is 
		 * a or is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IRecommendedTextureSizeCalculator",type)==0) || (strcmp("spRecommendedTextureSizeCalculator",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spRecommendedTextureSizeCalculator 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spRecommendedTextureSizeCalculator 
		 * handle 
		 * @return a handle to the spRecommendedTextureSizeCalculator object, if the cast 
		 * can be made, and a NULL handle otherwise 
		 */
		static spRecommendedTextureSizeCalculator SafeCast(spObject other);

		/**
		 * If true, then force the texture sizes to be a power of 2. 
		 * @param value The desired flag. 
		 */
		void SetForcePower2Texture( bool value ) const;

		/**
		 * If true, then force the texture sizes to be a power of 2. 
		 */
		bool GetForcePower2Texture(  ) const;

		/**
		 * The texture size multiplier for the automatic texture size. 
		 * @param value The desired multiplier. 
		 */
		void SetRecommendedTextureSizeMultiplier( real value ) const;

		/**
		 * The texture size multiplier for the automatic texture size. 
		 */
		real GetRecommendedTextureSizeMultiplier(  ) const;

		/**
		 * The recommended width calculated in CalculateRecommendedTextureSize() 
		 * @return The recommended width 
		 */
		unsigned int GetRecommendedWidth(  ) const;

		/**
		 * The recommended height calculated in CalculateRecommendedTextureSize() 
		 * @return The recommended height 
		 */
		unsigned int GetRecommendedHeight(  ) const;

		/**
		 * Calculates the recommended UV size based on the surface area of the geometry 
		 * and the allowed deviation. The recommended width and height can be fetched 
		 * with the GetRecommendedWidth() and GetRecommendedHeight() 
		 * @param geom The geometry for which to calculate the recommended UV size. 
		 * @param deviation The deviation value. 
		 */
		void CalculateBasedOnDeviation( const spGeometryData & geom , real deviation ) const;

		/**
		 * Calculates the recommended UV size based on the surface area of the geometry 
		 * and the intended on screen size (in pixels) The recommended width and height 
		 * can be fetched with the GetRecommendedWidth() and GetRecommendedHeight() 
		 * @param geom The geometry for which to calculate the recommended UV size. 
		 * @param onScreenSize The on screen size value. 
		 */
		void CalculateBasedOnOnScreenSize( const spGeometryData & geom , unsigned int onScreenSize ) const;

	};

	/**
	 * The PartRemover tool can identify unconnected sub-meshes, and remove meshes 
	 * that fall below a set size threshold. This size threshold can be set globally 
	 * for the entire geometry, or per-material to be able to remove things like decals 
	 * effectively. 
	 */
	class spPartRemover : public spObject
	{
		public:
		spPartRemover( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spPartRemover();
		spPartRemover( const spPartRemover &p );
		spPartRemover & operator=( const spPartRemover &p );
		const spPartRemover* operator->() const;
		spPartRemover( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spPartRemover is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IPartRemover",type)==0) || (strcmp("spPartRemover",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spPartRemover 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spPartRemover handle 
		 * @return a handle to the spPartRemover object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spPartRemover SafeCast(spObject other);

		/**
		 * Runs the part removal processing. 
		 */
		void RunPartRemoval(  ) const;

		/**
		 * The geometry data object to run the part removal on. If a scene is set, this 
		 * parameter is ignored by the reducer. 
		 * @param value The geometry data to be used for processing. 
		 */
		void SetGeometry( const spGeometryData & value ) const;

		/**
		 * The geometry data object to run the part removal on. If a scene is set, this 
		 * parameter is ignored by the reducer. 
		 */
		spGeometryData GetGeometry(  ) const;

		/**
		 * The scene object to run the part removal on. 
		 * @param value The scene data to be used for processing. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The scene object to run the part removal on. 
		 */
		spScene GetScene(  ) const;

		/**
		 * The size threshold to be used when removing parts. If SizeThreshold is equal 
		 * to, or greater than, the boundingbox radius of a part, then that part is removed. 
		 * If UsePerMaterialSizeThresholds is true, this value will be ignored and the 
		 * per-material values will be used instead. 
		 * @param value The new value of SizeThreshold. 
		 */
		void SetSizeThreshold( real value ) const;

		/**
		 * The size threshold to be used when removing parts. If SizeThreshold is equal 
		 * to, or greater than, the boundingbox radius of a part, then that part is removed. 
		 * If UsePerMaterialSizeThresholds is true, this value will be ignored and the 
		 * per-material values will be used instead. 
		 */
		real GetSizeThreshold(  ) const;

		/**
		 * The UsePerMaterialSizeThresholds flag. If true, the global SizeThreshold value 
		 * will be ignored and the per-material values in the PerMaterialSizeThresholds 
		 * will be used instead. 
		 * @param value The new value of UsePerMaterialSizeThresholds. 
		 */
		void SetUsePerMaterialSizeThresholds( bool value ) const;

		/**
		 * The UsePerMaterialSizeThresholds flag. If true, the global SizeThreshold value 
		 * will be ignored and the per-material values in the PerMaterialSizeThresholds 
		 * will be used instead. 
		 */
		bool GetUsePerMaterialSizeThresholds(  ) const;

		/**
		 * The per-material threshold array. These thresholds are mapped per material 
		 * ID in the geometrydata object if UsePerMaterialSizeThresholds is true. The 
		 * size and values in this array needs to be set up by the user, and material 
		 * IDs that fall outside the set array will be ignored. 
		 * @return The geometry data to be used for processing 
		 */
		spRealArray GetPerMaterialSizeThresholds(  ) const;

	};

	/**
	 * Welds vertices within the geometry or scene together. 
	 */
	class spWelder : public spProcessingObject
	{
		public:
		spWelder( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spWelder();
		spWelder( const spWelder &p );
		spWelder & operator=( const spWelder &p );
		const spWelder* operator->() const;
		spWelder( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spWelder is a or is a descendant of the 
		 * class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IWelder",type)==0) || (strcmp("spWelder",type)==0) )
				return true;
			return spProcessingObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spWelder 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spWelder handle 
		 * @return a handle to the spWelder object, if the cast can be made, and a NULL 
		 * handle otherwise 
		 */
		static spWelder SafeCast(spObject other);

		/**
		 * The scene. 
		 * @param value The scene object. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The scene. 
		 */
		spScene GetScene(  ) const;

		/**
		 * The ID of the selection set containing the meshes to weld If the ID is -1, 
		 * all meshes are selected. If both selection set name and ID are set, the name 
		 * will be used. 
		 * @param value The ID of the selection set to use. 
		 */
		void SetProcessSelectionSetID( rid value ) const;

		/**
		 * The ID of the selection set containing the meshes to weld If the ID is -1, 
		 * all meshes are selected. If both selection set name and ID are set, the name 
		 * will be used. 
		 */
		rid GetProcessSelectionSetID(  ) const;

		/**
		 * The now of the selection set containing the meshes to weld. If the name is 
		 * not found, all geometries in the scene will be processed. If both selection 
		 * set name and ID are set, the name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetProcessSelectionSetName( const char * value ) const;

		/**
		 * The now of the selection set containing the meshes to weld. If the name is 
		 * not found, all geometries in the scene will be processed. If both selection 
		 * set name and ID are set, the name will be used. 
		 */
		spString GetProcessSelectionSetName(  ) const;

		/**
		 * The distance below which the vertices will be welded. 
		 * @param value The weld distance. 
		 */
		void SetWeldDist( real value ) const;

		/**
		 * The distance below which the vertices will be welded. 
		 */
		real GetWeldDist(  ) const;

		/**
		 * Welds the geometry. 
		 * @param geom The geometry data object. 
		 */
		void WeldGeometry( const spGeometryData & geom ) const;

		/**
		 * If true, the welder will call CalculateExtents on the geometry before welding. 
		 * @param value The desired flag value. 
		 */
		void SetUpdateExtents( bool value ) const;

		/**
		 * If true, the welder will call CalculateExtents on the geometry before welding. 
		 *  
		 */
		bool GetUpdateExtents(  ) const;

		/**
		 * The number of progressive passes. 
		 * @param value The number of passes to perform. 
		 */
		void SetProgressivePasses( unsigned int value ) const;

		/**
		 * The number of progressive passes. 
		 */
		unsigned int GetProgressivePasses(  ) const;

		/**
		 * If IgnoreVertexLocks is true, then also vertices that are locked may be welded. 
		 * @param value The desired flag value. 
		 */
		void SetIgnoreVertexLocks( bool value ) const;

		/**
		 * If IgnoreVertexLocks is true, then also vertices that are locked may be welded. 
		 *  
		 */
		bool GetIgnoreVertexLocks(  ) const;

		/**
		 * If true, the welder will call Compact on the geometry after welding. 
		 * @param value The desired flag value. 
		 */
		void SetCompactMesh( bool value ) const;

		/**
		 * If true, the welder will call Compact on the geometry after welding. 
		 */
		bool GetCompactMesh(  ) const;

		/**
		 * If set, only vertices that are on the border are considered for the welding. 
		 * @param value The new OnlyBorders value. 
		 */
		void SetOnlyBorders( bool value ) const;

		/**
		 * If set, only vertices that are on the border are considered for the welding. 
		 *  
		 */
		bool GetOnlyBorders(  ) const;

		/**
		 * If set, only vertices that are within the same material are welded. Vertices 
		 * on material borders are locked. 
		 * @param value The desired flag value. 
		 */
		void SetOnlyWithinMaterial( bool value ) const;

		/**
		 * If set, only vertices that are within the same material are welded. Vertices 
		 * on material borders are locked. 
		 */
		bool GetOnlyWithinMaterial(  ) const;

		/**
		 * If set, only vertices that are within the same scene node are welded. 
		 * @param value The desired flag value. 
		 */
		void SetOnlyWithinSceneNode( bool value ) const;

		/**
		 * If set, only vertices that are within the same scene node are welded. 
		 */
		bool GetOnlyWithinSceneNode(  ) const;

		/**
		 * If set, only vertices that belong to different scene nodes are considered for 
		 * the welding. 
		 * @param value The desired flag value. 
		 */
		void SetOnlyBetweenSceneNodes( bool value ) const;

		/**
		 * If set, only vertices that belong to different scene nodes are considered for 
		 * the welding. 
		 */
		bool GetOnlyBetweenSceneNodes(  ) const;

	};

	/**
	 * Removes t-junctions by subdividing triangles and welding vertices 
	 */
	class spTJunctionEliminator : public spObject
	{
		public:
		spTJunctionEliminator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spTJunctionEliminator();
		spTJunctionEliminator( const spTJunctionEliminator &p );
		spTJunctionEliminator & operator=( const spTJunctionEliminator &p );
		const spTJunctionEliminator* operator->() const;
		spTJunctionEliminator( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spTJunctionEliminator is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("ITJunctionEliminator",type)==0) || (strcmp("spTJunctionEliminator",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spTJunctionEliminator 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spTJunctionEliminator handle 
		 * @return a handle to the spTJunctionEliminator object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spTJunctionEliminator SafeCast(spObject other);

		/**
		 * The scene. 
		 * @param value The scene object. 
		 */
		void SetScene( const spScene & value ) const;

		/**
		 * The scene. 
		 */
		spScene GetScene(  ) const;

		/**
		 * Removes the t-junctions in the geometry data. 
		 * @param geom The geometry data object. 
		 */
		void RemoveTJunctionsInGeometry( const spGeometryData & geom ) const;

		/**
		 * Removes the t-junctions in the set scene, processing each sub-geometry individually. 
		 *  
		 */
		void RemoveTJunctions(  ) const;

		/**
		 * The distance, below which, the t-junctions will be welded. 
		 * @param value The welding distance. 
		 */
		void SetWeldDist( real value ) const;

		/**
		 * The distance, below which, the t-junctions will be welded. 
		 */
		real GetWeldDist(  ) const;

		/**
		 * If set, only vertices that are on the boundary between two different objects 
		 * are considered for the welding. 
		 * @param value The desired value of the flag. 
		 */
		void SetOnlyObjectBoundaryFlag( bool value ) const;

		/**
		 * If set, only vertices that are on the boundary between two different objects 
		 * are considered for the welding. 
		 */
		bool GetOnlyObjectBoundaryFlag(  ) const;

		/**
		 * The ID of the SelectionSet containing the meshes to weld If the ID is -1, all 
		 * meshes are selected. If both ID and Name are set, name will be used. 
		 * @param value The ID of the selection set to use. 
		 */
		void SetProcessSelectionSetID( rid value ) const;

		/**
		 * The ID of the SelectionSet containing the meshes to weld If the ID is -1, all 
		 * meshes are selected. If both ID and Name are set, name will be used. 
		 */
		rid GetProcessSelectionSetID(  ) const;

		/**
		 * Which SelectionSet should be processed. If Name is not found, all geometries 
		 * in the scene will be processed. If both ID and Name are set, name will be used. 
		 * @param value The desired SelectionSet name. 
		 */
		void SetProcessSelectionSetName( const char * value ) const;

		/**
		 * Which SelectionSet should be processed. If Name is not found, all geometries 
		 * in the scene will be processed. If both ID and Name are set, name will be used. 
		 *  
		 */
		spString GetProcessSelectionSetName(  ) const;

		/**
		 * If set, only vertices that are within the same material are welded. Vertices 
		 * on material borders are locked. 
		 * @param value The desired flag value. 
		 */
		void SetOnlyWithinMaterialFlag( bool value ) const;

		/**
		 * If set, only vertices that are within the same material are welded. Vertices 
		 * on material borders are locked. 
		 */
		bool GetOnlyWithinMaterialFlag(  ) const;

		/**
		 * If set, only vertices that are within the same scene node are welded. 
		 * @param value The desired flag value. 
		 */
		void SetOnlyWithinSceneNode( bool value ) const;

		/**
		 * If set, only vertices that are within the same scene node are welded. 
		 */
		bool GetOnlyWithinSceneNode(  ) const;

	};

	/**
	 * Pipeline is the interface for a processing pipeline, which applies a number 
	 * of processing operations on an input scene to generate an output scene. The 
	 * input and output scenes can be any file format supported by Simplygon. 
	 */
	class spPipeline : public spObject
	{
		public:
		spPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spPipeline();
		spPipeline( const spPipeline &p );
		spPipeline & operator=( const spPipeline &p );
		const spPipeline* operator->() const;
		spPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spPipeline is a or is a descendant of 
		 * the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IPipeline",type)==0) || (strcmp("spPipeline",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spPipeline handle 
		 * @return a handle to the spPipeline object, if the cast can be made, and a NULL 
		 * handle otherwise 
		 */
		static spPipeline SafeCast(spObject other);

		/**
		 * Run the pipeline on the scene loaded from the given input scene file, and optionally 
		 * write the resulting scene to the given output scene file. If the scene is not 
		 * written to file it can be accessed with the GetProcessedScene method. When 
		 * using cascaded pipelines with RunSceneFromFile and the output file format does 
		 * not support cascaded scenes (OBJ, FBX, glTF), only the scene from the first 
		 * top level pipeline is exported to the output file. 
		 * @param input_scene The file path of the input scene file. Value cannot be equal 
		 * to null. 
		 * @param output_scene The file path of the output scene file (can be null) 
		 * @param run_mode Pipeline run mode controlling if pipeline run in this or separate/distributed 
		 * process. Valid values are the SG_PIPELINE_RUN* constants (from PipelineRunMode 
		 * enum). 
		 * @return The process status. 
		 */
		Simplygon::EProcessStatus RunSceneFromFile( const char * input_scene , const char * output_scene , Simplygon::EPipelineRunMode run_mode ) const;

		/**
		 * Run the pipeline on the given scene, which will be modified and contain the 
		 * result of the pipeline when the function returns. Please note that internal 
		 * references might be modified by the pipeline. The caller should refresh any 
		 * reference that is cached outside the scene after running the pipeline. 
		 * @param scene The scene to run the pipeline on. 
		 * @param run_mode Pipeline run mode controlling if pipeline run in this or separate/distributed 
		 * process. Valid values are the SG_PIPELINE_RUN* constants (from PipelineRunMode 
		 * enum). 
		 * @return The process status. 
		 */
		Simplygon::EProcessStatus RunScene( const spScene & scene , Simplygon::EPipelineRunMode run_mode ) const;

		/**
		 * Add a material caster. Material casting requires the mapping image generation 
		 * to be enabled (SetGenerateMappingImage in MappingImageSettings returned by 
		 * GetMappingImageSettings). If called with a material index set to non-zero, 
		 * the mapping image for the corresponding output material will be used. See GetOutputMaterialCount/SetOutputMaterialCount 
		 * in MappingImageSettings. 
		 * @param MaterialCaster The material caster to add. 
		 * @param MaterialIndex The material index the caster will be associated with, 
		 * 0 for first material. 
		 */
		void AddMaterialCaster( const spMaterialCaster & MaterialCaster , unsigned int MaterialIndex ) const;

		/**
		 * Add a material caster by type name. Type name should undecorated base name 
		 * of caster, for example "Color", "AmbientOcclusion", "Normal" etc. Material 
		 * casting requires the mapping image generation to be enabled (SetGenerateMappingImage 
		 * in MappingImageSettings returned by GetMappingImageSettings). If called with 
		 * a material index set to non-zero, the mapping image for the corresponding output 
		 * material will be used. See GetOutputMaterialCount/SetOutputMaterialCount in 
		 * MappingImageSettings. 
		 * @param CasterType Caster type name, like "Color", "AmbientOcclusion", "Normal" 
		 * or similar. 
		 * @param MaterialIndex The material index the caster will be associated with, 
		 * 0 for first material. 
		 * @return The new material caster 
		 */
		spMaterialCaster AddMaterialCasterByType( const char * CasterType , unsigned int MaterialIndex ) const;

		/**
		 * The material casters for the pipeline. 
		 * @return All material casters 
		 */
		spObjectCollection GetMaterialCasters(  ) const;

		/**
		 * Get the number of material casters for the pipeline. 
		 * @return Number of material casters 
		 */
		unsigned int GetMaterialCasterCount(  ) const;

		/**
		 * Get the material caster in the pipeline for the given index, which must be 
		 * less than the material caster count. 
		 * @param index Material caster index, must be less than the material caster count. 
		 * Value cannot be less than 0. Value cannot be greater than the value returned 
		 * by GetMaterialCasterCount(). 
		 * @return Material caster for the given index 
		 */
		spMaterialCaster GetMaterialCasterByIndex( unsigned int index ) const;

		/**
		 * The settings for the pipeline. 
		 * @return Settings object for pipeline 
		 */
		spPipelineSettings GetPipelineSettings(  ) const;

		/**
		 * Set a named parameter boolean value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (invalid parameter path or mismatching 
		 * parameter type) 
		 */
		bool SetBoolParameter( const char * name , bool value ) const;

		/**
		 * Set a named parameter integer value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (invalid parameter path or mismatching 
		 * parameter type) 
		 */
		bool SetIntParameter( const char * name , int value ) const;

		/**
		 * Set a named parameter unsigned integer value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (invalid parameter path or mismatching 
		 * parameter type) 
		 */
		bool SetUIntParameter( const char * name , unsigned int value ) const;

		/**
		 * Set a named parameter floating point value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (invalid parameter path or mismatching 
		 * parameter type) 
		 */
		bool SetDoubleParameter( const char * name , double value ) const;

		/**
		 * Set a named parameter string value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (invalid parameter path or mismatching 
		 * parameter type) 
		 */
		bool SetStringParameter( const char * name , const char * value ) const;

		/**
		 * Set a named parameter enum value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @param value New value for parameter. 
		 * @param valueEnumType Value type of enum for parameter value. 
		 * @return True if successful, false if error (invalid parameter path or mismatching 
		 * parameter type) 
		 */
		bool SetEnumParameter( const char * name , int value , Simplygon::ESettingValueType valueEnumType ) const;

		/**
		 * Set a named parameter value including parameter path. The string will be parsed 
		 * with best effort according to the parameter data type. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @param value New value for parameter. 
		 * @return True if successful, false if error (invalid parameter path or mismatching 
		 * parameter type) 
		 */
		bool SetParameterFromString( const char * name , const char * value ) const;

		/**
		 * Get a named parameter boolean value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @return Parameter value, or false if invalid parameter path or mismatching 
		 * type 
		 */
		bool GetBoolParameter( const char * name ) const;

		/**
		 * Get a named parameter integer value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @return Parameter value, or 0 if invalid parameter path or mismatching type 
		 *  
		 */
		int GetIntParameter( const char * name ) const;

		/**
		 * Get a named parameter unsigned integer value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @return Parameter value, or 0 if invalid parameter path or mismatching type 
		 *  
		 */
		unsigned int GetUIntParameter( const char * name ) const;

		/**
		 * Get a named parameter floating point value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @return Parameter value, or 0 if invalid parameter path or mismatching type 
		 *  
		 */
		double GetDoubleParameter( const char * name ) const;

		/**
		 * Get a named parameter string value including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @return Parameter value, or null pointer if invalid parameter path or mismatching 
		 * type 
		 */
		spString GetStringParameter( const char * name ) const;

		/**
		 * Get a named parameter enum value as int including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @return Parameter value, or null pointer if invalid parameter path or mismatching 
		 * type 
		 */
		int GetEnumParameter( const char * name ) const;

		/**
		 * Get a named parameter data type including parameter path. 
		 * @param name Parameter path separated with forward slash, like "/RemeshingProcessor/Reduction/MergeGeometries". 
		 *  
		 * @return Parameter data type (see SettingValueType enum), or Invalid if invalid 
		 * parameter path 
		 */
		Simplygon::ESettingValueType GetParameterType( const char * name ) const;

		/**
		 * The mapping image settings object containing the mapping image settings for 
		 * this pipeline. The return value will be null if the pipeline does not use material 
		 * casting and mapping images. 
		 * @return The mapping image settings 
		 */
		spMappingImageSettings GetMappingImageSettings(  ) const;

		/**
		 * The mapping image from the performed remeshing. Should only be called after 
		 * the pipeline has been run. The return value will be null if the pipeline does 
		 * not use material casting and mapping images. 
		 * @param materialIndex The index of the output material to get the mapping image 
		 * for. 
		 * @return The mapping image for the corresponding output material 
		 */
		spMappingImage GetMappingImage( unsigned int materialIndex ) const;

		/**
		 * The cascaded child pipeline object for the given index. 
		 * @param index The index of the cascaded child pipeline. 
		 * @return The cascaded child pipeline 
		 */
		spPipeline GetCascadedPipelineByIndex( unsigned int index ) const;

		/**
		 * Add a cascaded child pipeline. The child pipeline will execute on the scene 
		 * output from this pipeline. 
		 * @param pipeline The pipeline to add as a cascaded child pipeline. 
		 */
		void AddCascadedPipeline( const spPipeline & pipeline ) const;

		/**
		 * Remove a cascaded child pipeline. 
		 * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
		 *  
		 */
		void RemoveCascadedPipeline( const spPipeline & pipeline ) const;

		/**
		 * Get number of cascaded child pipelines. 
		 * @return The number of cascaded child pipelines 
		 */
		unsigned int GetCascadedPipelineCount(  ) const;

		/**
		 * The resulting scene from the last execution of this pipeline. 
		 * @return The processed scene 
		 */
		spScene GetProcessedScene(  ) const;

		/**
		 * Returns the current progress of the pipeline as a value between 0 and 100. 
		 * @return The current progress of the pipeline as a value between 0 and 100. 
		 *  
		 */
		real GetPercentDone(  ) const;

		/**
		 * Get the names of all currently active selection sets used by this pipeline, 
		 * based on the current settings 
		 * @param sets The array recieving unique names of all selection sets being used 
		 * by this pipeline. Value cannot be equal to null. 
		 */
		void GetActiveSelectionSets( const spStringArray & sets ) const;

		/**
		 * Create a new clone of the pipeline, copying all settings and material casters 
		 * as well as creating new copies of all cascaded pipelines. 
		 */
		spPipeline NewCopy(  ) const;

	};

	/**
	 * Control object to launch pipelines in batches, both locally and distributed 
	 */
	class spPipelineBatch : public spObject
	{
		public:
		spPipelineBatch( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spPipelineBatch();
		spPipelineBatch( const spPipelineBatch &p );
		spPipelineBatch & operator=( const spPipelineBatch &p );
		const spPipelineBatch* operator->() const;
		spPipelineBatch( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spPipelineBatch is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IPipelineBatch",type)==0) || (strcmp("spPipelineBatch",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spPipelineBatch 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spPipelineBatch handle 
		 * @return a handle to the spPipelineBatch object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spPipelineBatch SafeCast(spObject other);

		/**
		 * The path to the directory where data is serialized. All pipelines and scenes 
		 * are serialized in this path as temporary storage. If the path is not explicitly 
		 * set the pipeline batch will create a temporary directory which will be removed 
		 * once the pipeline batch object is deallocated, discarding all processed scenes. 
		 * @param path The path to use to serialize temporary storage of pipelines and 
		 * scenes. 
		 */
		void SetStoragePath( const char * path ) const;

		/**
		 * The path to the directory where data is serialized. All pipelines and scenes 
		 * are serialized in this path as temporary storage. If the path is not explicitly 
		 * set the pipeline batch will create a temporary directory which will be removed 
		 * once the pipeline batch object is deallocated, discarding all processed scenes. 
		 *  
		 */
		spString GetStoragePath(  ) const;

		/**
		 * Queue a pipeline to process the given scene. Use the returned handle to retrieve 
		 * the processed scene once the run call completes. The pipeline and scene will 
		 * be serialized in this function call and any updates to pipeline settings and/or 
		 * scene data will NOT affect the execution in this pipeline batch. 
		 * @param pipeline The pipeline to execute. Value cannot be equal to null. 
		 * @param scene The scene to process. Value cannot be equal to null. 
		 * @return Handle used to retrieve the processed scene. 
		 */
		unsigned int Queue( const spPipeline & pipeline , const spScene & scene ) const;

		/**
		 * Queue execution of a pipeline on a scene, both given as external files. Use 
		 * the returned handle to retrieve the processed scene once the run call completes. 
		 * @param pipeline The pipeline file to execute. Value cannot be equal to null. 
		 *  
		 * @param scene The scene file to process. Value cannot be equal to null. 
		 * @return Handle used to retrieve the processed scene. 
		 */
		unsigned int QueueFile( const char * pipeline , const char * scene ) const;

		/**
		 * Run processing on all queued pipelines using the given run mode, either local 
		 * or distributed, and clear the queue. 
		 * @param runMode The run mode for all pipelines. 
		 * @return The status of the process. 
		 */
		Simplygon::EProcessStatus Run( Simplygon::EPipelineRunMode runMode ) const;

		/**
		 * Load the output scene for the given queue handle. For a cascaded pipeline, 
		 * use GetCascadedSceneCount/GetCascadedSceneForIndex on the returned scene to 
		 * get the corresponding cascaded scene output. 
		 * @param handle The handle for the scene as returned by a call to Queue/QueueFile. 
		 *  
		 * @return The processed scene. 
		 */
		spScene LoadProcessedScene( unsigned int handle ) const;

		/**
		 * Get the number of pipelines queued in the pipeline batch. 
		 * @return Number of pipelines queued in the pipeline batch. 
		 */
		unsigned int GetBatchCount(  ) const;

		/**
		 * Get the path of the serialized pipeline for the given batch index. 
		 * @param index The batch index. 
		 * @return The file path of the serialized pipeline for the given batch index. 
		 *  
		 */
		spString GetPipelinePath( unsigned int index ) const;

		/**
		 * Get the path of the serialized input scene for the given batch index. 
		 * @param index The batch index. 
		 * @return The file path of the serialized input scene for the given batch index. 
		 *  
		 */
		spString GetScenePath( unsigned int index ) const;

		/**
		 * Get the path of the serialized output scene for the given batch index. 
		 * @param index The batch index. 
		 * @return The file path of the serialized output scene for the given batch index. 
		 *  
		 */
		spString GetOutputPath( unsigned int index ) const;

		/**
		 * Manually clear the queue. 
		 */
		void Clear(  ) const;

		/**
		 * The run mode to use on cascaded pipelines when executing the pipeline batch. 
		 * @param mode The run mode to use for cascaded pipelines. 
		 */
		void SetCascadedRunMode( Simplygon::EPipelineRunMode mode ) const;

		/**
		 * The run mode to use on cascaded pipelines when executing the pipeline batch. 
		 *  
		 */
		Simplygon::EPipelineRunMode GetCascadedRunMode(  ) const;

		/**
		 * The path for the batch tool used when executing pipelines in a new/distributed 
		 * process. This should be the path to the directory where the SimplygonBatch 
		 * executable is located. If the tool is in the system path this setting should 
		 * be an empty string. 
		 * @param value Path where SimplygonBatch executable is located. 
		 */
		void SetSimplygonBatchPath( const char * value ) const;

		/**
		 * The path for the batch tool used when executing pipelines in a new/distributed 
		 * process. This should be the path to the directory where the SimplygonBatch 
		 * executable is located. If the tool is in the system path this setting should 
		 * be an empty string. 
		 */
		spString GetSimplygonBatchPath(  ) const;

	};

	class spPipelineSerializer : public spObject
	{
		public:
		spPipelineSerializer( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spPipelineSerializer();
		spPipelineSerializer( const spPipelineSerializer &p );
		spPipelineSerializer & operator=( const spPipelineSerializer &p );
		const spPipelineSerializer* operator->() const;
		spPipelineSerializer( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spPipelineSerializer is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IPipelineSerializer",type)==0) || (strcmp("spPipelineSerializer",type)==0) )
				return true;
			return spObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spPipelineSerializer 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spPipelineSerializer handle 
		 * @return a handle to the spPipelineSerializer object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spPipelineSerializer SafeCast(spObject other);

		/**
		 * Load the pipeline definition to the given file and create a pipeline object 
		 * as defined in this file, including settings. 
		 * @param path The file path of the input pipeline definition. Value cannot be 
		 * equal to null. 
		 * @return A pipeline object with settings restored 
		 */
		spPipeline LoadPipelineFromFile( const char * path ) const;

		/**
		 * Save the pipeline definition and settings to the given file, which can be used 
		 * to restore the pipeline through the LoadPipelineFromFile method. Note that 
		 * pipeline files are NOT meant for storage, only as a transient transfer format 
		 * between processes and hosts. Do NOT store pipeline files for later use, as 
		 * there is no guarantee that pipeline files will be compatible between different 
		 * versions of Simplygon. 
		 * @param path The file path of the output pipeline definition. 
		 * @param pipeline The pipeline object to save. 
		 */
		void SavePipelineToFile( const char * path , const spPipeline & pipeline ) const;

		/**
		 * Load the pipeline batch definition to the given file and create a pipeline 
		 * batch object as defined in this file. 
		 * @param path The file path of the input pipeline batch definition. Value cannot 
		 * be equal to null. 
		 * @return A pipeline batch object 
		 */
		spPipelineBatch LoadPipelineBatchFromFile( const char * path ) const;

		/**
		 * Save the pipeline batch definition and associated pipelines and scenes to the 
		 * given file, which can be used to restore the pipeline batch through the LoadPipelineBatchFromFile 
		 * method. Associated pipelines and scenes will be stored in the same directory 
		 * as the pipeline batch file. Note that pipeline files are NOT meant for storage, 
		 * only as a transient transfer format between processes and hosts. Do NOT store 
		 * pipeline files for later use, as there is no guarantee that pipeline files 
		 * will be compatible between different versions of Simplygon. 
		 * @param path The file path of the output pipeline batch definition. 
		 * @param batch The pipeline batch object to save. 
		 */
		void SavePipelineBatchToFile( const char * path , const spPipelineBatch & batch ) const;

	};

	/**
	 * ReductionPipeline provides a pipeline for a single reduction processor to be 
	 * applied on the input scene. 
	 */
	class spReductionPipeline : public spPipeline
	{
		public:
		spReductionPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spReductionPipeline();
		spReductionPipeline( const spReductionPipeline &p );
		spReductionPipeline & operator=( const spReductionPipeline &p );
		const spReductionPipeline* operator->() const;
		spReductionPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spReductionPipeline is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IReductionPipeline",type)==0) || (strcmp("spReductionPipeline",type)==0) )
				return true;
			return spPipeline::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spReductionPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spReductionPipeline handle 
		 * @return a handle to the spReductionPipeline object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spReductionPipeline SafeCast(spObject other);

		/**
		 * The reduction settings object containing the reduction settings for this pipeline. 
		 * @return The reduction settings 
		 */
		spReductionSettings GetReductionSettings(  ) const;

		/**
		 * The repair settings object containing the repair settings for this pipeline. 
		 * @return The repair settings 
		 */
		spRepairSettings GetRepairSettings(  ) const;

		/**
		 * The normal calculation settings object containing the normal calculation settings 
		 * for this pipeline. 
		 * @return The normal calculation settings 
		 */
		spNormalCalculationSettings GetNormalCalculationSettings(  ) const;

		/**
		 * The settings for handling visibility weights. Visibility settings contains 
		 * the parameters for how to compute the visibility of a scene and how to use 
		 * it. 
		 * @return The visibility settings 
		 */
		spVisibilitySettings GetVisibilitySettings(  ) const;

		/**
		 * The bone settings object containing the bone settings for this pipeline. 
		 * @return The bone settings 
		 */
		spBoneSettings GetBoneSettings(  ) const;

		/**
		 * The vertex weight settings object for this pipeline. 
		 * @return The vertex weight settings 
		 */
		spVertexWeightSettings GetVertexWeightSettings(  ) const;

		/**
		 * Returns the max deviation reached for the last processing. 
		 * @return The max deviation of the last processing 
		 */
		real GetResultDeviation(  ) const;

	};

	/**
	 * RemeshingLegacyPipeline provides a pipeline for a single remeshing legacy processor 
	 * to be applied on the input scene. 
	 */
	class spRemeshingLegacyPipeline : public spPipeline
	{
		public:
		spRemeshingLegacyPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spRemeshingLegacyPipeline();
		spRemeshingLegacyPipeline( const spRemeshingLegacyPipeline &p );
		spRemeshingLegacyPipeline & operator=( const spRemeshingLegacyPipeline &p );
		const spRemeshingLegacyPipeline* operator->() const;
		spRemeshingLegacyPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spRemeshingLegacyPipeline is a or is 
		 * a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IRemeshingLegacyPipeline",type)==0) || (strcmp("spRemeshingLegacyPipeline",type)==0) )
				return true;
			return spPipeline::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spRemeshingLegacyPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spRemeshingLegacyPipeline handle 
		 * @return a handle to the spRemeshingLegacyPipeline object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spRemeshingLegacyPipeline SafeCast(spObject other);

		/**
		 * The remeshing settings object containing the remeshing settings for this pipeline. 
		 * @return The remeshing settings 
		 */
		spRemeshingLegacySettings GetRemeshingLegacySettings(  ) const;

		/**
		 * The settings for handling visibility weights. Visibility settings contains 
		 * the parameters for how to compute the visibility of a scene and how to use 
		 * it. 
		 * @return The visibility settings 
		 */
		spVisibilitySettings GetVisibilitySettings(  ) const;

		/**
		 * The bone settings object containing the bone settings for this pipeline. 
		 * @return The bone settings 
		 */
		spBoneSettings GetBoneSettings(  ) const;

	};

	/**
	 * AggregationPipeline provides a pipeline for a single aggregation processor to 
	 * be applied on the input scene. 
	 */
	class spAggregationPipeline : public spPipeline
	{
		public:
		spAggregationPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spAggregationPipeline();
		spAggregationPipeline( const spAggregationPipeline &p );
		spAggregationPipeline & operator=( const spAggregationPipeline &p );
		const spAggregationPipeline* operator->() const;
		spAggregationPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spAggregationPipeline is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IAggregationPipeline",type)==0) || (strcmp("spAggregationPipeline",type)==0) )
				return true;
			return spPipeline::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spAggregationPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spAggregationPipeline handle 
		 * @return a handle to the spAggregationPipeline object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spAggregationPipeline SafeCast(spObject other);

		/**
		 * The aggregation settings object for this pipeline. 
		 */
		spAggregationSettings GetAggregationSettings(  ) const;

		/**
		 * The settings for handling visibility weights. Visibility settings contains 
		 * the parameters for how to compute the visibility of a scene and how to use 
		 * it. 
		 */
		spVisibilitySettings GetVisibilitySettings(  ) const;

		/**
		 * The geometry culling settings object for this pipeline. 
		 */
		spGeometryCullingSettings GetGeometryCullingSettings(  ) const;

		/**
		 * The vertex weight settings object for this pipeline. 
		 */
		spVertexWeightSettings GetVertexWeightSettings(  ) const;

		/**
		 * The settings object to create an extra set of TexCoord used for light mapping. 
		 *  
		 */
		spGenerateLightmapTexCoordSettings GetGenerateLightmapTexCoordSettings(  ) const;

	};

	/**
	 * PipelineSettings is the interface used to manage settings for a pipeline 
	 */
	class spPipelineSettings : public spSettingsObject
	{
		public:
		spPipelineSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spPipelineSettings();
		spPipelineSettings( const spPipelineSettings &p );
		spPipelineSettings & operator=( const spPipelineSettings &p );
		const spPipelineSettings* operator->() const;
		spPipelineSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spPipelineSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IPipelineSettings",type)==0) || (strcmp("spPipelineSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spPipelineSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spPipelineSettings handle 
		 * @return a handle to the spPipelineSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spPipelineSettings SafeCast(spObject other);

		/**
		 * The path where the pipeline will save any created textures from material casters. 
		 * A relative path will be treated as relative to the scene file output path if 
		 * the pipeline is executed with scene file paths (RunSceneFromFile), or from 
		 * the current working directory if the pipeline is executed with a scene object 
		 * (RunScene). The directory must exist, it will not be created. 
		 * @param value Path where created textures will be saved. 
		 */
		void SetTextureOutputPath( const char * value ) const;

		/**
		 * The path where the pipeline will save any created textures from material casters. 
		 * A relative path will be treated as relative to the scene file output path if 
		 * the pipeline is executed with scene file paths (RunSceneFromFile), or from 
		 * the current working directory if the pipeline is executed with a scene object 
		 * (RunScene). The directory must exist, it will not be created. 
		 */
		spString GetTextureOutputPath(  ) const;

		/**
		 * The path for the batch tool used when executing pipelines in a new/distributed 
		 * process. This should be the path to the directory where the SimplygonBatch 
		 * executable is located. If the tool is in the system path this setting should 
		 * be an empty string. 
		 * @param value Path where SimplygonBatch executable is located. 
		 */
		void SetSimplygonBatchPath( const char * value ) const;

		/**
		 * The path for the batch tool used when executing pipelines in a new/distributed 
		 * process. This should be the path to the directory where the SimplygonBatch 
		 * executable is located. If the tool is in the system path this setting should 
		 * be an empty string. 
		 */
		spString GetSimplygonBatchPath(  ) const;

		/**
		 * The name of the output material. If the output material count is greater than 
		 * one, an index separated with an underscore will be appended to the material 
		 * names, such that MyMaterial becomes MyMaterial_0, MyMaterial_1 and so on. 
		 * @param value Output material name. 
		 */
		void SetOutputMaterialName( const char * value ) const;

		/**
		 * The name of the output material. If the output material count is greater than 
		 * one, an index separated with an underscore will be appended to the material 
		 * names, such that MyMaterial becomes MyMaterial_0, MyMaterial_1 and so on. 
		 */
		spString GetOutputMaterialName(  ) const;

		/**
		 * Generate unique material names if set to true, by replacing the default scheme 
		 * of appending a sequential material index to the name with appending a GUID. 
		 * This will make the material names unique each time the pipeline is run, even 
		 * on the same input scene. 
		 * @param value Flag controlling if material names are unique or sequential. 
		 */
		void SetOutputUniqueMaterialNames( bool value ) const;

		/**
		 * Generate unique material names if set to true, by replacing the default scheme 
		 * of appending a sequential material index to the name with appending a GUID. 
		 * This will make the material names unique each time the pipeline is run, even 
		 * on the same input scene. 
		 */
		bool GetOutputUniqueMaterialNames(  ) const;

		/**
		 * Set flag to control if output file formats that support embedding referenced 
		 * resources (like textures) should do so. 
		 * @param value Embed flag. 
		 */
		void SetEmbedReferences( bool value ) const;

		/**
		 * Set flag to control if output file formats that support embedding referenced 
		 * resources (like textures) should do so. 
		 */
		bool GetEmbedReferences(  ) const;

		/**
		 * Set flag to control if this pipeline step is an intermediate step where the 
		 * processed scene is only used as input to the next cascaded pipeline and not 
		 * for export or further access. This will discard any processed data once all 
		 * cascaded pipelines are done, and the scene will be ignored during export. Useful 
		 * if you want to group two pipelines together for one output, for example an 
		 * aggregation and a reduction pipeline where you only want the output from the 
		 * combined aggregation + reduction. 
		 * @param value Intermediate step flag. 
		 */
		void SetIntermediateStep( bool value ) const;

		/**
		 * Set flag to control if this pipeline step is an intermediate step where the 
		 * processed scene is only used as input to the next cascaded pipeline and not 
		 * for export or further access. This will discard any processed data once all 
		 * cascaded pipelines are done, and the scene will be ignored during export. Useful 
		 * if you want to group two pipelines together for one output, for example an 
		 * aggregation and a reduction pipeline where you only want the output from the 
		 * combined aggregation + reduction. 
		 */
		bool GetIntermediateStep(  ) const;

		/**
		 * Set run mode to use for cascaded child pipelines. 
		 * @param value Run mode for cascaded child pipelines. 
		 */
		void SetCascadedRunMode( Simplygon::EPipelineRunMode value ) const;

		/**
		 * Set run mode to use for cascaded child pipelines. 
		 */
		Simplygon::EPipelineRunMode GetCascadedRunMode(  ) const;

	};

	/**
	 * RemeshingPipeline provides a pipeline for a single remeshing processor to be 
	 * applied on the input scene. 
	 */
	class spRemeshingPipeline : public spPipeline
	{
		public:
		spRemeshingPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spRemeshingPipeline();
		spRemeshingPipeline( const spRemeshingPipeline &p );
		spRemeshingPipeline & operator=( const spRemeshingPipeline &p );
		const spRemeshingPipeline* operator->() const;
		spRemeshingPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spRemeshingPipeline is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IRemeshingPipeline",type)==0) || (strcmp("spRemeshingPipeline",type)==0) )
				return true;
			return spPipeline::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spRemeshingPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spRemeshingPipeline handle 
		 * @return a handle to the spRemeshingPipeline object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spRemeshingPipeline SafeCast(spObject other);

		/**
		 * The remeshing settings object containing the remeshing settings for this pipeline. 
		 * @return The remeshing settings 
		 */
		spRemeshingSettings GetRemeshingSettings(  ) const;

		/**
		 * The bone settings object containing the bone settings for this pipeline. 
		 * @return The bone settings 
		 */
		spBoneSettings GetBoneSettings(  ) const;

		/**
		 * The settings for handling visibility weights. 
		 * @return The geometry culling settings for this pipeline 
		 */
		spGeometryCullingSettings GetGeometryCullingSettings(  ) const;

		/**
		 * The settings for handling visibility weights. Visibility settings contains 
		 * the parameters for how to compute the visibility of a scene and how to use 
		 * it. 
		 * @return The visibility settings 
		 */
		spVisibilitySettings GetVisibilitySettings(  ) const;

	};

	/**
	 * PassthroughPipeline provides an empty pipeline for creating a cascading pipeline 
	 * using a single dummy root node. It does not process the input scene in any way. 
	 */
	class spPassthroughPipeline : public spPipeline
	{
		public:
		spPassthroughPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spPassthroughPipeline();
		spPassthroughPipeline( const spPassthroughPipeline &p );
		spPassthroughPipeline & operator=( const spPassthroughPipeline &p );
		const spPassthroughPipeline* operator->() const;
		spPassthroughPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spPassthroughPipeline is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IPassthroughPipeline",type)==0) || (strcmp("spPassthroughPipeline",type)==0) )
				return true;
			return spPipeline::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spPassthroughPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spPassthroughPipeline handle 
		 * @return a handle to the spPassthroughPipeline object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spPassthroughPipeline SafeCast(spObject other);

	};

	/**
	 * GeometryDataCaster is used to cast original GeometryData information to an image 
	 * using mapping image 
	 */
	class spGeometryDataCaster : public spMaterialCaster
	{
		public:
		spGeometryDataCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGeometryDataCaster();
		spGeometryDataCaster( const spGeometryDataCaster &p );
		spGeometryDataCaster & operator=( const spGeometryDataCaster &p );
		const spGeometryDataCaster* operator->() const;
		spGeometryDataCaster( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGeometryDataCaster is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGeometryDataCaster",type)==0) || (strcmp("spGeometryDataCaster",type)==0) )
				return true;
			return spMaterialCaster::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGeometryDataCaster 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGeometryDataCaster handle 
		 * @return a handle to the spGeometryDataCaster object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spGeometryDataCaster SafeCast(spObject other);

		/**
		 * The GeometryDataCaster settings object. 
		 * @return The caster settings object. 
		 */
		spGeometryDataCasterSettings GetGeometryDataCasterSettings(  ) const;

	};

	/**
	 * GeometryDataCasterSettings is the interface used to manage settings for GeometryDataCaster 
	 */
	class spGeometryDataCasterSettings : public spMaterialCasterSettings
	{
		public:
		spGeometryDataCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGeometryDataCasterSettings();
		spGeometryDataCasterSettings( const spGeometryDataCasterSettings &p );
		spGeometryDataCasterSettings & operator=( const spGeometryDataCasterSettings &p );
		const spGeometryDataCasterSettings* operator->() const;
		spGeometryDataCasterSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGeometryDataCasterSettings is a or 
		 * is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGeometryDataCasterSettings",type)==0) || (strcmp("spGeometryDataCasterSettings",type)==0) )
				return true;
			return spMaterialCasterSettings::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGeometryDataCasterSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGeometryDataCasterSettings handle 
		 * @return a handle to the spGeometryDataCasterSettings object, if the cast can 
		 * be made, and a NULL handle otherwise 
		 */
		static spGeometryDataCasterSettings SafeCast(spObject other);

		/**
		 * The GeometryDataFieldType setting, which specifies what field type to cast 
		 * in the GeometryDataCaster. 
		 * @param FieldType The field type to set. Specified in the GeometryDataFieldTypes 
		 * enum. 
		 */
		void SetGeometryDataFieldType( Simplygon::EGeometryDataFieldType FieldType ) const;

		/**
		 * The GeometryDataFieldType setting, which specifies what field type to cast 
		 * in the GeometryDataCaster. 
		 */
		Simplygon::EGeometryDataFieldType GetGeometryDataFieldType(  ) const;

		/**
		 * The GeometryDataFieldIndex setting, which specifies what field index to cast 
		 * in the GeometryDataCaster, for fields where it is applicable (TexCoords, Tangents, 
		 * Bitangents and Colors). The setting is ignored for other field types. 
		 * @param FieldIndex Value the field index for the selected field type, if applicable. 
		 * Allowed max value depend on the field type selected. Value cannot be less than 
		 * 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetGeometryDataFieldIndex( unsigned int FieldIndex ) const;

		/**
		 * The GeometryDataFieldIndex setting, which specifies what field index to cast 
		 * in the GeometryDataCaster, for fields where it is applicable (TexCoords, Tangents, 
		 * Bitangents and Colors). The setting is ignored for other field types. 
		 */
		unsigned int GetGeometryDataFieldIndex(  ) const;

		/**
		 * The inferior/minimum value of field values to map onto the image data range 
		 * (0->1). The minimum value will be represented by 0 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @param value The minimum value for the red channel. Value cannot be less than 
		 * -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetMappingInfR( real value ) const;

		/**
		 * The inferior/minimum value of field values to map onto the image data range 
		 * (0->1). The minimum value will be represented by 0 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 */
		real GetMappingInfR(  ) const;

		/**
		 * The Superior/maximum value of field values to map onto the image data range 
		 * (0->1). The maximum value will be represented by 1 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @param value The maximum value for the red channel. Value cannot be less than 
		 * -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetMappingSupR( real value ) const;

		/**
		 * The Superior/maximum value of field values to map onto the image data range 
		 * (0->1). The maximum value will be represented by 1 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 */
		real GetMappingSupR(  ) const;

		/**
		 * The inferior/minimum value of field values to map onto the image data range 
		 * (0->1). The minimum value will be represented by 0 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @param value The minimum value for the green channel. Value cannot be less 
		 * than -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetMappingInfG( real value ) const;

		/**
		 * The inferior/minimum value of field values to map onto the image data range 
		 * (0->1). The minimum value will be represented by 0 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 */
		real GetMappingInfG(  ) const;

		/**
		 * The Superior/maximum value of field values to map onto the image data range 
		 * (0->1). The maximum value will be represented by 1 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @param value The maximum value for the green channel. Value cannot be less 
		 * than -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetMappingSupG( real value ) const;

		/**
		 * The Superior/maximum value of field values to map onto the image data range 
		 * (0->1). The maximum value will be represented by 1 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 */
		real GetMappingSupG(  ) const;

		/**
		 * The inferior/minimum value of field values to map onto the image data range 
		 * (0->1). The minimum value will be represented by 0 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @param value The minimum value for the blue channel. Value cannot be less than 
		 * -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetMappingInfB( real value ) const;

		/**
		 * The inferior/minimum value of field values to map onto the image data range 
		 * (0->1). The minimum value will be represented by 0 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 */
		real GetMappingInfB(  ) const;

		/**
		 * The Superior/maximum value of field values to map onto the image data range 
		 * (0->1). The maximum value will be represented by 1 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @param value The maximum value for the blue channel. Value cannot be less than 
		 * -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetMappingSupB( real value ) const;

		/**
		 * The Superior/maximum value of field values to map onto the image data range 
		 * (0->1). The maximum value will be represented by 1 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 */
		real GetMappingSupB(  ) const;

		/**
		 * Property the inferior/minimum value of field values to map onto the image data 
		 * range (0->1). The minimum value will be represented by 0 in the image. Note 
		 * that the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @param value The minimum value for the alpha channel. Value cannot be less 
		 * than -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetMappingInfA( real value ) const;

		/**
		 * Property the inferior/minimum value of field values to map onto the image data 
		 * range (0->1). The minimum value will be represented by 0 in the image. Note 
		 * that the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 */
		real GetMappingInfA(  ) const;

		/**
		 * Property the Superior/maximum value of field values to map onto the image data 
		 * range (0->1). The maximum value will be represented by 1 in the image. Note 
		 * that the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @param value The maximum value for the alpha channel. Value cannot be less 
		 * than -REAL_MAX. Value cannot be greater than REAL_MAX. 
		 */
		void SetMappingSupA( real value ) const;

		/**
		 * Property the Superior/maximum value of field values to map onto the image data 
		 * range (0->1). The maximum value will be represented by 1 in the image. Note 
		 * that the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 */
		real GetMappingSupA(  ) const;

		/**
		 * The inferior/minimum value of field values to map onto the image data range 
		 * (0->1). The minimum value will be represented by 0 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @param vec_realInputDataPtr The minimum value for each channel (RGBA, 4 values). 
		 * Value cannot be less than -REAL_MAX,-REAL_MAX,-REAL_MAX,-REAL_MAX. Value cannot 
		 * be greater than REAL_MAX,REAL_MAX,REAL_MAX,REAL_MAX. 
		 */
		void SetMappingInf( const real *vec_realInputDataPtr ) const;

		/**
		 * The inferior/minimum value of field values to map onto the image data range 
		 * (0->1). The minimum value will be represented by 0 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @return The returned data array. The array contains 4 items. 
		 */
		spRealData GetMappingInf(  ) const;

		/**
		 * The Superior/maximum value of field values to map onto the image data range 
		 * (0->1). The maximum value will be represented by 1 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @param vec_realInputDataPtr The maximum value for each channel (RGBA, 4 values). 
		 * Value cannot be less than -REAL_MAX,-REAL_MAX,-REAL_MAX,-REAL_MAX. Value cannot 
		 * be greater than REAL_MAX,REAL_MAX,REAL_MAX,REAL_MAX. 
		 */
		void SetMappingSup( const real *vec_realInputDataPtr ) const;

		/**
		 * The Superior/maximum value of field values to map onto the image data range 
		 * (0->1). The maximum value will be represented by 1 in the image. Note that 
		 * the mapping is only used for real value fields, not id-based fields, which 
		 * cannot be scaled accurately. 
		 * @return The returned data array. The array contains 4 items. 
		 */
		spRealData GetMappingSup(  ) const;

	};

	/**
	 * This settings object contains all settings related to how the user-set weighting 
	 * field "VertexWeights" is setup and used in different contexts. The values in 
	 * the field can be considered an "importance" factor. Generally, weights set to 
	 * 1.0 are handled normally, values >1.0 are given greater importance, and values 
	 * <1.0 are given less. These weights can either be manually set in the input geometry 
	 * data or converted from vertex color sets using the WeightsFromColor settings. 
	 * See the documentation of the WeightsFromColorMode property to see the details 
	 * of how color intensity is mapped to vertex weight. Vertex weights can be used 
	 * to reduce more or less aggressively on different parts of the mesh, or used 
	 * to scale UV allocation in the parameterizers to give more or less texture area 
	 * to different areas. 
	 */
	class spVertexWeightSettings : public spSettingsObject
	{
		public:
		spVertexWeightSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spVertexWeightSettings();
		spVertexWeightSettings( const spVertexWeightSettings &p );
		spVertexWeightSettings & operator=( const spVertexWeightSettings &p );
		const spVertexWeightSettings* operator->() const;
		spVertexWeightSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spVertexWeightSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IVertexWeightSettings",type)==0) || (strcmp("spVertexWeightSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spVertexWeightSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spVertexWeightSettings handle 
		 * @return a handle to the spVertexWeightSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spVertexWeightSettings SafeCast(spObject other);

		/**
		 * If set, and using the reduction processor, the reduction will be weighted based 
		 * on the weights in the "VertexWeights" vertex field. 
		 * @param value The desired flag value. 
		 */
		void SetUseVertexWeightsInReducer( bool value ) const;

		/**
		 * If set, and using the reduction processor, the reduction will be weighted based 
		 * on the weights in the "VertexWeights" vertex field. 
		 */
		bool GetUseVertexWeightsInReducer(  ) const;

		/**
		 * If set, and generating new texcoords using either the parameterizeror the chart 
		 * aggregator, the relative sizes of the output charts will be scaled using the 
		 * weights in the "VertexWeights" vertex field. 
		 * @param value The desired flag value. 
		 */
		void SetUseVertexWeightsInTexcoordGenerator( bool value ) const;

		/**
		 * If set, and generating new texcoords using either the parameterizeror the chart 
		 * aggregator, the relative sizes of the output charts will be scaled using the 
		 * weights in the "VertexWeights" vertex field. 
		 */
		bool GetUseVertexWeightsInTexcoordGenerator(  ) const;

		/**
		 * If the name of an existing vertex color field in the input geometry is set 
		 * here, the existing VertexWeights field will be overwritten by a set created 
		 * by converting the selected color field according to the other WeightsFromColor 
		 * settings in this settings object. If both ColorName and the corresponding ColorLevel 
		 * is set, the processors will prioritize the name. 
		 * @param value The desired vertex color field name. 
		 */
		void SetWeightsFromColorName( const char * value ) const;

		/**
		 * If the name of an existing vertex color field in the input geometry is set 
		 * here, the existing VertexWeights field will be overwritten by a set created 
		 * by converting the selected color field according to the other WeightsFromColor 
		 * settings in this settings object. If both ColorName and the corresponding ColorLevel 
		 * is set, the processors will prioritize the name. 
		 */
		spString GetWeightsFromColorName(  ) const;

		/**
		 * If the index of an existing vertex color field in the input geometry is set 
		 * here, the existing VertexWeights field will be overwritten by a set created 
		 * by converting the selected color field according to the other WeightsFromColor 
		 * settings in this settings object. If both this and the corresponding ColorName 
		 * is set, the processors will prioritize the name. 
		 * @param value The desired vertex color field level. Value cannot be less than 
		 * -1. 
		 */
		void SetWeightsFromColorLevel( rid value ) const;

		/**
		 * If the index of an existing vertex color field in the input geometry is set 
		 * here, the existing VertexWeights field will be overwritten by a set created 
		 * by converting the selected color field according to the other WeightsFromColor 
		 * settings in this settings object. If both this and the corresponding ColorName 
		 * is set, the processors will prioritize the name. 
		 */
		rid GetWeightsFromColorLevel(  ) const;

		/**
		 * If converting vertex colors to weights, this setting controls which color component 
		 * is used to create the weights. 
		 * @param value The desired WeightsFromColorComponent. 
		 */
		void SetWeightsFromColorComponent( Simplygon::EColorComponent value ) const;

		/**
		 * If converting vertex colors to weights, this setting controls which color component 
		 * is used to create the weights. 
		 */
		Simplygon::EColorComponent GetWeightsFromColorComponent(  ) const;

		/**
		 * If converting vertex colors to weights, this setting controls the max and min 
		 * resulting vertex weights generated by the input color. 
		 * @param value The new WeightsFromColorMultiplier. Value cannot be less than 
		 * 0.0. Value cannot be greater than 10.0. 
		 */
		void SetWeightsFromColorMultiplier( real value ) const;

		/**
		 * If converting vertex colors to weights, this setting controls the max and min 
		 * resulting vertex weights generated by the input color. 
		 */
		real GetWeightsFromColorMultiplier(  ) const;

		/**
		 * If converting vertex colors to weights, this setting along with WeightsFromColorMultiplier 
		 * controls how to map the RGBA intensity between 0-1 to weights. Standard mode 
		 * maps color intensity [0-1] to vertex weight [1/Multiplier - Multiplier]. High 
		 * mode maps color intensity [0-1] to vertex weight [1 - Multiplier]. Low mode 
		 * maps color intensity [0-1] to vertex weight [1/Multiplier - 1]. 
		 * @param value The new WeightsFromColorMode. 
		 */
		void SetWeightsFromColorMode( Simplygon::EWeightsFromColorMode value ) const;

		/**
		 * If converting vertex colors to weights, this setting along with WeightsFromColorMultiplier 
		 * controls how to map the RGBA intensity between 0-1 to weights. Standard mode 
		 * maps color intensity [0-1] to vertex weight [1/Multiplier - Multiplier]. High 
		 * mode maps color intensity [0-1] to vertex weight [1 - Multiplier]. Low mode 
		 * maps color intensity [0-1] to vertex weight [1/Multiplier - 1]. 
		 */
		Simplygon::EWeightsFromColorMode GetWeightsFromColorMode(  ) const;

	};

	/**
	 * GenerateLightmapTexCoordSettings is the interface used to manage light map uv 
	 * generation. 
	 */
	class spGenerateLightmapTexCoordSettings : public spSettingsObject
	{
		public:
		spGenerateLightmapTexCoordSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spGenerateLightmapTexCoordSettings();
		spGenerateLightmapTexCoordSettings( const spGenerateLightmapTexCoordSettings &p );
		spGenerateLightmapTexCoordSettings & operator=( const spGenerateLightmapTexCoordSettings &p );
		const spGenerateLightmapTexCoordSettings* operator->() const;
		spGenerateLightmapTexCoordSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spGenerateLightmapTexCoordSettings is 
		 * a or is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IGenerateLightmapTexCoordSettings",type)==0) || (strcmp("spGenerateLightmapTexCoordSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spGenerateLightmapTexCoordSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spGenerateLightmapTexCoordSettings 
		 * handle 
		 * @return a handle to the spGenerateLightmapTexCoordSettings object, if the cast 
		 * can be made, and a NULL handle otherwise 
		 */
		static spGenerateLightmapTexCoordSettings SafeCast(spObject other);

		/**
		 * Property for whether to generate an extra set of TexCoords for LightMapping. 
		 * @param value The new value. 
		 */
		void SetGenerateLightmapTexCoord( bool value ) const;

		/**
		 * Property for whether to generate an extra set of TexCoords for LightMapping. 
		 *  
		 */
		bool GetGenerateLightmapTexCoord(  ) const;

		/**
		 * The texture coordinate level used for storing the LightMap UVs. The texcoord 
		 * name has priority over level. If neither name or level is set then output would 
		 * be level 0. 
		 * @param value The desired texture coordinate level. Value cannot be less than 
		 * -1. Value cannot be greater than INT_MAX. 
		 */
		void SetLightmapTexCoordLevel( rid value ) const;

		/**
		 * The texture coordinate level used for storing the LightMap UVs. The texcoord 
		 * name has priority over level. If neither name or level is set then output would 
		 * be level 0. 
		 */
		rid GetLightmapTexCoordLevel(  ) const;

		/**
		 * The texture coordinate level name used for storing the generated Lightmap UVs. 
		 * If this is not set will default to level. If neither name or level is set then 
		 * output would be level 0. 
		 * @param value The TexCoord level name. 
		 * @return The current texture coordinate level name 
		 */
		void SetLightmapTexCoordName( const char * value ) const;

		/**
		 * The texture coordinate level name used for storing the generated Lightmap UVs. 
		 * If this is not set will default to level. If neither name or level is set then 
		 * output would be level 0. 
		 * @return The current texture coordinate level name Default value is nullptr 
		 *  
		 */
		spString GetLightmapTexCoordName(  ) const;

		/**
		 * Determines which method to use when aggregating the UVs. TextureSizeProportions 
		 * - Aggregated UV charts will be scaled to keep their relative pixel density 
		 * relative to all other UV charts. The user can still set the size of the output 
		 * texture maps. SurfaceArea - Aggregated UV charts will have their size set based 
		 * on its actual geometrical size. OriginalPixelDensity - The combined atlas will 
		 * be resized to fit each chart so that all charts retain the same amount of pixels 
		 * as they originally had. This will override any manually set texture size. UVSizeProportions 
		 * - Aggregated UV charts will have their size set based on its original UV size, 
		 * disregarding the size of the texture they are used in.");. 
		 * @param value The ChartAggregaotrMode value to use. 
		 */
		void SetChartAggregatorMode( Simplygon::EChartAggregatorMode value ) const;

		/**
		 * Determines which method to use when aggregating the UVs. TextureSizeProportions 
		 * - Aggregated UV charts will be scaled to keep their relative pixel density 
		 * relative to all other UV charts. The user can still set the size of the output 
		 * texture maps. SurfaceArea - Aggregated UV charts will have their size set based 
		 * on its actual geometrical size. OriginalPixelDensity - The combined atlas will 
		 * be resized to fit each chart so that all charts retain the same amount of pixels 
		 * as they originally had. This will override any manually set texture size. UVSizeProportions 
		 * - Aggregated UV charts will have their size set based on its original UV size, 
		 * disregarding the size of the texture they are used in.");. 
		 */
		Simplygon::EChartAggregatorMode GetChartAggregatorMode(  ) const;

		/**
		 * The width of the texture of the output mapping image. 
		 * @param value The value to which Width will be set. Value cannot be less than 
		 * 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetTextureWidth( unsigned int value ) const;

		/**
		 * The width of the texture of the output mapping image. 
		 */
		unsigned int GetTextureWidth(  ) const;

		/**
		 * The height of the texture of the output mapping image. 
		 * @param value The value to which Height will be set. Value cannot be less than 
		 * 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetTextureHeight( unsigned int value ) const;

		/**
		 * The height of the texture of the output mapping image. 
		 */
		unsigned int GetTextureHeight(  ) const;

		/**
		 * The minimum number of pixels between charts of the output mapping image. 
		 * @param value The value to which GutterSpace will be set. Value cannot be less 
		 * than 0. Value cannot be greater than UINT_MAX. 
		 */
		void SetGutterSpace( unsigned int value ) const;

		/**
		 * The minimum number of pixels between charts of the output mapping image. 
		 */
		unsigned int GetGutterSpace(  ) const;

	};

	/**
	 * Settings for the chart aggregator. 
	 */
	class spChartAggregatorSettings : public spSettingsObject
	{
		public:
		spChartAggregatorSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spChartAggregatorSettings();
		spChartAggregatorSettings( const spChartAggregatorSettings &p );
		spChartAggregatorSettings & operator=( const spChartAggregatorSettings &p );
		const spChartAggregatorSettings* operator->() const;
		spChartAggregatorSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spChartAggregatorSettings is a or is 
		 * a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IChartAggregatorSettings",type)==0) || (strcmp("spChartAggregatorSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spChartAggregatorSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spChartAggregatorSettings handle 
		 * @return a handle to the spChartAggregatorSettings object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spChartAggregatorSettings SafeCast(spObject other);

		/**
		 * Determines which method to use when aggregating the UVs. TextureSizeProportions 
		 * - Aggregated UV charts will be scaled to keep their relative pixel density 
		 * relative to all other UV charts. The user can still set the size of the output 
		 * texture maps. SurfaceArea - Aggregated UV charts will have their size set based 
		 * on its actual geometrical size. OriginalPixelDensity - The combined atlas will 
		 * be resized to fit each chart so that all charts retain the same amount of pixels 
		 * as they originally had. This will override any manually set texture size. UVSizeProportions 
		 * - Aggregated UV charts will have their size set based on its original UV size, 
		 * disregarding the size of the texture they are used in. 
		 * @param value The ChartAggregatorMode value to use. 
		 */
		void SetChartAggregatorMode( Simplygon::EChartAggregatorMode value ) const;

		/**
		 * Determines which method to use when aggregating the UVs. TextureSizeProportions 
		 * - Aggregated UV charts will be scaled to keep their relative pixel density 
		 * relative to all other UV charts. The user can still set the size of the output 
		 * texture maps. SurfaceArea - Aggregated UV charts will have their size set based 
		 * on its actual geometrical size. OriginalPixelDensity - The combined atlas will 
		 * be resized to fit each chart so that all charts retain the same amount of pixels 
		 * as they originally had. This will override any manually set texture size. UVSizeProportions 
		 * - Aggregated UV charts will have their size set based on its original UV size, 
		 * disregarding the size of the texture they are used in. 
		 */
		Simplygon::EChartAggregatorMode GetChartAggregatorMode(  ) const;

		/**
		 * If multiple UV charts overlap and have the same material, SurfaceAreaScale 
		 * specifies which of those instances determines the the output scale. It is only 
		 * valid when the ChartAggregatorMode is SurfaceArea and SeparateOverlappingCharts 
		 * is false. 
		 * @param value The SurfaceAreaScale value to use. 
		 */
		void SetSurfaceAreaScale( Simplygon::ESurfaceAreaScale value ) const;

		/**
		 * If multiple UV charts overlap and have the same material, SurfaceAreaScale 
		 * specifies which of those instances determines the the output scale. It is only 
		 * valid when the ChartAggregatorMode is SurfaceArea and SeparateOverlappingCharts 
		 * is false. 
		 */
		Simplygon::ESurfaceAreaScale GetSurfaceAreaScale(  ) const;

		/**
		 * Only used when the TexCoordGeneratorType is ChartAggregator. Set the texture 
		 * coordinate level to get charts from. If the ChartAggregatorOriginalTexCoordName 
		 * ha been set, the ChartAggregatorOriginalTexCoordLevel is not used. 
		 * @param value The desired texture coordinate level. Value cannot be less than 
		 * -1. Value cannot be greater than INT_MAX. 
		 */
		void SetOriginalTexCoordLevel( rid value ) const;

		/**
		 * Only used when the TexCoordGeneratorType is ChartAggregator. Set the texture 
		 * coordinate level to get charts from. If the ChartAggregatorOriginalTexCoordName 
		 * ha been set, the ChartAggregatorOriginalTexCoordLevel is not used. 
		 */
		rid GetOriginalTexCoordLevel(  ) const;

		/**
		 * Only used when the TexCoordGeneratorType is ChartAggregator. Set the name of 
		 * the texture coordinate level to get charts from. If not set, it will use the 
		 * ChartAggregatorOriginalTexCoordLevel (index) instead. 
		 * @param value The desired texture coordinate level name. 
		 */
		void SetOriginalTexCoordName( const char * value ) const;

		/**
		 * Only used when the TexCoordGeneratorType is ChartAggregator. Set the name of 
		 * the texture coordinate level to get charts from. If not set, it will use the 
		 * ChartAggregatorOriginalTexCoordLevel (index) instead. 
		 */
		spString GetOriginalTexCoordName(  ) const;

		/**
		 * Only used when the TexCoordGeneratorType is ChartAggregator. If set, charts 
		 * that are overlapping in the original texture coords will be separated. 
		 * @param value The value to which ChartAggregatorSeparateOverlappingCharts is 
		 * set. 
		 */
		void SetSeparateOverlappingCharts( bool value ) const;

		/**
		 * Only used when the TexCoordGeneratorType is ChartAggregator. If set, charts 
		 * that are overlapping in the original texture coords will be separated. 
		 */
		bool GetSeparateOverlappingCharts(  ) const;

		/**
		 * Only used when the TexCoordGeneratorType is ChartAggregator. Set ChartAggregatorKeepOriginalChartProportionsFromChannel 
		 * to an SG_MATERIAL_CHANNEL_[...]. This channel determines which texture channel 
		 * to look at when determining which chart proportions to keep. 
		 * @param value The new ChartAggregatorKeepOriginalChartProportionsFromChannel 
		 * value. 
		 */
		void SetOriginalChartProportionsChannel( const char * value ) const;

		/**
		 * Only used when the TexCoordGeneratorType is ChartAggregator. Set ChartAggregatorKeepOriginalChartProportionsFromChannel 
		 * to an SG_MATERIAL_CHANNEL_[...]. This channel determines which texture channel 
		 * to look at when determining which chart proportions to keep. 
		 */
		spString GetOriginalChartProportionsChannel(  ) const;

		/**
		 * Only used when the TexCoordGeneratorType is ChartAggregator. If ChartAggregatorLockUVRotation 
		 * is enabled, only the original UV rotation will be used. Otherwise 4 rotations 
		 * are used (90 degree rotations). 
		 * @param value The new LockUVRotation. 
		 */
		void SetLockUVRotation( bool value ) const;

		/**
		 * Only used when the TexCoordGeneratorType is ChartAggregator. If ChartAggregatorLockUVRotation 
		 * is enabled, only the original UV rotation will be used. Otherwise 4 rotations 
		 * are used (90 degree rotations). 
		 */
		bool GetLockUVRotation(  ) const;

	};

	/**
	 * Settings for the parameterizer. 
	 */
	class spParameterizerSettings : public spSettingsObject
	{
		public:
		spParameterizerSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spParameterizerSettings();
		spParameterizerSettings( const spParameterizerSettings &p );
		spParameterizerSettings & operator=( const spParameterizerSettings &p );
		const spParameterizerSettings* operator->() const;
		spParameterizerSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spParameterizerSettings is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IParameterizerSettings",type)==0) || (strcmp("spParameterizerSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spParameterizerSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spParameterizerSettings handle 
		 * @return a handle to the spParameterizerSettings object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spParameterizerSettings SafeCast(spObject other);

		/**
		 * Only used when the TexCoordGeneratorType is Parameterizer. The maximum allowed 
		 * texture stretch. Range 0->1. 
		 * @param value The desired maximum allowed texture stretch. Value cannot be less 
		 * than 0. Value cannot be greater than 1. 
		 */
		void SetMaxStretch( real value ) const;

		/**
		 * Only used when the TexCoordGeneratorType is Parameterizer. The maximum allowed 
		 * texture stretch. Range 0->1. 
		 */
		real GetMaxStretch(  ) const;

		/**
		 * Only used when the TexCoordGeneratorType is Parameterizer. The importance value 
		 * for trying to have as large and few charts as possible. The closer the value 
		 * is to 1, the slower it is. Having 0 means no extra focus will be put on reducing 
		 * the number of charts. Having value 1 means maximum focus will be put on reducing 
		 * the number of charts and thereby increasing the size of the charts. 
		 * @param value The desired large charts importance value. Value cannot be less 
		 * than 0. Value cannot be greater than 1. 
		 */
		void SetLargeChartsImportance( real value ) const;

		/**
		 * Only used when the TexCoordGeneratorType is Parameterizer. The importance value 
		 * for trying to have as large and few charts as possible. The closer the value 
		 * is to 1, the slower it is. Having 0 means no extra focus will be put on reducing 
		 * the number of charts. Having value 1 means maximum focus will be put on reducing 
		 * the number of charts and thereby increasing the size of the charts. 
		 */
		real GetLargeChartsImportance(  ) const;

	};

	/**
	 * Settings for the ImpostorType: BillboardCloud 
	 */
	class spBillboardCloudSettings : public spSettingsObject
	{
		public:
		spBillboardCloudSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spBillboardCloudSettings();
		spBillboardCloudSettings( const spBillboardCloudSettings &p );
		spBillboardCloudSettings & operator=( const spBillboardCloudSettings &p );
		const spBillboardCloudSettings* operator->() const;
		spBillboardCloudSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spBillboardCloudSettings is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IBillboardCloudSettings",type)==0) || (strcmp("spBillboardCloudSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spBillboardCloudSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spBillboardCloudSettings handle 
		 * @return a handle to the spBillboardCloudSettings object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spBillboardCloudSettings SafeCast(spObject other);

		/**
		 * Specifies how the impostors should be mapped to the scene. 
		 * @param value The BillboardMode value to use. 
		 */
		void SetBillboardMode( Simplygon::EBillboardMode value ) const;

		/**
		 * Specifies how the impostors should be mapped to the scene. 
		 */
		Simplygon::EBillboardMode GetBillboardMode(  ) const;

		/**
		 * Determines whether to prioritize generating vertical billboards which means 
		 * they will be optimized to be viewed from the side. Otherwise, if the geometry 
		 * in the input scene is mostly facing upwards/downwards then the generated billboards 
		 * will also be facing upwards/downwards which makes them not well suited to being 
		 * viewed from the side. 
		 * @param value The new value. 
		 * @return The current value. 
		 */
		void SetFavorVerticalPlanes( bool value ) const;

		/**
		 * Determines whether to prioritize generating vertical billboards which means 
		 * they will be optimized to be viewed from the side. Otherwise, if the geometry 
		 * in the input scene is mostly facing upwards/downwards then the generated billboards 
		 * will also be facing upwards/downwards which makes them not well suited to being 
		 * viewed from the side. 
		 * @return The current value. Default value is false 
		 */
		bool GetFavorVerticalPlanes(  ) const;

		/**
		 * Only applicable if BillboardMode: Foliage. Determines if the scene is intended 
		 * to be viewed from both sides without back face culling. 
		 * @param value The new value. 
		 * @return The current value. 
		 */
		void SetTwoSided( bool value ) const;

		/**
		 * Only applicable if BillboardMode: Foliage. Determines if the scene is intended 
		 * to be viewed from both sides without back face culling. 
		 * @return The current value. Default value is true 
		 */
		bool GetTwoSided(  ) const;

		/**
		 * Determines whether to prioritize accurately mapping triangles with higher visibility 
		 * to billboards. 
		 * @param value The new value. 
		 * @return The current value. 
		 */
		void SetUseVisibilityWeights( bool value ) const;

		/**
		 * Determines whether to prioritize accurately mapping triangles with higher visibility 
		 * to billboards. 
		 * @return The current value. Default value is true 
		 */
		bool GetUseVisibilityWeights(  ) const;

		/**
		 * Determines how many billboards to create. A large BillboardDensity means that 
		 * more billboards will be created to represent spatially spread out triangles 
		 * better. Having a low BillboardDensity means that fewer billboards will be created 
		 * and the distances from original leaves to billboards will get larger. The range 
		 * is 0->1. 
		 * @param value The new value. Value cannot be less than 0.0. Value cannot be 
		 * greater than 1.0. 
		 * @return The current value. 
		 */
		void SetBillboardDensity( real value ) const;

		/**
		 * Determines how many billboards to create. A large BillboardDensity means that 
		 * more billboards will be created to represent spatially spread out triangles 
		 * better. Having a low BillboardDensity means that fewer billboards will be created 
		 * and the distances from original leaves to billboards will get larger. The range 
		 * is 0->1. 
		 * @return The current value. Default value is 0.2 
		 */
		real GetBillboardDensity(  ) const;

		/**
		 * Determines the maximum billboard count. When this criteria is met, it is not 
		 * guaranteed that all triangles in the scene have been accurately mapped to a 
		 * billboard yet. Triangles that have not been mapped to a billboard within the 
		 * BillboardMaxDeviation distance will be mapped to an existing billboard that 
		 * best represents the triangle. 
		 * @param value The new value. Value cannot be less than 0. Value cannot be greater 
		 * than UINT_MAX. 
		 * @return The current value. 
		 */
		void SetMaxPlaneCount( unsigned int value ) const;

		/**
		 * Determines the maximum billboard count. When this criteria is met, it is not 
		 * guaranteed that all triangles in the scene have been accurately mapped to a 
		 * billboard yet. Triangles that have not been mapped to a billboard within the 
		 * BillboardMaxDeviation distance will be mapped to an existing billboard that 
		 * best represents the triangle. 
		 * @return The current value. Default value is 10 
		 */
		unsigned int GetMaxPlaneCount(  ) const;

		/**
		 * Determines the geometric complexity of the billboards. The value range is 0->1, 
		 * where a value of Zero means that the billboards will be simple and not follow 
		 * the projection closely. And a value of One means that the geometric complexity 
		 * will be increased and follow the projection closely. 
		 * @param value The new value. Value cannot be less than 0.0. Value cannot be 
		 * greater than 1.0. 
		 * @return The current value. 
		 */
		void SetGeometricComplexity( real value ) const;

		/**
		 * Determines the geometric complexity of the billboards. The value range is 0->1, 
		 * where a value of Zero means that the billboards will be simple and not follow 
		 * the projection closely. And a value of One means that the geometric complexity 
		 * will be increased and follow the projection closely. 
		 * @return The current value. Default value is 0.5 
		 */
		real GetGeometricComplexity(  ) const;

		/**
		 * The UpVector used in the Billboard Cloud Processor. Set this if the input scene 
		 * has an up vector other than Y+. If FavorVerticalPlanes is enabled, the UpVector 
		 * determines verticality. 
		 * @param value_realInputDataPtr The new up vector. 
		 */
		void SetUpVector( const real *value_realInputDataPtr ) const;

		/**
		 * The UpVector used in the Billboard Cloud Processor. Set this if the input scene 
		 * has an up vector other than Y+. If FavorVerticalPlanes is enabled, the UpVector 
		 * determines verticality. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetUpVector(  ) const;

		/**
		 * The UpVector used in the Billboard Cloud Processor. Set this if the input scene 
		 * has an up vector other than Y+. If FavorVerticalPlanes is enabled, the UpVector 
		 * determines verticality. 
		 * @param value The new up vector X component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetUpVectorX( real value ) const;

		/**
		 * The UpVector used in the Billboard Cloud Processor. Set this if the input scene 
		 * has an up vector other than Y+. If FavorVerticalPlanes is enabled, the UpVector 
		 * determines verticality. 
		 */
		real GetUpVectorX(  ) const;

		/**
		 * The UpVector used in the Billboard Cloud Processor. Set this if the input scene 
		 * has an up vector other than Y+. If FavorVerticalPlanes is enabled, the UpVector 
		 * determines verticality. 
		 * @param value The new up vector Y component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetUpVectorY( real value ) const;

		/**
		 * The UpVector used in the Billboard Cloud Processor. Set this if the input scene 
		 * has an up vector other than Y+. If FavorVerticalPlanes is enabled, the UpVector 
		 * determines verticality. 
		 */
		real GetUpVectorY(  ) const;

		/**
		 * The UpVector used in the Billboard Cloud Processor. Set this if the input scene 
		 * has an up vector other than Y+. If FavorVerticalPlanes is enabled, the UpVector 
		 * determines verticality. 
		 * @param value The new up vector Z component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetUpVectorZ( real value ) const;

		/**
		 * The UpVector used in the Billboard Cloud Processor. Set this if the input scene 
		 * has an up vector other than Y+. If FavorVerticalPlanes is enabled, the UpVector 
		 * determines verticality. 
		 */
		real GetUpVectorZ(  ) const;

		/**
		 * Settings for foliage when BillboardMode is Foliage. 
		 * @return The settings for foliage. 
		 */
		spFoliageSettings GetFoliageSettings(  ) const;

	};

	/**
	 * Settings for the ImpostorType: FlipBook 
	 */
	class spFlipbookSettings : public spSettingsObject
	{
		public:
		spFlipbookSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spFlipbookSettings();
		spFlipbookSettings( const spFlipbookSettings &p );
		spFlipbookSettings & operator=( const spFlipbookSettings &p );
		const spFlipbookSettings* operator->() const;
		spFlipbookSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spFlipbookSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IFlipbookSettings",type)==0) || (strcmp("spFlipbookSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spFlipbookSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spFlipbookSettings handle 
		 * @return a handle to the spFlipbookSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spFlipbookSettings SafeCast(spObject other);

		/**
		 * Determines the number of views generated for the flip book impostor. 
		 * @param value The new value. Value cannot be less than 0. Value cannot be greater 
		 * than 64. 
		 * @return The current value. 
		 */
		void SetNumberOfViews( unsigned int value ) const;

		/**
		 * Determines the number of views generated for the flip book impostor. 
		 * @return The current value. Default value is 9 
		 */
		unsigned int GetNumberOfViews(  ) const;

		/**
		 * This vector determines the direction of the first view. The rest of the views 
		 * are uniformly distributed around the scene rotated around the up-vector. The 
		 * resulting billboard will be oriented in the negative view direction. 
		 * @param value_realInputDataPtr The new view vector. 
		 */
		void SetViewDirection( const real *value_realInputDataPtr ) const;

		/**
		 * This vector determines the direction of the first view. The rest of the views 
		 * are uniformly distributed around the scene rotated around the up-vector. The 
		 * resulting billboard will be oriented in the negative view direction. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetViewDirection(  ) const;

		/**
		 * The X component of the ViewDirection vector. The ViewDirection determines the 
		 * direction of the first view. The rest of the views are uniformly distributed 
		 * around the scene rotated around the up-vector. The resulting billboard will 
		 * be oriented in the negative view direction. 
		 * @param value The new view vector X component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetViewDirectionX( real value ) const;

		/**
		 * The X component of the ViewDirection vector. The ViewDirection determines the 
		 * direction of the first view. The rest of the views are uniformly distributed 
		 * around the scene rotated around the up-vector. The resulting billboard will 
		 * be oriented in the negative view direction. 
		 */
		real GetViewDirectionX(  ) const;

		/**
		 * The Y component of the ViewDirection vector. The ViewDirection determines the 
		 * direction of the first view. The rest of the views are uniformly distributed 
		 * around the scene rotated around the up-vector. The resulting billboard will 
		 * be oriented in the negative view direction. 
		 * @param value The new view vector Y component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetViewDirectionY( real value ) const;

		/**
		 * The Y component of the ViewDirection vector. The ViewDirection determines the 
		 * direction of the first view. The rest of the views are uniformly distributed 
		 * around the scene rotated around the up-vector. The resulting billboard will 
		 * be oriented in the negative view direction. 
		 */
		real GetViewDirectionY(  ) const;

		/**
		 * The Z component of the ViewDirection vector. The ViewDirection determines the 
		 * direction of the first view. The rest of the views are uniformly distributed 
		 * around the scene rotated around the up-vector. The resulting billboard will 
		 * be oriented in the negative view direction. 
		 * @param value The new view vector Z component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetViewDirectionZ( real value ) const;

		/**
		 * The Z component of the ViewDirection vector. The ViewDirection determines the 
		 * direction of the first view. The rest of the views are uniformly distributed 
		 * around the scene rotated around the up-vector. The resulting billboard will 
		 * be oriented in the negative view direction. 
		 */
		real GetViewDirectionZ(  ) const;

		/**
		 * The views are rotated around the up vector and the rendered images are oriented 
		 * with the up vector. 
		 * @param value_realInputDataPtr The new up vector. 
		 */
		void SetUpVector( const real *value_realInputDataPtr ) const;

		/**
		 * The views are rotated around the up vector and the rendered images are oriented 
		 * with the up vector. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetUpVector(  ) const;

		/**
		 * The views are rotated around the up vector and the rendered images are oriented 
		 * with the up vector. 
		 * @param value The new up vector X component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetUpVectorX( real value ) const;

		/**
		 * The views are rotated around the up vector and the rendered images are oriented 
		 * with the up vector. 
		 */
		real GetUpVectorX(  ) const;

		/**
		 * The views are rotated around the up vector and the rendered images are oriented 
		 * with the up vector. 
		 * @param value The new up vector Y component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetUpVectorY( real value ) const;

		/**
		 * The views are rotated around the up vector and the rendered images are oriented 
		 * with the up vector. 
		 */
		real GetUpVectorY(  ) const;

		/**
		 * The views are rotated around the up vector and the rendered images are oriented 
		 * with the up vector. 
		 * @param value The new up vector Z component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetUpVectorZ( real value ) const;

		/**
		 * The views are rotated around the up vector and the rendered images are oriented 
		 * with the up vector. 
		 */
		real GetUpVectorZ(  ) const;

		/**
		 * @deprecated Method is marked as deprecated and will be removed in future version. 
		 * Use \link ViewDirection ViewDirection() \endlink instead. Deprecated: Use ViewDirection 
		 * and UpVector instead. 
		 * @param value The new value. Value cannot be less than -90. Value cannot be 
		 * greater than 90. 
		 * @return The current value. 
		 */
		SGDEPRECATED void SetVerticalAngle( real value ) const;

		/**
		 * @deprecated Method is marked as deprecated and will be removed in future version. 
		 * Use \link ViewDirection ViewDirection() \endlink instead. Deprecated: Use ViewDirection 
		 * and UpVector instead. 
		 * @return The current value. Default value is 0 
		 */
		SGDEPRECATED real GetVerticalAngle(  ) const;

	};

	/**
	 * Settings for the ImpostorType: ImpostorFromSingleView. 
	 */
	class spImpostorFromSingleViewSettings : public spSettingsObject
	{
		public:
		spImpostorFromSingleViewSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spImpostorFromSingleViewSettings();
		spImpostorFromSingleViewSettings( const spImpostorFromSingleViewSettings &p );
		spImpostorFromSingleViewSettings & operator=( const spImpostorFromSingleViewSettings &p );
		const spImpostorFromSingleViewSettings* operator->() const;
		spImpostorFromSingleViewSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spImpostorFromSingleViewSettings is a 
		 * or is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IImpostorFromSingleViewSettings",type)==0) || (strcmp("spImpostorFromSingleViewSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spImpostorFromSingleViewSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spImpostorFromSingleViewSettings 
		 * handle 
		 * @return a handle to the spImpostorFromSingleViewSettings object, if the cast 
		 * can be made, and a NULL handle otherwise 
		 */
		static spImpostorFromSingleViewSettings SafeCast(spObject other);

		/**
		 * If set, the impostor will exactly conform to the bounds of the geometry. If 
		 * false, its dimensions will always be diameter*diameter. 
		 * @param value The value UseTightFitting will be set to. 
		 */
		void SetUseTightFitting( bool value ) const;

		/**
		 * If set, the impostor will exactly conform to the bounds of the geometry. If 
		 * false, its dimensions will always be diameter*diameter. 
		 */
		bool GetUseTightFitting(  ) const;

		/**
		 * This determines where the impostor will end up in depth. 0 is "center", 1 is 
		 * "front" and -1 is "back". 
		 * @param value The desired value TightFittingDepthOffset will be set to. Value 
		 * cannot be less than -1.0. Value cannot be greater than 1.0. 
		 */
		void SetTightFittingDepthOffset( real value ) const;

		/**
		 * This determines where the impostor will end up in depth. 0 is "center", 1 is 
		 * "front" and -1 is "back". 
		 */
		real GetTightFittingDepthOffset(  ) const;

		/**
		 * If set, the impostor will contain both front and back facing surfaces. 
		 * @param value The new TwoSided value. 
		 */
		void SetTwoSided( bool value ) const;

		/**
		 * If set, the impostor will contain both front and back facing surfaces. 
		 */
		bool GetTwoSided(  ) const;

		/**
		 * This vector determines how the resulting impostor geometry will be oriented. 
		 * The billboard will be perpendicular to this vector. 
		 * @param value_realInputDataPtr The new view vector. 
		 */
		void SetViewDirection( const real *value_realInputDataPtr ) const;

		/**
		 * This vector determines how the resulting impostor geometry will be oriented. 
		 * The billboard will be perpendicular to this vector. 
		 * @return The returned data array. The array contains 3 items. 
		 */
		spRealData GetViewDirection(  ) const;

		/**
		 * The X component of the ViewDirection vector. The ViewDirection determines how 
		 * the resulting impostor geometry will be oriented. The billboard will be perpendicular 
		 * to this vector. 
		 * @param value The new view vector X component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetViewDirectionX( real value ) const;

		/**
		 * The X component of the ViewDirection vector. The ViewDirection determines how 
		 * the resulting impostor geometry will be oriented. The billboard will be perpendicular 
		 * to this vector. 
		 */
		real GetViewDirectionX(  ) const;

		/**
		 * The Y component of the ViewDirection vector. The ViewDirection determines how 
		 * the resulting impostor geometry will be oriented. The billboard will be perpendicular 
		 * to this vector. 
		 * @param value The new view vector Y component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetViewDirectionY( real value ) const;

		/**
		 * The Y component of the ViewDirection vector. The ViewDirection determines how 
		 * the resulting impostor geometry will be oriented. The billboard will be perpendicular 
		 * to this vector. 
		 */
		real GetViewDirectionY(  ) const;

		/**
		 * The Z component of the ViewDirection vector. The ViewDirection determines how 
		 * the resulting impostor geometry will be oriented. The billboard will be perpendicular 
		 * to this vector. 
		 * @param value The new view vector Z component. Value cannot be less than -REAL_MAX. 
		 * Value cannot be greater than REAL_MAX. 
		 */
		void SetViewDirectionZ( real value ) const;

		/**
		 * The Z component of the ViewDirection vector. The ViewDirection determines how 
		 * the resulting impostor geometry will be oriented. The billboard will be perpendicular 
		 * to this vector. 
		 */
		real GetViewDirectionZ(  ) const;

		/**
		 * Normally, the processor will generate an impostor with texcoords from 0.0 to 
		 * 1.0, giving perfect UV coverage in the final texture. If your engine uses permanent 
		 * tiling rendering mode, you may need to add a small padding to avoid sub-pixel 
		 * wrapping artifact at the impostor edges, which this setting supplies. Ex: Setting 
		 * this to 0.01 will generate texcoords in the range 0.01 to 0.99. 
		 * @param value The desired value TexCoordPadding will be set to. Value cannot 
		 * be less than 0.0. Value cannot be greater than 0.5. 
		 */
		void SetTexCoordPadding( real value ) const;

		/**
		 * Normally, the processor will generate an impostor with texcoords from 0.0 to 
		 * 1.0, giving perfect UV coverage in the final texture. If your engine uses permanent 
		 * tiling rendering mode, you may need to add a small padding to avoid sub-pixel 
		 * wrapping artifact at the impostor edges, which this setting supplies. Ex: Setting 
		 * this to 0.01 will generate texcoords in the range 0.01 to 0.99. 
		 */
		real GetTexCoordPadding(  ) const;

	};

	/**
	 * ImpostorFromSingleViewPipeline provides a pipeline for a impostor from single 
	 * view impostor processor to be applied on the input scene. 
	 */
	class spImpostorFromSingleViewPipeline : public spPipeline
	{
		public:
		spImpostorFromSingleViewPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spImpostorFromSingleViewPipeline();
		spImpostorFromSingleViewPipeline( const spImpostorFromSingleViewPipeline &p );
		spImpostorFromSingleViewPipeline & operator=( const spImpostorFromSingleViewPipeline &p );
		const spImpostorFromSingleViewPipeline* operator->() const;
		spImpostorFromSingleViewPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spImpostorFromSingleViewPipeline is a 
		 * or is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IImpostorFromSingleViewPipeline",type)==0) || (strcmp("spImpostorFromSingleViewPipeline",type)==0) )
				return true;
			return spPipeline::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spImpostorFromSingleViewPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spImpostorFromSingleViewPipeline 
		 * handle 
		 * @return a handle to the spImpostorFromSingleViewPipeline object, if the cast 
		 * can be made, and a NULL handle otherwise 
		 */
		static spImpostorFromSingleViewPipeline SafeCast(spObject other);

		/**
		 * The ImpostorFromSingleViewPipeline settings object containing the imposter 
		 * settings from a single view for this pipeline. 
		 * @return The ImpostorFromSingleView settings 
		 */
		spImpostorFromSingleViewSettings GetImpostorFromSingleViewSettings(  ) const;

	};

	/**
	 * BillboardCloudPipeline provides a pipeline for a billboard cloud impostor processor 
	 * to be applied on the input scene. 
	 */
	class spBillboardCloudPipeline : public spPipeline
	{
		public:
		spBillboardCloudPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spBillboardCloudPipeline();
		spBillboardCloudPipeline( const spBillboardCloudPipeline &p );
		spBillboardCloudPipeline & operator=( const spBillboardCloudPipeline &p );
		const spBillboardCloudPipeline* operator->() const;
		spBillboardCloudPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spBillboardCloudPipeline is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IBillboardCloudPipeline",type)==0) || (strcmp("spBillboardCloudPipeline",type)==0) )
				return true;
			return spPipeline::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spBillboardCloudPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spBillboardCloudPipeline handle 
		 * @return a handle to the spBillboardCloudPipeline object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spBillboardCloudPipeline SafeCast(spObject other);

		/**
		 * The billboard cloud settings object containing the billboard cloud settings 
		 * for this pipeline. 
		 * @return The billboard cloud settings 
		 */
		spBillboardCloudSettings GetBillboardCloudSettings(  ) const;

	};

	/**
	 * BillboardCloudPipeline provides a pipeline for a billboard cloud vegetation 
	 * impostor processor to be applied on the input scene. 
	 */
	class spBillboardCloudVegetationPipeline : public spPipeline
	{
		public:
		spBillboardCloudVegetationPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spBillboardCloudVegetationPipeline();
		spBillboardCloudVegetationPipeline( const spBillboardCloudVegetationPipeline &p );
		spBillboardCloudVegetationPipeline & operator=( const spBillboardCloudVegetationPipeline &p );
		const spBillboardCloudVegetationPipeline* operator->() const;
		spBillboardCloudVegetationPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spBillboardCloudVegetationPipeline is 
		 * a or is a descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IBillboardCloudVegetationPipeline",type)==0) || (strcmp("spBillboardCloudVegetationPipeline",type)==0) )
				return true;
			return spPipeline::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spBillboardCloudVegetationPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spBillboardCloudVegetationPipeline 
		 * handle 
		 * @return a handle to the spBillboardCloudVegetationPipeline object, if the cast 
		 * can be made, and a NULL handle otherwise 
		 */
		static spBillboardCloudVegetationPipeline SafeCast(spObject other);

		/**
		 * The billboard cloud settings object containing the billboard cloud settings 
		 * for this pipeline. 
		 * @return The billboard cloud settings 
		 */
		spBillboardCloudSettings GetBillboardCloudSettings(  ) const;

	};

	/**
	 * FlipbookPipeline provides a pipeline for a flipbook impostor processor to be 
	 * applied on the input scene. 
	 */
	class spFlipbookPipeline : public spPipeline
	{
		public:
		spFlipbookPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spFlipbookPipeline();
		spFlipbookPipeline( const spFlipbookPipeline &p );
		spFlipbookPipeline & operator=( const spFlipbookPipeline &p );
		const spFlipbookPipeline* operator->() const;
		spFlipbookPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spFlipbookPipeline is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IFlipbookPipeline",type)==0) || (strcmp("spFlipbookPipeline",type)==0) )
				return true;
			return spPipeline::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spFlipbookPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spFlipbookPipeline handle 
		 * @return a handle to the spFlipbookPipeline object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spFlipbookPipeline SafeCast(spObject other);

		/**
		 * The flipbook settings object containing the flipbook settings for this pipeline. 
		 * @return The flipbook settings 
		 */
		spFlipbookSettings GetFlipbookSettings(  ) const;

	};

	/**
	 * Settings for the BillboardMode: Foliage 
	 */
	class spFoliageSettings : public spSettingsObject
	{
		public:
		spFoliageSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spFoliageSettings();
		spFoliageSettings( const spFoliageSettings &p );
		spFoliageSettings & operator=( const spFoliageSettings &p );
		const spFoliageSettings* operator->() const;
		spFoliageSettings( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spFoliageSettings is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IFoliageSettings",type)==0) || (strcmp("spFoliageSettings",type)==0) )
				return true;
			return spSettingsObject::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spFoliageSettings 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spFoliageSettings handle 
		 * @return a handle to the spFoliageSettings object, if the cast can be made, 
		 * and a NULL handle otherwise 
		 */
		static spFoliageSettings SafeCast(spObject other);

		/**
		 * Determines whether to enable separation between foliage and trunk in a vegetation 
		 * scene. Use the SeparateFoliage[...] settings to determine how parts are separated. 
		 * @param value The new value. 
		 * @return The current value. 
		 */
		void SetSeparateTrunkAndFoliage( bool value ) const;

		/**
		 * Determines whether to enable separation between foliage and trunk in a vegetation 
		 * scene. Use the SeparateFoliage[...] settings to determine how parts are separated. 
		 * @return The current value. Default value is false 
		 */
		bool GetSeparateTrunkAndFoliage(  ) const;

		/**
		 * Is used to separate the trunk from the foliage in a vegetation scene by comparing 
		 * each group of connected triangles in the scene with the scene's largest group. 
		 * If a group's triangle count is below SeparateFoliageTriangleRatio * largestGrouptriangleCount 
		 * it is treated as foliage and processed into billboards. The trunk is optimized 
		 * using triangle reduction. The range is 0.0->1.0. 0.0 means nothing will be 
		 * foliage, 1.0 means everything will be foliage. 
		 * @param value The new value. Value cannot be less than 0.0. Value cannot be 
		 * greater than 1.0. 
		 * @return The current value. 
		 */
		void SetSeparateFoliageTriangleRatio( real value ) const;

		/**
		 * Is used to separate the trunk from the foliage in a vegetation scene by comparing 
		 * each group of connected triangles in the scene with the scene's largest group. 
		 * If a group's triangle count is below SeparateFoliageTriangleRatio * largestGrouptriangleCount 
		 * it is treated as foliage and processed into billboards. The trunk is optimized 
		 * using triangle reduction. The range is 0.0->1.0. 0.0 means nothing will be 
		 * foliage, 1.0 means everything will be foliage. 
		 * @return The current value. Default value is 0.01 
		 */
		real GetSeparateFoliageTriangleRatio(  ) const;

		/**
		 * Is used to separate the trunk from the foliage in a vegetation scene by finding 
		 * each group of connected triangles in the scene and if the triangle count is 
		 * below SeparateFoliageTriangleThreshold it is treated as foliage and processed 
		 * into billboards. The trunk is optimized using reduction. The range is 0->large 
		 * value. 0 means nothing will be foliage, value larger than the maximum triangle 
		 * count means everything will be foliage. 
		 * @param value The new value. Value cannot be less than 0. Value cannot be greater 
		 * than UINT_MAX. 
		 * @return The current value. 
		 */
		void SetSeparateFoliageTriangleThreshold( unsigned int value ) const;

		/**
		 * Is used to separate the trunk from the foliage in a vegetation scene by finding 
		 * each group of connected triangles in the scene and if the triangle count is 
		 * below SeparateFoliageTriangleThreshold it is treated as foliage and processed 
		 * into billboards. The trunk is optimized using reduction. The range is 0->large 
		 * value. 0 means nothing will be foliage, value larger than the maximum triangle 
		 * count means everything will be foliage. 
		 * @return The current value. Default value is 10 
		 */
		unsigned int GetSeparateFoliageTriangleThreshold(  ) const;

		/**
		 * Is used to separate the trunk from the foliage in a vegetation scene by finding 
		 * each group of connected triangles in the scene and if the surface area is below 
		 * (SeparateFoliageAreaThreshold * AreaOfTheLargestGroupInTheScene) it is treated 
		 * as foliage and processed into billboards. The trunk is optimized using reduction. 
		 * The range is 0->large value. 0 means nothing will be foliage, value larger 
		 * than the maximum surface area means everything will be foliage. 
		 * @param value The new value. Value cannot be less than 0. Value cannot be greater 
		 * than REAL_MAX. 
		 * @return The current value. 
		 */
		void SetSeparateFoliageAreaThreshold( real value ) const;

		/**
		 * Is used to separate the trunk from the foliage in a vegetation scene by finding 
		 * each group of connected triangles in the scene and if the surface area is below 
		 * (SeparateFoliageAreaThreshold * AreaOfTheLargestGroupInTheScene) it is treated 
		 * as foliage and processed into billboards. The trunk is optimized using reduction. 
		 * The range is 0->large value. 0 means nothing will be foliage, value larger 
		 * than the maximum surface area means everything will be foliage. 
		 * @return The current value. Default value is 0.1 
		 */
		real GetSeparateFoliageAreaThreshold(  ) const;

		/**
		 * Is used to separate the trunk from the foliage in a vegetation scene by finding 
		 * each group of connected triangles in the scene and if the diameter of the group 
		 * is below (SeparateFoliageSizeThreshold * SceneDiameter) it is treated as foliage 
		 * and processed into billboards. The trunk is optimized using reduction. The 
		 * range is 0->large value. 0 means nothing will be foliage, value larger than 
		 * the scene's diameter means everything will be foliage. 
		 * @param value The new value. Value cannot be less than 0. Value cannot be greater 
		 * than REAL_MAX. 
		 * @return The current value. 
		 */
		void SetSeparateFoliageSizeThreshold( real value ) const;

		/**
		 * Is used to separate the trunk from the foliage in a vegetation scene by finding 
		 * each group of connected triangles in the scene and if the diameter of the group 
		 * is below (SeparateFoliageSizeThreshold * SceneDiameter) it is treated as foliage 
		 * and processed into billboards. The trunk is optimized using reduction. The 
		 * range is 0->large value. 0 means nothing will be foliage, value larger than 
		 * the scene's diameter means everything will be foliage. 
		 * @return The current value. Default value is 0.1 
		 */
		real GetSeparateFoliageSizeThreshold(  ) const;

		/**
		 * Determines the triangle reduction ratio for the trunk part that has been separated 
		 * from the foliage part based on the "separate foliage" settings. 
		 * @param value The new value. Value cannot be less than 0.0. Value cannot be 
		 * greater than 1.0. 
		 * @return The current value. 
		 */
		void SetTrunkReductionRatio( real value ) const;

		/**
		 * Determines the triangle reduction ratio for the trunk part that has been separated 
		 * from the foliage part based on the "separate foliage" settings. 
		 * @return The current value. Default value is 0.5 
		 */
		real GetTrunkReductionRatio(  ) const;

	};

	/**
	 * StringArray is the string implementation of ValueArray. See ValueArray for a 
	 * description. 
	 */
	class spStringArray : public spValueArray
	{
		public:
		spStringArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spStringArray();
		spStringArray( const spStringArray &p );
		spStringArray & operator=( const spStringArray &p );
		const spStringArray* operator->() const;
		spStringArray( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spStringArray is a or is a descendant 
		 * of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IStringArray",type)==0) || (strcmp("spStringArray",type)==0) )
				return true;
			return spValueArray::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spStringArray 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spStringArray handle 
		 * @return a handle to the spStringArray object, if the cast can be made, and 
		 * a NULL handle otherwise 
		 */
		static spStringArray SafeCast(spObject other);

		/**
		 * Adds an item to the list, allocates memory as needed to enlarge the list. If 
		 * many items are being put into the list, use Resize to set the size of the new 
		 * list (only one reallocation needed) and then use SetItem() / SetTuple() to 
		 * set the items directly. 
		 * @param value The value of the item. 
		 */
		void AddItem( const char * value ) const;

		/**
		 * Sets an item in the list. The id of the item is the exact location of the item 
		 * (TupleId * TupleSize + Index of item in tuple) Warning! No range checking is 
		 * done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 * @param value The new value of the item. 
		 */
		void SetItem( rid id , const char * value ) const;

		/**
		 * Gets the value of an item in the list. The id of the item is the exact location 
		 * of the item (TupleId * TupleSize + Index of item in tuple) Warning! No range 
		 * checking is done. 
		 * @param id The id of the item. Value cannot be less than 0. Value cannot be 
		 * greater than the value returned by GetMaxItemId(). 
		 */
		spString GetItem( rid id ) const;

	};

	/**
	 * OcclusionMeshPipeline provides a pipeline for a single occlusion mesh processor 
	 * to be applied on the input scene. 
	 */
	class spOcclusionMeshPipeline : public spPipeline
	{
		public:
		spOcclusionMeshPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr );
		spOcclusionMeshPipeline();
		spOcclusionMeshPipeline( const spOcclusionMeshPipeline &p );
		spOcclusionMeshPipeline & operator=( const spOcclusionMeshPipeline &p );
		const spOcclusionMeshPipeline* operator->() const;
		spOcclusionMeshPipeline( const _NilStruct & );

		/**
		 * The IsClassA function returns true if spOcclusionMeshPipeline is a or is a 
		 * descendant of the class named as the type parameter 
		 * @param type is the name of the class to check if the class is, or is a descendant 
		 * of 
		 * @return true if the class is of the specified class, false if not 
		 */
		static bool IsClassA( const char *type )
		{
			if( !type )
				return false;
			if( (strcmp("IOcclusionMeshPipeline",type)==0) || (strcmp("spOcclusionMeshPipeline",type)==0) )
				return true;
			return spPipeline::IsClassA(type);
		}

		/**
		 * SafeCast makes sure the object is of a class that can be cast into a spOcclusionMeshPipeline 
		 * object, and if this is possible, returns the cast object. 
		 * @param ptr is the pointer to be cast into a spOcclusionMeshPipeline handle 
		 * @return a handle to the spOcclusionMeshPipeline object, if the cast can be 
		 * made, and a NULL handle otherwise 
		 */
		static spOcclusionMeshPipeline SafeCast(spObject other);

		/**
		 * The occlusion mesh settings object containing the occlusion mesh settings for 
		 * this pipeline. 
		 * @return The occlusion mesh settings 
		 */
		spOcclusionMeshSettings GetOcclusionMeshSettings(  ) const;

	};


	/** 
	 * The Observer class is used to receive events from an interface, by override the event methods
	 * By adding an object of the class into an interface using the AddObserver method
	 * the event method will called
	 */
	class Observer : public ObserverBase
	{
		const APIInterfacePtrs* sgapi = nullptr;
		friend class spObject;

#ifndef SWIG
		virtual bool HandleEventBase( EventCode event , hIntf subject , void *data ) 
		{
			switch( event )
			{
				case Progress:
				{
					ObserverBase::ProgressData *pData = (ObserverBase::ProgressData*)data;
					pData->ContinueRunning = this->OnProgress( spObject( sgapi , subject ) , pData->Progress );
					return true;
				}
				case ProcessStarted:
				{
					ObserverBase::ProcessStartedData *pData = (ObserverBase::ProcessStartedData*)data;
					this->OnProcessStarted( spObject( sgapi , subject ) , pData->Name );
					return true;
				}
				case ShadingCustomNodeEvaluate:
				{
					ObserverBase::ShadingCustomNodeEvaluateData *pData = (ObserverBase::ShadingCustomNodeEvaluateData*)data;
					ShadingColor ret = this->OnShadingCustomNodeEvaluate( spObject( sgapi , subject ) );
					pData->Color = { ret.r , ret.g , ret.b , ret.a };
					return true;
				}
				case ShadingCustomNodeGenerateShaderCode:
				{
					ObserverBase::ShadingCustomNodeGenerateShaderCodeData *pData = (ObserverBase::ShadingCustomNodeGenerateShaderCodeData*)data;
					pData->WasGenerated = this->OnShadingCustomNodeGenerateShaderCode( spObject( sgapi , subject ) , pData->ShaderLanguage );
					return true;
				}
			}
			return false;
		};
#endif//SWIG
		public:
		
		/** 
		 * The OnProgress event is for processing progress and cancelation signaling.
		 * @param subject is the object that is sending the event
		 * @param progressPercent is progress in percent
		 * @return false to cancel the processing
		 */
		virtual bool OnProgress( spObject subject , real progressPercent ) { return true; }
		
		/** 
		 * The OnProcessStarted event is triggered when the processing starts.
		 * @param subject is the object that is sending the event
		 * @param name is name of the process
		 */
		virtual void OnProcessStarted( spObject subject , const char* name ) {}
		
		/** 
		 * The OnShadingCustomNodeEvaluate event is for evaluating custom shading nodes.
		 * @param subject is the object that is sending the event
		 * @return Color with the evaluated pixel value
		 */
		virtual ShadingColor OnShadingCustomNodeEvaluate( spObject subject ) { return ShadingColor(); }
		
		/** 
		 * The OnShadingCustomNodeGenerateShaderCode event is for generating shader code in the custom shading node.
		 * @param subject is the object that is sending the event
		 * @param target shader language
		 * @return true if the shader code was added to the ShadingCustomNode successfully
		 */
		virtual bool OnShadingCustomNodeGenerateShaderCode( spObject subject, EShaderLanguage shaderLanguage ) { return false; }
	};

	/**
	 * The ErrorHandler class is used to receive error messages from the interface, by creating a class that
	 * implements the HandleError method. By setting an object of the class into the main interface using 
	 * the SetErrorHandler method, the HandleError method will receive all error messages from the interface.
	 * Please note that errors may not be recoverable, and could leave objects in an intermediate state. Errors
	 * should in most cases be considered fatal, and will not occur in standard use. 
	 */
	class ErrorHandler : public ErrorHandlerBase
	{
		const APIInterfacePtrs* sgapi = nullptr;
		friend class ISimplygon;

#ifndef SWIG
		virtual void HandleErrorBase( hIntf object , const char *interfaceName , const char *methodName , rid errorType , const char *errorText ) 
			{
			this->HandleError( spObject( this->sgapi , object ) , interfaceName , methodName , errorType , errorText );
			};
#endif//SWIG

		public:

		/** 
		 * The HandleError method will receive all error messages from the interface.
		 * @param object is the interface object that raised the error message
		 * @param interfaceName is the name of the interface 
		 * @param methodName is the name of the method in the object that was called when the error occurred
		 * @param errorType is the type of error that has occurred
		 * @param errorText is a description of the error that has occurred
		 */
		virtual void HandleError( spObject object , const char *interfaceName , const char *methodName , rid errorType , const char *errorText ) {};
	};

	class ISimplygon
	{
		APIInterfacePtrs *sgapi;
		ISimplygon( APIInterfacePtrs *_sgapi );
		ISimplygon( const ISimplygon & );

		public:
		static ISimplygon * CreateAPI( void *libHandle );
		~ISimplygon();

		/**
		 * Creates and returns a counted pointer to an object of type IBoolArray
		 * Documentation from IBoolArray:
		 * BoolArray is the bool implementation of ValueArray. See ValueArray for a description. 
		 * @return the created object, of type spBoolArray
		 */
		spBoolArray CreateBoolArray() const { return spBoolArray( this->sgapi , this->sgapi->fpCreateBoolArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type ICharArray
		 * Documentation from ICharArray:
		 * CharArray is the char implementation of ValueArray. See ValueArray for a description. 
		 * @return the created object, of type spCharArray
		 */
		spCharArray CreateCharArray() const { return spCharArray( this->sgapi , this->sgapi->fpCreateCharArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IDoubleArray
		 * Documentation from IDoubleArray:
		 * DoubleArray is the double implementation of ValueArray. See ValueArray for 
		 * a description. 
		 * @return the created object, of type spDoubleArray
		 */
		spDoubleArray CreateDoubleArray() const { return spDoubleArray( this->sgapi , this->sgapi->fpCreateDoubleArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IFloatArray
		 * Documentation from IFloatArray:
		 * FloatArray is the float implementation of ValueArray. See ValueArray for a 
		 * description. 
		 * @return the created object, of type spFloatArray
		 */
		spFloatArray CreateFloatArray() const { return spFloatArray( this->sgapi , this->sgapi->fpCreateFloatArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IIntArray
		 * Documentation from IIntArray:
		 * IntArray is the int implementation of ValueArray. See ValueArray for a description. 
		 * @return the created object, of type spIntArray
		 */
		spIntArray CreateIntArray() const { return spIntArray( this->sgapi , this->sgapi->fpCreateIntArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type ILongArray
		 * Documentation from ILongArray:
		 * LongArray is the long implementation of ValueArray. See ValueArray for a description. 
		 * @return the created object, of type spLongArray
		 */
		spLongArray CreateLongArray() const { return spLongArray( this->sgapi , this->sgapi->fpCreateLongArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IRealArray
		 * Documentation from IRealArray:
		 * RealArray is the real implementation of ValueArray. See ValueArray for a description. 
		 * @return the created object, of type spRealArray
		 */
		spRealArray CreateRealArray() const { return spRealArray( this->sgapi , this->sgapi->fpCreateRealArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IRidArray
		 * Documentation from IRidArray:
		 * RidArray is the rid implementation of ValueArray. See ValueArray for a description. 
		 * @return the created object, of type spRidArray
		 */
		spRidArray CreateRidArray() const { return spRidArray( this->sgapi , this->sgapi->fpCreateRidArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShortArray
		 * Documentation from IShortArray:
		 * ShortArray is the short implementation of ValueArray. See ValueArray for a 
		 * description. 
		 * @return the created object, of type spShortArray
		 */
		spShortArray CreateShortArray() const { return spShortArray( this->sgapi , this->sgapi->fpCreateShortArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IUnsignedCharArray
		 * Documentation from IUnsignedCharArray:
		 * UnsignedCharArray is the uchar implementation of ValueArray. See ValueArray 
		 * for a description. 
		 * @return the created object, of type spUnsignedCharArray
		 */
		spUnsignedCharArray CreateUnsignedCharArray() const { return spUnsignedCharArray( this->sgapi , this->sgapi->fpCreateUnsignedCharArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IUnsignedIntArray
		 * Documentation from IUnsignedIntArray:
		 * UnsignedIntArray is the uint implementation of ValueArray. See ValueArray for 
		 * a description. 
		 * @return the created object, of type spUnsignedIntArray
		 */
		spUnsignedIntArray CreateUnsignedIntArray() const { return spUnsignedIntArray( this->sgapi , this->sgapi->fpCreateUnsignedIntArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IUnsignedLongArray
		 * Documentation from IUnsignedLongArray:
		 * UnsignedLongArray is the ulong implementation of ValueArray. See ValueArray 
		 * for a description. 
		 * @return the created object, of type spUnsignedLongArray
		 */
		spUnsignedLongArray CreateUnsignedLongArray() const { return spUnsignedLongArray( this->sgapi , this->sgapi->fpCreateUnsignedLongArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IUnsignedShortArray
		 * Documentation from IUnsignedShortArray:
		 * UnsignedShortArray is the ushort implementation of ValueArray. See ValueArray 
		 * for a description. 
		 * @return the created object, of type spUnsignedShortArray
		 */
		spUnsignedShortArray CreateUnsignedShortArray() const { return spUnsignedShortArray( this->sgapi , this->sgapi->fpCreateUnsignedShortArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IDirectXRenderer
		 * Documentation from IDirectXRenderer:
		 * A Renderer using DirectX 11 that can be used to preview a scene object containing 
		 * geometry data by rendering it from selected SceneCamera nodes within the given 
		 * scene and then storing the frames to disc. If using a Shading Node Network 
		 * (having an IShadingNode assigned to the IMaterial), then the material can be 
		 * previewed with the generated HLSL shader. 
		 * @return the created object, of type spDirectXRenderer
		 */
		spDirectXRenderer CreateDirectXRenderer() const { return spDirectXRenderer( this->sgapi , this->sgapi->fpCreateDirectXRenderer()); }

		/**
		 * Creates and returns a counted pointer to an object of type IGeometryData
		 * Documentation from IGeometryData:
		 * GeometryData represents a geometric structure consisting of point data (Vertices) 
		 * and topological data (Triangles). GeometryData may represent a whole geometric 
		 * object, but can also be used by streaming data filters, and in this way, only 
		 * represents a part of the object. Different fields in the Vertices and Triangles 
		 * fields data objects will contain point data and topological data. The standard 
		 * naming convention used in the filters/renderers are as follows: (Case sensitive 
		 * naming, other fields may also be present) 'Coords' Positional coordinates of 
		 * a vertex, expressed with a 3-component real field (XYZ). 'TexCoords0' - 'TexCoords255' 
		 *  Texture coordinates of a vertex, expressed with a 2 components real field. 
		 * By convention, the existing fields must be sequential, and must start with 
		 * 'TexCoord0'. 'Normals' Normal vector for the vertex, expressed with a 3-component 
		 * real field, a normalized (XYZ) vector. 'VertexIds' The id of the current vertex 
		 * in the primitive. This field is present even if the vertex data is directly 
		 * specified in the primitive data, to specify topology. The field is of type 
		 * rid. 'MaterialIds' The material of the primitive. The field is of type rid. 
		 *  The 'Coords' and 'VertexIds' fields always exist in the object, but the other 
		 * fields are optional. Also, there can exist user fields. 
		 * @return the created object, of type spGeometryData
		 */
		spGeometryData CreateGeometryData() const { return spGeometryData( this->sgapi , this->sgapi->fpCreateGeometryData()); }

		/**
		 * Creates and returns a counted pointer to an object of type IPackedGeometryData
		 * Documentation from IPackedGeometryData:
		 * PackedGeometryData keeps the same information as GeometryData, but with all 
		 * corner data fields moved into per-vertex fields. No per-corner fields exist, 
		 * apart from the VertexIds field. Please note that the number of vertices in 
		 * an PackedGeometryData is commonly higher than in an GeometryData, as vertices 
		 * must be split to accommodate for different corner data. 
		 * @return the created object, of type spPackedGeometryData
		 */
		spPackedGeometryData CreatePackedGeometryData() const { return spPackedGeometryData( this->sgapi , this->sgapi->fpCreatePackedGeometryData()); }

		/**
		 * Creates and returns a counted pointer to an object of type IImageData
		 * Documentation from IImageData:
		 * ImageData holds unpacked image data. The data is stored in an FieldData object 
		 * as value fields. For simplicity all images are implemented as 3D images, but 
		 * has an extent of 1 in Z for 2D images, and an extent of 1 in both Y and Z for 
		 * 1D images. Cube maps are stored as a 3D image with Z-depth of 6 (one for each 
		 * side) 
		 * @return the created object, of type spImageData
		 */
		spImageData CreateImageData() const { return spImageData( this->sgapi , this->sgapi->fpCreateImageData()); }

		/**
		 * Creates and returns a counted pointer to an object of type ITable
		 * Documentation from ITable:
		 * Table is the base class for tables objects, where items are added into an id-indexed 
		 * array of objects. 
		 * @return the created object, of type spTable
		 */
		spTable CreateTable() const { return spTable( this->sgapi , this->sgapi->fpCreateTable()); }

		/**
		 * Creates and returns a counted pointer to an object of type IMaterial
		 * Documentation from IMaterial:
		 * Material object that keeps material information used while rendering. 
		 * @return the created object, of type spMaterial
		 */
		spMaterial CreateMaterial() const { return spMaterial( this->sgapi , this->sgapi->fpCreateMaterial()); }

		/**
		 * Creates and returns a counted pointer to an object of type IMaterialTable
		 * Documentation from IMaterialTable:
		 * MaterialTable keeps information on materials used while rendering. 
		 * @return the created object, of type spMaterialTable
		 */
		spMaterialTable CreateMaterialTable() const { return spMaterialTable( this->sgapi , this->sgapi->fpCreateMaterialTable()); }

		/**
		 * Creates and returns a counted pointer to an object of type IMatrix4x4
		 * Documentation from IMatrix4x4:
		 * Matrix4x4 is used to represent and manipulate 4x4 transformation matrices, 
		 * which can be either standard matrices, or homogeneous 4x4 matrices used to 
		 * transform 3D homogeneous coordinates [x y z w]. The transformations are defined 
		 * in row-major order. 
		 * @return the created object, of type spMatrix4x4
		 */
		spMatrix4x4 CreateMatrix4x4() const { return spMatrix4x4( this->sgapi , this->sgapi->fpCreateMatrix4x4()); }

		/**
		 * Creates and returns a counted pointer to an object of type ITransform3
		 * Documentation from ITransform3:
		 * Transform3 handles homogeneous 4x4 transforms, i.e. transformations which can 
		 * be represented by multiplying a 4x4 matrix with a homogeneous 3D coordinate. 
		 * Transform3 can either pre-multiply a matrix onto the transformation, which 
		 * will add a transform around the current transform, or it can post-multiply 
		 * the matrix, which will add a transform inside the current transform. Post-multiply 
		 * is the default mode. 
		 * @return the created object, of type spTransform3
		 */
		spTransform3 CreateTransform3() const { return spTransform3( this->sgapi , this->sgapi->fpCreateTransform3()); }

		/**
		 * Creates and returns a counted pointer to an object of type IParameterizer
		 * Documentation from IParameterizer:
		 * Computes texture coordinates for arbitrary geometry. 
		 * @return the created object, of type spParameterizer
		 */
		spParameterizer CreateParameterizer() const { return spParameterizer( this->sgapi , this->sgapi->fpCreateParameterizer()); }

		/**
		 * Creates and returns a counted pointer to an object of type IObjectCollection
		 * Documentation from IObjectCollection:
		 * ObjectCollection and its specializations handles a collection of Objects. There 
		 * are methods for adding, removing and iterating through the objects. 
		 * @return the created object, of type spObjectCollection
		 */
		spObjectCollection CreateObjectCollection() const { return spObjectCollection( this->sgapi , this->sgapi->fpCreateObjectCollection()); }

		/**
		 * Creates and returns a counted pointer to an object of type IGeometryDataCollection
		 * Documentation from IGeometryDataCollection:
		 * GeometryDataCollection holds a number of GeometryData objects. The objects 
		 * can be looked up by their names (if they have been named with a call to SetName). 
		 * @return the created object, of type spGeometryDataCollection
		 */
		spGeometryDataCollection CreateGeometryDataCollection() const { return spGeometryDataCollection( this->sgapi , this->sgapi->fpCreateGeometryDataCollection()); }

		/**
		 * Creates and returns a counted pointer to an object of type IWavefrontImporter
		 * Documentation from IWavefrontImporter:
		 * OBJ scene importer 
		 * @return the created object, of type spWavefrontImporter
		 */
		spWavefrontImporter CreateWavefrontImporter() const { return spWavefrontImporter( this->sgapi , this->sgapi->fpCreateWavefrontImporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type IGLTFImporter
		 * Documentation from IGLTFImporter:
		 * glTF scene importer 
		 * @return the created object, of type spGLTFImporter
		 */
		spGLTFImporter CreateGLTFImporter() const { return spGLTFImporter( this->sgapi , this->sgapi->fpCreateGLTFImporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type IFBXImporter
		 * Documentation from IFBXImporter:
		 * FBX scene importer 
		 * @return the created object, of type spFBXImporter
		 */
		spFBXImporter CreateFBXImporter() const { return spFBXImporter( this->sgapi , this->sgapi->fpCreateFBXImporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type IWavefrontExporter
		 * Documentation from IWavefrontExporter:
		 * Wavefront .obj geometry exporter. 
		 * @return the created object, of type spWavefrontExporter
		 */
		spWavefrontExporter CreateWavefrontExporter() const { return spWavefrontExporter( this->sgapi , this->sgapi->fpCreateWavefrontExporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type IFBXExporter
		 * Documentation from IFBXExporter:
		 * FBX scene exporter. 
		 * @return the created object, of type spFBXExporter
		 */
		spFBXExporter CreateFBXExporter() const { return spFBXExporter( this->sgapi , this->sgapi->fpCreateFBXExporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type IGLTFExporter
		 * Documentation from IGLTFExporter:
		 * glTF geometry exporter capable of exporting both glTF and GLB files determined 
		 * by output path extension. Textures and binary blob files for glTF export will 
		 * be placed alongside the glTF file and have names prefixed by the output file 
		 * name. Note that any normal textures for the scene must be in tangent space, 
		 * as generated by a normal caster with SetGenerateTangentSpaceNormals set to 
		 * true. 
		 * @return the created object, of type spGLTFExporter
		 */
		spGLTFExporter CreateGLTFExporter() const { return spGLTFExporter( this->sgapi , this->sgapi->fpCreateGLTFExporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type IBinaryImporter
		 * Documentation from IBinaryImporter:
		 * BinaryImporter loads the geometry data from a binary file, that is specific 
		 * for Simplygon. Please note that the binary file is only intended for temporary 
		 * storage, and that no compatibility between versions of Simplygon is guaranteed. 
		 * @return the created object, of type spBinaryImporter
		 */
		spBinaryImporter CreateBinaryImporter() const { return spBinaryImporter( this->sgapi , this->sgapi->fpCreateBinaryImporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type IBinaryExporter
		 * Documentation from IBinaryExporter:
		 * BinaryExporter stores the geometry data into a binary file, that is specific 
		 * for Simplygon. Please note that the binary file is only intended for temporary 
		 * storage, and that no compatibility between versions of Simplygon is guaranteed. 
		 * @return the created object, of type spBinaryExporter
		 */
		spBinaryExporter CreateBinaryExporter() const { return spBinaryExporter( this->sgapi , this->sgapi->fpCreateBinaryExporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type IGeometryValidator
		 * Documentation from IGeometryValidator:
		 * Checks the geometry for consistent indices, number of triangles etc. 
		 * @return the created object, of type spGeometryValidator
		 */
		spGeometryValidator CreateGeometryValidator() const { return spGeometryValidator( this->sgapi , this->sgapi->fpCreateGeometryValidator()); }

		/**
		 * Creates and returns a counted pointer to an object of type IMaterialCasterSettings
		 * Documentation from IMaterialCasterSettings:
		 * MaterialCasterSettings is the base interface for material casting settings 
		 * @return the created object, of type spMaterialCasterSettings
		 */
		spMaterialCasterSettings CreateMaterialCasterSettings() const { return spMaterialCasterSettings( this->sgapi , this->sgapi->fpCreateMaterialCasterSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IColorCaster
		 * Documentation from IColorCaster:
		 * ColorCaster is the interface used to cast basic color values. Currently supported 
		 * material color value types are Ambient, Diffuse and Specular + Shininess. 
		 * @return the created object, of type spColorCaster
		 */
		spColorCaster CreateColorCaster() const { return spColorCaster( this->sgapi , this->sgapi->fpCreateColorCaster()); }

		/**
		 * Creates and returns a counted pointer to an object of type IColorCasterSettings
		 * Documentation from IColorCasterSettings:
		 * ColorCasterSettings is the interface for basic color caster settings. 
		 * @return the created object, of type spColorCasterSettings
		 */
		spColorCasterSettings CreateColorCasterSettings() const { return spColorCasterSettings( this->sgapi , this->sgapi->fpCreateColorCasterSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IOpacityCaster
		 * Documentation from IOpacityCaster:
		 * OpacityCaster is the interface used to cast opacity values. To be used when 
		 * opacity is needed as a separate texture. IMPORTANT: Make sure to set OpacityChannel 
		 * to the channel you want to cast, since this caster bakes opacity rather than 
		 * the channel set in the MaterialChannel setting like most other casters. 
		 * @return the created object, of type spOpacityCaster
		 */
		spOpacityCaster CreateOpacityCaster() const { return spOpacityCaster( this->sgapi , this->sgapi->fpCreateOpacityCaster()); }

		/**
		 * Creates and returns a counted pointer to an object of type IOpacityCasterSettings
		 * Documentation from IOpacityCasterSettings:
		 * OpacityCasterSettings is the interface used to manage settings for an opacity 
		 * caster. IMPORTANT: Make sure to set the OpacityChannel setting to the channel 
		 * you want to cast, since this caster bakes opacity rather than the channel set 
		 * in the MaterialChannel setting like most other casters. 
		 * @return the created object, of type spOpacityCasterSettings
		 */
		spOpacityCasterSettings CreateOpacityCasterSettings() const { return spOpacityCasterSettings( this->sgapi , this->sgapi->fpCreateOpacityCasterSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type INormalCaster
		 * Documentation from INormalCaster:
		 * NormalCaster is the interface used to cast normals data onto the receiving 
		 * geometry. 
		 * @return the created object, of type spNormalCaster
		 */
		spNormalCaster CreateNormalCaster() const { return spNormalCaster( this->sgapi , this->sgapi->fpCreateNormalCaster()); }

		/**
		 * Creates and returns a counted pointer to an object of type INormalCasterSettings
		 * Documentation from INormalCasterSettings:
		 * NormalCasterSettings is the interface used to manage settings for a normal 
		 * caster 
		 * @return the created object, of type spNormalCasterSettings
		 */
		spNormalCasterSettings CreateNormalCasterSettings() const { return spNormalCasterSettings( this->sgapi , this->sgapi->fpCreateNormalCasterSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type INormalRepairer
		 * Documentation from INormalRepairer:
		 * Repairs normals on a processed geometry. 
		 * @return the created object, of type spNormalRepairer
		 */
		spNormalRepairer CreateNormalRepairer() const { return spNormalRepairer( this->sgapi , this->sgapi->fpCreateNormalRepairer()); }

		/**
		 * Creates and returns a counted pointer to an object of type IDisplacementCaster
		 * Documentation from IDisplacementCaster:
		 * DisplacementCaster is used to store the delta-values between the original and 
		 * processed geometries. The values are divided by a scaling value, and clamped 
		 * into the -1 -> 1 range before being stored into an image. 
		 * @return the created object, of type spDisplacementCaster
		 */
		spDisplacementCaster CreateDisplacementCaster() const { return spDisplacementCaster( this->sgapi , this->sgapi->fpCreateDisplacementCaster()); }

		/**
		 * Creates and returns a counted pointer to an object of type IDisplacementCasterSettings
		 * Documentation from IDisplacementCasterSettings:
		 * DisplacementCasterSettings is used to store the settings for a displacement 
		 * caster 
		 * @return the created object, of type spDisplacementCasterSettings
		 */
		spDisplacementCasterSettings CreateDisplacementCasterSettings() const { return spDisplacementCasterSettings( this->sgapi , this->sgapi->fpCreateDisplacementCasterSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type ITangentCalculator
		 * Documentation from ITangentCalculator:
		 * TangentCalculator calculates tangent vectors for geometry data objects. One 
		 * corner field of texture coordinates must exist, as well as normals. The tangents 
		 * are placed into two corner fields called "Tangents" and "Bitangents". If any 
		 * of these fields already exists, it is replaced by the new field. 
		 * @return the created object, of type spTangentCalculator
		 */
		spTangentCalculator CreateTangentCalculator() const { return spTangentCalculator( this->sgapi , this->sgapi->fpCreateTangentCalculator()); }

		/**
		 * Creates and returns a counted pointer to an object of type IReductionSettings
		 * Documentation from IReductionSettings:
		 * Settings for the ReductionProcessor class. Handles all the settings for Simplygons 
		 * simplification algorithms. The user can tell the reduction processor which 
		 * features are important by using the 'FeatureFlags' parameter, and also the 
		 * relative importance of these features using the Set{feature}Importance methods. 
		 * Also settings for things like symmetry are set here. 
		 * @return the created object, of type spReductionSettings
		 */
		spReductionSettings CreateReductionSettings() const { return spReductionSettings( this->sgapi , this->sgapi->fpCreateReductionSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IReductionProcessor
		 * Documentation from IReductionProcessor:
		 * ReductionProcessor welds, removes t-junctions, removes double-triangles and 
		 * reduces the triangle count of the Geometry. It also calculates new normals 
		 * for the reduced and optimized Geometry. 
		 * @return the created object, of type spReductionProcessor
		 */
		spReductionProcessor CreateReductionProcessor() const { return spReductionProcessor( this->sgapi , this->sgapi->fpCreateReductionProcessor()); }

		/**
		 * Creates and returns a counted pointer to an object of type IRemeshingLegacyProcessor
		 * Documentation from IRemeshingLegacyProcessor:
		 * RemeshingLegacyProcessor creates a new geometry that is based on the input 
		 * geometry, but that is topologically based on the size of the input geometry 
		 * rendered at a specific screen size, and allowed pixel error. The remesher will 
		 * on demand also add texture coordinates and a mapping texture to the output 
		 * remeshed geometry. The geometry that is to be remeshed can be defined either 
		 * using an in-memory geometry data object, or using a geometry file placed on 
		 * disk, the latter being the preferred method, if the source geometry is very 
		 * large as it can be swapped in/out of memory as needed. 
		 * @return the created object, of type spRemeshingLegacyProcessor
		 */
		spRemeshingLegacyProcessor CreateRemeshingLegacyProcessor() const { return spRemeshingLegacyProcessor( this->sgapi , this->sgapi->fpCreateRemeshingLegacyProcessor()); }

		/**
		 * Creates and returns a counted pointer to an object of type IRemeshingProcessor
		 * Documentation from IRemeshingProcessor:
		 * The RemeshingProcessor takes an input scene and replaces it with a lightweight 
		 * proxy geometry that resembles the original, but does not share vertex data 
		 * or parts of the original mesh data. The remeshed object is created and optimized 
		 * for a certain on-screen pixel size - which means that holes and parts that 
		 * are close to each other will have their gaps filled if the distance is below 
		 * a pixel. At default settings, the proxy mesh is assumed to be viewed from the 
		 * outside. Any interior mesh that cannot be seen is removed. The result is a 
		 * very light-weight mesh that is highly optimized for real-time viewing, or to 
		 * speed up off-line rendering of small objects. Simplygon is capable of remeshing 
		 * arbitrary geometry, including non-manifold surfaces. 
		 * @return the created object, of type spRemeshingProcessor
		 */
		spRemeshingProcessor CreateRemeshingProcessor() const { return spRemeshingProcessor( this->sgapi , this->sgapi->fpCreateRemeshingProcessor()); }

		/**
		 * Creates and returns a counted pointer to an object of type IScene
		 * Documentation from IScene:
		 * Scene is the main keeper of a scene and scene graph in simplygon. The scene 
		 * is self-contained, with materials, textures, etc. to describe a full scene. 
		 * @return the created object, of type spScene
		 */
		spScene CreateScene() const { return spScene( this->sgapi , this->sgapi->fpCreateScene()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISceneNode
		 * Documentation from ISceneNode:
		 * SceneNode is the base class for all scene graph nodes in simplygon. It has 
		 * relative transformation to its parent, and functions to add children to the 
		 * node. 
		 * @return the created object, of type spSceneNode
		 */
		spSceneNode CreateSceneNode() const { return spSceneNode( this->sgapi , this->sgapi->fpCreateSceneNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISceneNodeCollection
		 * Documentation from ISceneNodeCollection:
		 * SceneNodeCollection holds a number of SceneNode objects. The objects can be 
		 * looked up by their names (if they have been named through SetName()). 
		 * @return the created object, of type spSceneNodeCollection
		 */
		spSceneNodeCollection CreateSceneNodeCollection() const { return spSceneNodeCollection( this->sgapi , this->sgapi->fpCreateSceneNodeCollection()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISceneMesh
		 * Documentation from ISceneMesh:
		 * SceneMesh is the mesh node in the simplygon scene graph 
		 * @return the created object, of type spSceneMesh
		 */
		spSceneMesh CreateSceneMesh() const { return spSceneMesh( this->sgapi , this->sgapi->fpCreateSceneMesh()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISceneLodGroup
		 * Documentation from ISceneLodGroup:
		 * SceneLodGroup is a LOD grouping for the scene graph 
		 * @return the created object, of type spSceneLodGroup
		 */
		spSceneLodGroup CreateSceneLodGroup() const { return spSceneLodGroup( this->sgapi , this->sgapi->fpCreateSceneLodGroup()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISceneBone
		 * Documentation from ISceneBone:
		 * SceneBone is the bone node in the simplygon scene graph 
		 * @return the created object, of type spSceneBone
		 */
		spSceneBone CreateSceneBone() const { return spSceneBone( this->sgapi , this->sgapi->fpCreateSceneBone()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISceneBoneTable
		 * Documentation from ISceneBoneTable:
		 * SceneBoneTable keeps information on bones used while rendering. 
		 * @return the created object, of type spSceneBoneTable
		 */
		spSceneBoneTable CreateSceneBoneTable() const { return spSceneBoneTable( this->sgapi , this->sgapi->fpCreateSceneBoneTable()); }

		/**
		 * Creates and returns a counted pointer to an object of type IScenePlane
		 * Documentation from IScenePlane:
		 * ScenePlane is the plane node in the simplygon scene graph that can be used 
		 * in various processes, for example as a cutting plane in the RemeshingProcessor. 
		 * @return the created object, of type spScenePlane
		 */
		spScenePlane CreateScenePlane() const { return spScenePlane( this->sgapi , this->sgapi->fpCreateScenePlane()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISceneCamera
		 * Documentation from ISceneCamera:
		 * SceneCamera is the camera node in the Simplygon scene graph. SceneCamera contains 
		 * settings that specify how the camera works and it contains a number of views 
		 * for that type of camera. A view is a combination of a CameraPosition and a 
		 * TargetPosition. The SceneCamera can contain any number of views but every element 
		 * in TargetPositions has to correspond to a tuple element in CameraPosition. 
		 * TargetPositions is not needed if the camera is set to being omni directional. 
		 * @return the created object, of type spSceneCamera
		 */
		spSceneCamera CreateSceneCamera() const { return spSceneCamera( this->sgapi , this->sgapi->fpCreateSceneCamera()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISceneExporter
		 * Documentation from ISceneExporter:
		 * Class for saving scene data to different file formats depending on the extension 
		 * of the set file name. 
		 * @return the created object, of type spSceneExporter
		 */
		spSceneExporter CreateSceneExporter() const { return spSceneExporter( this->sgapi , this->sgapi->fpCreateSceneExporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISceneImporter
		 * Documentation from ISceneImporter:
		 * Class for loading scene data from different file formats. 
		 * @return the created object, of type spSceneImporter
		 */
		spSceneImporter CreateSceneImporter() const { return spSceneImporter( this->sgapi , this->sgapi->fpCreateSceneImporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISelectionSet
		 * Documentation from ISelectionSet:
		 * SelectionSet is a set of scene node GUIDs referencing scene nodes in a scene. 
		 * @return the created object, of type spSelectionSet
		 */
		spSelectionSet CreateSelectionSet() const { return spSelectionSet( this->sgapi , this->sgapi->fpCreateSelectionSet()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISelectionSetTable
		 * Documentation from ISelectionSetTable:
		 * SelectionSetTable keeps a table of SelectionSet. 
		 * @return the created object, of type spSelectionSetTable
		 */
		spSelectionSetTable CreateSelectionSetTable() const { return spSelectionSetTable( this->sgapi , this->sgapi->fpCreateSelectionSetTable()); }

		/**
		 * Creates and returns a counted pointer to an object of type ITexture
		 * Documentation from ITexture:
		 * Texture describes a texture object, containing either image data or a path 
		 * that is referenced by texture nodes in materials. 
		 * @return the created object, of type spTexture
		 */
		spTexture CreateTexture() const { return spTexture( this->sgapi , this->sgapi->fpCreateTexture()); }

		/**
		 * Creates and returns a counted pointer to an object of type ITextureTable
		 * Documentation from ITextureTable:
		 * TextureTable keeps information on textures used while rendering. 
		 * @return the created object, of type spTextureTable
		 */
		spTextureTable CreateTextureTable() const { return spTextureTable( this->sgapi , this->sgapi->fpCreateTextureTable()); }

		/**
		 * Creates and returns a counted pointer to an object of type IImageDataImporter
		 * Documentation from IImageDataImporter:
		 * Class for loading image data from different file formats. 
		 * @return the created object, of type spImageDataImporter
		 */
		spImageDataImporter CreateImageDataImporter() const { return spImageDataImporter( this->sgapi , this->sgapi->fpCreateImageDataImporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingTextureNode
		 * Documentation from IShadingTextureNode:
		 * TextureNode describes a texture source node in a shading network. 
		 * @return the created object, of type spShadingTextureNode
		 */
		spShadingTextureNode CreateShadingTextureNode() const { return spShadingTextureNode( this->sgapi , this->sgapi->fpCreateShadingTextureNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingSwizzlingNode
		 * Documentation from IShadingSwizzlingNode:
		 * SwizzlingNode describes a node that can remap the input to the specified output. 
		 * @return the created object, of type spShadingSwizzlingNode
		 */
		spShadingSwizzlingNode CreateShadingSwizzlingNode() const { return spShadingSwizzlingNode( this->sgapi , this->sgapi->fpCreateShadingSwizzlingNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingColorNode
		 * Documentation from IShadingColorNode:
		 * ColorNode describes a single color source node in a shading network 
		 * @return the created object, of type spShadingColorNode
		 */
		spShadingColorNode CreateShadingColorNode() const { return spShadingColorNode( this->sgapi , this->sgapi->fpCreateShadingColorNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingAddNode
		 * Documentation from IShadingAddNode:
		 * AddNode describes a single addition shading node in a shading network. Input 
		 * 1 and 2 are added per-component to produce the output. 
		 * @return the created object, of type spShadingAddNode
		 */
		spShadingAddNode CreateShadingAddNode() const { return spShadingAddNode( this->sgapi , this->sgapi->fpCreateShadingAddNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingSubtractNode
		 * Documentation from IShadingSubtractNode:
		 * SubtractNode describes a single subtracting shading node in a shading network. 
		 * Input 2 is subtracted from input 1 per-component. 
		 * @return the created object, of type spShadingSubtractNode
		 */
		spShadingSubtractNode CreateShadingSubtractNode() const { return spShadingSubtractNode( this->sgapi , this->sgapi->fpCreateShadingSubtractNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingMultiplyNode
		 * Documentation from IShadingMultiplyNode:
		 * MultiplyNode describes a single multiplying shading node in a shading network. 
		 * Input 1 and Input 2 is multiplied per-component. 
		 * @return the created object, of type spShadingMultiplyNode
		 */
		spShadingMultiplyNode CreateShadingMultiplyNode() const { return spShadingMultiplyNode( this->sgapi , this->sgapi->fpCreateShadingMultiplyNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingColorCorrectionNode
		 * Documentation from IShadingColorCorrectionNode:
		 * ShadingColorCorrectionNode is used to adjust the Hue & Saturation of Input 
		 * 1, using Input 2 (r=Hue change, g=Saturation change). The adjustments are in 
		 * the range (-1 to 1), where 0 equals no adjustment. In the case of Hue, -1 or 
		 * 1 equals a full rotation in either direction. In the case of Saturation, -1 
		 * is fully grayscale, and 1 is double the saturation of before. 
		 * @return the created object, of type spShadingColorCorrectionNode
		 */
		spShadingColorCorrectionNode CreateShadingColorCorrectionNode() const { return spShadingColorCorrectionNode( this->sgapi , this->sgapi->fpCreateShadingColorCorrectionNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingPowNode
		 * Documentation from IShadingPowNode:
		 * This node describes an exponentiation. The output will be Input 1 to the power 
		 * of Input 2, and it is calculated per-component. 
		 * @return the created object, of type spShadingPowNode
		 */
		spShadingPowNode CreateShadingPowNode() const { return spShadingPowNode( this->sgapi , this->sgapi->fpCreateShadingPowNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingDivideNode
		 * Documentation from IShadingDivideNode:
		 * DivideNode describes a single division shading node node in a shading network. 
		 * Input 1 is divided by Input 2 per-component to produce the output. 
		 * @return the created object, of type spShadingDivideNode
		 */
		spShadingDivideNode CreateShadingDivideNode() const { return spShadingDivideNode( this->sgapi , this->sgapi->fpCreateShadingDivideNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingClampNode
		 * Documentation from IShadingClampNode:
		 * ClampNode describes a single clamp shading node in a shading network. Input 
		 * 1 is clamped per-component between Input 2 and 3. 
		 * @return the created object, of type spShadingClampNode
		 */
		spShadingClampNode CreateShadingClampNode() const { return spShadingClampNode( this->sgapi , this->sgapi->fpCreateShadingClampNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingMaxNode
		 * Documentation from IShadingMaxNode:
		 * MaxNode describes a single max shading node in a shading network. The output 
		 * has the per-channel max values of the two inputs. 
		 * @return the created object, of type spShadingMaxNode
		 */
		spShadingMaxNode CreateShadingMaxNode() const { return spShadingMaxNode( this->sgapi , this->sgapi->fpCreateShadingMaxNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingMinNode
		 * Documentation from IShadingMinNode:
		 * MinNode describes a single min shading node in a shading network. The output 
		 * has the per-channel min values of the two inputs. 
		 * @return the created object, of type spShadingMinNode
		 */
		spShadingMinNode CreateShadingMinNode() const { return spShadingMinNode( this->sgapi , this->sgapi->fpCreateShadingMinNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingStepNode
		 * Documentation from IShadingStepNode:
		 * StepNode describes a single step shading node, where the per-component output 
		 * is either 1 or 0 depending on if input0 is larger or smaller than input1. Basically, 
		 * (Input0 >= Input1) ? 1 : 0 
		 * @return the created object, of type spShadingStepNode
		 */
		spShadingStepNode CreateShadingStepNode() const { return spShadingStepNode( this->sgapi , this->sgapi->fpCreateShadingStepNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingEqualNode
		 * Documentation from IShadingEqualNode:
		 * ShadingEqualNode describes an "is equal to" operator, where the per-component 
		 * output is either 1 or 0 depending on if input0 is equal to input1. Basically, 
		 * (Input0 == Input1) ? 1 : 0 
		 * @return the created object, of type spShadingEqualNode
		 */
		spShadingEqualNode CreateShadingEqualNode() const { return spShadingEqualNode( this->sgapi , this->sgapi->fpCreateShadingEqualNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingNotEqualNode
		 * Documentation from IShadingNotEqualNode:
		 * NotEqualNode describes the "is not equal" operator, where the per-component 
		 * output is either 1 or 0 depending on if input0 is equal to input1. Basically, 
		 * (Input0 != Input1) ? 1 : 0 
		 * @return the created object, of type spShadingNotEqualNode
		 */
		spShadingNotEqualNode CreateShadingNotEqualNode() const { return spShadingNotEqualNode( this->sgapi , this->sgapi->fpCreateShadingNotEqualNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingVertexColorNode
		 * Documentation from IShadingVertexColorNode:
		 * VertexColorNode describes a vertex color source node in a shading network. 
		 * @return the created object, of type spShadingVertexColorNode
		 */
		spShadingVertexColorNode CreateShadingVertexColorNode() const { return spShadingVertexColorNode( this->sgapi , this->sgapi->fpCreateShadingVertexColorNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingInterpolateNode
		 * Documentation from IShadingInterpolateNode:
		 * InterpolateNode describes a single interpolating shading node node in a shading 
		 * network. Input 1 and Input 2 is interpolated per-component using Input 3. Blend 
		 * values below 0 and over 1 will be clamped. 
		 * @return the created object, of type spShadingInterpolateNode
		 */
		spShadingInterpolateNode CreateShadingInterpolateNode() const { return spShadingInterpolateNode( this->sgapi , this->sgapi->fpCreateShadingInterpolateNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingCustomNode
		 * Documentation from IShadingCustomNode:
		 * CustomNode describes a custom shading node in a shading network. The output 
		 * is produced based on customizable user specified operations. The custom node 
		 * has a user specified amount of input parameters. Use SetInputCount() to specify 
		 * the number of inputs. The user has to assign and implement event handlers (called 
		 * observers) for the custom node to be able to evaluate to colors. See CustomNodeExample 
		 * and API documentation for further explanations and code samples. 
		 * @return the created object, of type spShadingCustomNode
		 */
		spShadingCustomNode CreateShadingCustomNode() const { return spShadingCustomNode( this->sgapi , this->sgapi->fpCreateShadingCustomNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingLayeredBlendNode
		 * Documentation from IShadingLayeredBlendNode:
		 * LayeredBlendNode is a node with an arbitrary number of inputs that can be blended 
		 * differently. 
		 * @return the created object, of type spShadingLayeredBlendNode
		 */
		spShadingLayeredBlendNode CreateShadingLayeredBlendNode() const { return spShadingLayeredBlendNode( this->sgapi , this->sgapi->fpCreateShadingLayeredBlendNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingNormalize3Node
		 * Documentation from IShadingNormalize3Node:
		 * This node describes an normalization of the x,y,z components of the input. 
		 * @return the created object, of type spShadingNormalize3Node
		 */
		spShadingNormalize3Node CreateShadingNormalize3Node() const { return spShadingNormalize3Node( this->sgapi , this->sgapi->fpCreateShadingNormalize3Node()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingSqrtNode
		 * Documentation from IShadingSqrtNode:
		 * This node describes a square root calculation. The output will be the per-component 
		 * square root of input 1 
		 * @return the created object, of type spShadingSqrtNode
		 */
		spShadingSqrtNode CreateShadingSqrtNode() const { return spShadingSqrtNode( this->sgapi , this->sgapi->fpCreateShadingSqrtNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingDot3Node
		 * Documentation from IShadingDot3Node:
		 * This node describes an dot of the x,y,z components of the inputs. 
		 * @return the created object, of type spShadingDot3Node
		 */
		spShadingDot3Node CreateShadingDot3Node() const { return spShadingDot3Node( this->sgapi , this->sgapi->fpCreateShadingDot3Node()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingCross3Node
		 * Documentation from IShadingCross3Node:
		 * This node describes the cross of the x,y,z components of the input. 
		 * @return the created object, of type spShadingCross3Node
		 */
		spShadingCross3Node CreateShadingCross3Node() const { return spShadingCross3Node( this->sgapi , this->sgapi->fpCreateShadingCross3Node()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingCosNode
		 * Documentation from IShadingCosNode:
		 * This node describes cosine of the x,y,z,w components of the input. 
		 * @return the created object, of type spShadingCosNode
		 */
		spShadingCosNode CreateShadingCosNode() const { return spShadingCosNode( this->sgapi , this->sgapi->fpCreateShadingCosNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingSinNode
		 * Documentation from IShadingSinNode:
		 * This node describes Sin of the x,y,z components of the input. 
		 * @return the created object, of type spShadingSinNode
		 */
		spShadingSinNode CreateShadingSinNode() const { return spShadingSinNode( this->sgapi , this->sgapi->fpCreateShadingSinNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingGreaterThanNode
		 * Documentation from IShadingGreaterThanNode:
		 * GreaterThanNode describes the "is greater than" operator, where the per-component 
		 * output is either 1 or 0 depending on if input0 is greater than input1. Basically, 
		 * (Input0 > Input1) ? 1 : 0 
		 * @return the created object, of type spShadingGreaterThanNode
		 */
		spShadingGreaterThanNode CreateShadingGreaterThanNode() const { return spShadingGreaterThanNode( this->sgapi , this->sgapi->fpCreateShadingGreaterThanNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingLessThanNode
		 * Documentation from IShadingLessThanNode:
		 * LessThanNode describes the "is less than" operator, where the per-component 
		 * output is either 1 or 0 depending on if input0 is LessThan to input1. Basically, 
		 * (Input0 < Input1) ? 1 : 0 
		 * @return the created object, of type spShadingLessThanNode
		 */
		spShadingLessThanNode CreateShadingLessThanNode() const { return spShadingLessThanNode( this->sgapi , this->sgapi->fpCreateShadingLessThanNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShadingGeometryFieldNode
		 * Documentation from IShadingGeometryFieldNode:
		 * Geometry field node describes a source node for geometry field data in a shading 
		 * network, such as normals and tangents. 
		 * @return the created object, of type spShadingGeometryFieldNode
		 */
		spShadingGeometryFieldNode CreateShadingGeometryFieldNode() const { return spShadingGeometryFieldNode( this->sgapi , this->sgapi->fpCreateShadingGeometryFieldNode()); }

		/**
		 * Creates and returns a counted pointer to an object of type IShaderGenerator
		 * Documentation from IShaderGenerator:
		 * Given a material, the shader data class keeps the relevant shader data and 
		 * is able to generate a GLSL/HLSL shader. 
		 * @return the created object, of type spShaderGenerator
		 */
		spShaderGenerator CreateShaderGenerator() const { return spShaderGenerator( this->sgapi , this->sgapi->fpCreateShaderGenerator()); }

		/**
		 * Creates and returns a counted pointer to an object of type IAggregationProcessor
		 * Documentation from IAggregationProcessor:
		 * AggregationProcessor combines all specified geometries in the scene into one 
		 * geometry. All materials are combined and receive a new shared texture atlas. 
		 * @return the created object, of type spAggregationProcessor
		 */
		spAggregationProcessor CreateAggregationProcessor() const { return spAggregationProcessor( this->sgapi , this->sgapi->fpCreateAggregationProcessor()); }

		/**
		 * Creates and returns a counted pointer to an object of type IAggregationSettings
		 * Documentation from IAggregationSettings:
		 * Settings for the AggregationSettings class. The AggregationProcessor converts 
		 * entire scenes containing multiple draw calls into a single new object with 
		 * a single texture per material channel. The user can set whether or not the 
		 * AggregationProcessor should create new UVs based on the old UVs or create a 
		 * completely new UV parameterization. 
		 * @return the created object, of type spAggregationSettings
		 */
		spAggregationSettings CreateAggregationSettings() const { return spAggregationSettings( this->sgapi , this->sgapi->fpCreateAggregationSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IChartAggregator
		 * Documentation from IChartAggregator:
		 * Computes new texture coordinates for a geometry with overlapping UV charts. 
		 * @return the created object, of type spChartAggregator
		 */
		spChartAggregator CreateChartAggregator() const { return spChartAggregator( this->sgapi , this->sgapi->fpCreateChartAggregator()); }

		/**
		 * Creates and returns a counted pointer to an object of type IVertexColorCasterSettings
		 * Documentation from IVertexColorCasterSettings:
		 * VertexColorCasterSettings is the interface for basic vertex color caster settings. 
		 * @return the created object, of type spVertexColorCasterSettings
		 */
		spVertexColorCasterSettings CreateVertexColorCasterSettings() const { return spVertexColorCasterSettings( this->sgapi , this->sgapi->fpCreateVertexColorCasterSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IVertexColorCaster
		 * Documentation from IVertexColorCaster:
		 * VertexColorCaster. 
		 * @return the created object, of type spVertexColorCaster
		 */
		spVertexColorCaster CreateVertexColorCaster() const { return spVertexColorCaster( this->sgapi , this->sgapi->fpCreateVertexColorCaster()); }

		/**
		 * Creates and returns a counted pointer to an object of type IImageDataExporter
		 * Documentation from IImageDataExporter:
		 * Class for saving image data to different file formats. 
		 * @return the created object, of type spImageDataExporter
		 */
		spImageDataExporter CreateImageDataExporter() const { return spImageDataExporter( this->sgapi , this->sgapi->fpCreateImageDataExporter()); }

		/**
		 * Creates and returns a counted pointer to an object of type IAmbientOcclusionCaster
		 * Documentation from IAmbientOcclusionCaster:
		 * AmbientOcclusionCaster generates an ambient occlusion map based on the original 
		 * geometry, and casts it. 
		 * @return the created object, of type spAmbientOcclusionCaster
		 */
		spAmbientOcclusionCaster CreateAmbientOcclusionCaster() const { return spAmbientOcclusionCaster( this->sgapi , this->sgapi->fpCreateAmbientOcclusionCaster()); }

		/**
		 * Creates and returns a counted pointer to an object of type IAmbientOcclusionCasterSettings
		 * Documentation from IAmbientOcclusionCasterSettings:
		 * AmbientOcclusionCasterSettings manages settings for an ambient occlusion caster. 
		 * @return the created object, of type spAmbientOcclusionCasterSettings
		 */
		spAmbientOcclusionCasterSettings CreateAmbientOcclusionCasterSettings() const { return spAmbientOcclusionCasterSettings( this->sgapi , this->sgapi->fpCreateAmbientOcclusionCasterSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IImpostorProcessor
		 * Documentation from IImpostorProcessor:
		 * The ImpostorProcessor generates an impostor of one of these impostor types: 
		 * BillboardCloud, Flipbook or ImpostorFromSingleView. 
		 * @return the created object, of type spImpostorProcessor
		 */
		spImpostorProcessor CreateImpostorProcessor() const { return spImpostorProcessor( this->sgapi , this->sgapi->fpCreateImpostorProcessor()); }

		/**
		 * Creates and returns a counted pointer to an object of type IImpostorSettings
		 * Documentation from IImpostorSettings:
		 * Settings for the ImpostorProcessor 
		 * @return the created object, of type spImpostorSettings
		 */
		spImpostorSettings CreateImpostorSettings() const { return spImpostorSettings( this->sgapi , this->sgapi->fpCreateImpostorSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type ISurfaceMapper
		 * Documentation from ISurfaceMapper:
		 * ISurfaceMapper creates a mapping image between two user-defined geometries. 
		 * The mapper basically looks for the source geometry in the inverse normal direction 
		 * from the outwardly offset destination geometry, and maps pixels accordingly. 
		 * This means that you can modify the normals of the destination geometry to adjust 
		 * the search direction to your liking. The geometries can either be set as IGeometryDatas 
		 * or as the root nodes of scenes. If both are set, the scene is used. If only 
		 * a single source or a destination is set, or if the source and destination are 
		 * the same scene or geometry, the surface mapper will map the mesh onto itself. 
		 * @return the created object, of type spSurfaceMapper
		 */
		spSurfaceMapper CreateSurfaceMapper() const { return spSurfaceMapper( this->sgapi , this->sgapi->fpCreateSurfaceMapper()); }

		/**
		 * Creates and returns a counted pointer to an object of type IOcclusionMeshProcessor
		 * Documentation from IOcclusionMeshProcessor:
		 * The occlusion mesh processor creates a reconstruction of the input mesh from 
		 * its silhouette. This means concavities and internal geometry disappear. WARNING: 
		 * Experimental. Generates nice meshes, but currently very slow at high settings. 
		 * Recommended onscreensize ~100 
		 * @return the created object, of type spOcclusionMeshProcessor
		 */
		spOcclusionMeshProcessor CreateOcclusionMeshProcessor() const { return spOcclusionMeshProcessor( this->sgapi , this->sgapi->fpCreateOcclusionMeshProcessor()); }

		/**
		 * Creates and returns a counted pointer to an object of type IImageComparer
		 * Documentation from IImageComparer:
		 * Compares images. 
		 * @return the created object, of type spImageComparer
		 */
		spImageComparer CreateImageComparer() const { return spImageComparer( this->sgapi , this->sgapi->fpCreateImageComparer()); }

		/**
		 * Creates and returns a counted pointer to an object of type IRecommendedTextureSizeCalculator
		 * Documentation from IRecommendedTextureSizeCalculator:
		 * Estimates a coarse recommended UV size (width and height) for a geometry based 
		 * on only its surface area and either the distance it is allowed to deviate or 
		 * its intended on screen size. The UVs are assumed to be unique i.e. not tiled/repeated. 
		 * RecommendedWidth and RecommendedHeight will only differ from each other if 
		 * ForcePower2Texture is enabled. 
		 * @return the created object, of type spRecommendedTextureSizeCalculator
		 */
		spRecommendedTextureSizeCalculator CreateRecommendedTextureSizeCalculator() const { return spRecommendedTextureSizeCalculator( this->sgapi , this->sgapi->fpCreateRecommendedTextureSizeCalculator()); }

		/**
		 * Creates and returns a counted pointer to an object of type IPartRemover
		 * Documentation from IPartRemover:
		 * The PartRemover tool can identify unconnected sub-meshes, and remove meshes 
		 * that fall below a set size threshold. This size threshold can be set globally 
		 * for the entire geometry, or per-material to be able to remove things like decals 
		 * effectively. 
		 * @return the created object, of type spPartRemover
		 */
		spPartRemover CreatePartRemover() const { return spPartRemover( this->sgapi , this->sgapi->fpCreatePartRemover()); }

		/**
		 * Creates and returns a counted pointer to an object of type IWelder
		 * Documentation from IWelder:
		 * Welds vertices within the geometry or scene together. 
		 * @return the created object, of type spWelder
		 */
		spWelder CreateWelder() const { return spWelder( this->sgapi , this->sgapi->fpCreateWelder()); }

		/**
		 * Creates and returns a counted pointer to an object of type ITJunctionEliminator
		 * Documentation from ITJunctionEliminator:
		 * Removes t-junctions by subdividing triangles and welding vertices 
		 * @return the created object, of type spTJunctionEliminator
		 */
		spTJunctionEliminator CreateTJunctionEliminator() const { return spTJunctionEliminator( this->sgapi , this->sgapi->fpCreateTJunctionEliminator()); }

		/**
		 * Creates and returns a counted pointer to an object of type IPipelineBatch
		 * Documentation from IPipelineBatch:
		 * Control object to launch pipelines in batches, both locally and distributed 
		 * @return the created object, of type spPipelineBatch
		 */
		spPipelineBatch CreatePipelineBatch() const { return spPipelineBatch( this->sgapi , this->sgapi->fpCreatePipelineBatch()); }

		/**
		 * Creates and returns a counted pointer to an object of type IPipelineSerializer
		 * @return the created object, of type spPipelineSerializer
		 */
		spPipelineSerializer CreatePipelineSerializer() const { return spPipelineSerializer( this->sgapi , this->sgapi->fpCreatePipelineSerializer()); }

		/**
		 * Creates and returns a counted pointer to an object of type IReductionPipeline
		 * Documentation from IReductionPipeline:
		 * ReductionPipeline provides a pipeline for a single reduction processor to be 
		 * applied on the input scene. 
		 * @return the created object, of type spReductionPipeline
		 */
		spReductionPipeline CreateReductionPipeline() const { return spReductionPipeline( this->sgapi , this->sgapi->fpCreateReductionPipeline()); }

		/**
		 * Creates and returns a counted pointer to an object of type IRemeshingLegacyPipeline
		 * Documentation from IRemeshingLegacyPipeline:
		 * RemeshingLegacyPipeline provides a pipeline for a single remeshing legacy processor 
		 * to be applied on the input scene. 
		 * @return the created object, of type spRemeshingLegacyPipeline
		 */
		spRemeshingLegacyPipeline CreateRemeshingLegacyPipeline() const { return spRemeshingLegacyPipeline( this->sgapi , this->sgapi->fpCreateRemeshingLegacyPipeline()); }

		/**
		 * Creates and returns a counted pointer to an object of type IAggregationPipeline
		 * Documentation from IAggregationPipeline:
		 * AggregationPipeline provides a pipeline for a single aggregation processor 
		 * to be applied on the input scene. 
		 * @return the created object, of type spAggregationPipeline
		 */
		spAggregationPipeline CreateAggregationPipeline() const { return spAggregationPipeline( this->sgapi , this->sgapi->fpCreateAggregationPipeline()); }

		/**
		 * Creates and returns a counted pointer to an object of type IPipelineSettings
		 * Documentation from IPipelineSettings:
		 * PipelineSettings is the interface used to manage settings for a pipeline 
		 * @return the created object, of type spPipelineSettings
		 */
		spPipelineSettings CreatePipelineSettings() const { return spPipelineSettings( this->sgapi , this->sgapi->fpCreatePipelineSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IRemeshingPipeline
		 * Documentation from IRemeshingPipeline:
		 * RemeshingPipeline provides a pipeline for a single remeshing processor to be 
		 * applied on the input scene. 
		 * @return the created object, of type spRemeshingPipeline
		 */
		spRemeshingPipeline CreateRemeshingPipeline() const { return spRemeshingPipeline( this->sgapi , this->sgapi->fpCreateRemeshingPipeline()); }

		/**
		 * Creates and returns a counted pointer to an object of type IPassthroughPipeline
		 * Documentation from IPassthroughPipeline:
		 * PassthroughPipeline provides an empty pipeline for creating a cascading pipeline 
		 * using a single dummy root node. It does not process the input scene in any 
		 * way. 
		 * @return the created object, of type spPassthroughPipeline
		 */
		spPassthroughPipeline CreatePassthroughPipeline() const { return spPassthroughPipeline( this->sgapi , this->sgapi->fpCreatePassthroughPipeline()); }

		/**
		 * Creates and returns a counted pointer to an object of type IGeometryDataCaster
		 * Documentation from IGeometryDataCaster:
		 * GeometryDataCaster is used to cast original GeometryData information to an 
		 * image using mapping image 
		 * @return the created object, of type spGeometryDataCaster
		 */
		spGeometryDataCaster CreateGeometryDataCaster() const { return spGeometryDataCaster( this->sgapi , this->sgapi->fpCreateGeometryDataCaster()); }

		/**
		 * Creates and returns a counted pointer to an object of type IGeometryDataCasterSettings
		 * Documentation from IGeometryDataCasterSettings:
		 * GeometryDataCasterSettings is the interface used to manage settings for GeometryDataCaster 
		 * @return the created object, of type spGeometryDataCasterSettings
		 */
		spGeometryDataCasterSettings CreateGeometryDataCasterSettings() const { return spGeometryDataCasterSettings( this->sgapi , this->sgapi->fpCreateGeometryDataCasterSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IGenerateLightmapTexCoordSettings
		 * Documentation from IGenerateLightmapTexCoordSettings:
		 * GenerateLightmapTexCoordSettings is the interface used to manage light map 
		 * uv generation. 
		 * @return the created object, of type spGenerateLightmapTexCoordSettings
		 */
		spGenerateLightmapTexCoordSettings CreateGenerateLightmapTexCoordSettings() const { return spGenerateLightmapTexCoordSettings( this->sgapi , this->sgapi->fpCreateGenerateLightmapTexCoordSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IBillboardCloudSettings
		 * Documentation from IBillboardCloudSettings:
		 * Settings for the ImpostorType: BillboardCloud 
		 * @return the created object, of type spBillboardCloudSettings
		 */
		spBillboardCloudSettings CreateBillboardCloudSettings() const { return spBillboardCloudSettings( this->sgapi , this->sgapi->fpCreateBillboardCloudSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IFlipbookSettings
		 * Documentation from IFlipbookSettings:
		 * Settings for the ImpostorType: FlipBook 
		 * @return the created object, of type spFlipbookSettings
		 */
		spFlipbookSettings CreateFlipbookSettings() const { return spFlipbookSettings( this->sgapi , this->sgapi->fpCreateFlipbookSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IImpostorFromSingleViewSettings
		 * Documentation from IImpostorFromSingleViewSettings:
		 * Settings for the ImpostorType: ImpostorFromSingleView. 
		 * @return the created object, of type spImpostorFromSingleViewSettings
		 */
		spImpostorFromSingleViewSettings CreateImpostorFromSingleViewSettings() const { return spImpostorFromSingleViewSettings( this->sgapi , this->sgapi->fpCreateImpostorFromSingleViewSettings()); }

		/**
		 * Creates and returns a counted pointer to an object of type IImpostorFromSingleViewPipeline
		 * Documentation from IImpostorFromSingleViewPipeline:
		 * ImpostorFromSingleViewPipeline provides a pipeline for a impostor from single 
		 * view impostor processor to be applied on the input scene. 
		 * @return the created object, of type spImpostorFromSingleViewPipeline
		 */
		spImpostorFromSingleViewPipeline CreateImpostorFromSingleViewPipeline() const { return spImpostorFromSingleViewPipeline( this->sgapi , this->sgapi->fpCreateImpostorFromSingleViewPipeline()); }

		/**
		 * Creates and returns a counted pointer to an object of type IBillboardCloudPipeline
		 * Documentation from IBillboardCloudPipeline:
		 * BillboardCloudPipeline provides a pipeline for a billboard cloud impostor processor 
		 * to be applied on the input scene. 
		 * @return the created object, of type spBillboardCloudPipeline
		 */
		spBillboardCloudPipeline CreateBillboardCloudPipeline() const { return spBillboardCloudPipeline( this->sgapi , this->sgapi->fpCreateBillboardCloudPipeline()); }

		/**
		 * Creates and returns a counted pointer to an object of type IBillboardCloudVegetationPipeline
		 * Documentation from IBillboardCloudVegetationPipeline:
		 * BillboardCloudPipeline provides a pipeline for a billboard cloud vegetation 
		 * impostor processor to be applied on the input scene. 
		 * @return the created object, of type spBillboardCloudVegetationPipeline
		 */
		spBillboardCloudVegetationPipeline CreateBillboardCloudVegetationPipeline() const { return spBillboardCloudVegetationPipeline( this->sgapi , this->sgapi->fpCreateBillboardCloudVegetationPipeline()); }

		/**
		 * Creates and returns a counted pointer to an object of type IFlipbookPipeline
		 * Documentation from IFlipbookPipeline:
		 * FlipbookPipeline provides a pipeline for a flipbook impostor processor to be 
		 * applied on the input scene. 
		 * @return the created object, of type spFlipbookPipeline
		 */
		spFlipbookPipeline CreateFlipbookPipeline() const { return spFlipbookPipeline( this->sgapi , this->sgapi->fpCreateFlipbookPipeline()); }

		/**
		 * Creates and returns a counted pointer to an object of type IStringArray
		 * Documentation from IStringArray:
		 * StringArray is the string implementation of ValueArray. See ValueArray for 
		 * a description. 
		 * @return the created object, of type spStringArray
		 */
		spStringArray CreateStringArray() const { return spStringArray( this->sgapi , this->sgapi->fpCreateStringArray()); }

		/**
		 * Creates and returns a counted pointer to an object of type IOcclusionMeshPipeline
		 * Documentation from IOcclusionMeshPipeline:
		 * OcclusionMeshPipeline provides a pipeline for a single occlusion mesh processor 
		 * to be applied on the input scene. 
		 * @return the created object, of type spOcclusionMeshPipeline
		 */
		spOcclusionMeshPipeline CreateOcclusionMeshPipeline() const { return spOcclusionMeshPipeline( this->sgapi , this->sgapi->fpCreateOcclusionMeshPipeline()); }

		/**
		 * Sets the callback used to report errors
		 * @param handler is the new error handler object
		 * @return the previously registered handler object
		 */
		ErrorHandler *SetErrorHandler( ErrorHandler *handler ) const { handler->sgapi = this->sgapi; return (ErrorHandler*) this->sgapi->fpSimplygon_SetErrorHandler( handler ); }
		/**
		/**
		 * Returns the version of the Simplygon library as a string
		 * @return the library version
		 */
		spString GetVersion() const { return spString( this->sgapi , this->sgapi->fpSimplygon_GetVersion()); }
		/**
		 * Send telemetry to Simplygon
		 * @param eventCategory is the event category for the telemetry event
		 * @param integrationName is the integration name for the telemetry event
		 * @param integrationVersion is the integration version for the telemetry event
		 * @param contentJson is the telemetry content as a json string
		 */
		void SendTelemetry(const char* eventCategory, const char* integrationName, const char* integrationVersion, const char* contentJson) const { this->sgapi->fpSimplygon_SendTelemetry(eventCategory,integrationName,integrationVersion,contentJson); }
		/**
		 * Check if any warnings
		 */
		bool WarningOccurred() const { return this->sgapi->fpSimplygon_WarningOccurred(); }
		/**
		 * Check if any errors
		 */
		bool ErrorOccurred() const { return this->sgapi->fpSimplygon_ErrorOccurred(); }
		/**
		 * Get warning messages
		 * @param messages is the string array which will be filled with all the warning messages
		 */
		void GetWarningMessages(const spStringArray& messages) const { this->sgapi->fpSimplygon_GetWarningMessages(messages); }
		/**
		 * Get error messages
		 * @param messages is the string array which will be filled with all the error messages
		 */
		void GetErrorMessages(const spStringArray& messages) const { this->sgapi->fpSimplygon_GetErrorMessages(messages); }
		/**
		 * Clear warning messages
		 */
		void ClearWarningMessages() const { this->sgapi->fpSimplygon_ClearWarningMessages(); }
		/**
		 * Clear error messages
		 */
		void ClearErrorMessages() const { this->sgapi->fpSimplygon_ClearErrorMessages(); }


		/**
		 * Sets a named global library boolean setting
		 * @param setting_name is the name of the global setting we want to set.
		 * @param value is the value we want to set the chosen global setting to.
		 */
		void SetGlobalBoolSetting( const char *setting_name , bool value ) const { this->sgapi->fpSimplygon_SetGlobalBoolSetting( setting_name , value ); }

		/**
		 * Sets a named global library integer setting
		 * @param setting_name is the name of the global setting we want to set.
		 * @param value is the value we want to set the chosen global setting to.
		 */
		void SetGlobalIntSetting( const char *setting_name , int value ) const { this->sgapi->fpSimplygon_SetGlobalIntSetting( setting_name , value ); }

		/**
		 * Sets a named global library floating point setting
		 * @param setting_name is the name of the global setting we want to set.
		 * @param value is the value we want to set the chosen global setting to.
		 */
		void SetGlobalFloatSetting( const char *setting_name , double value ) const { this->sgapi->fpSimplygon_SetGlobalFloatSetting( setting_name , value ); }

		/**
		 * Sets a named global library string setting
		 * @param setting_name is the name of the global setting we want to set.
		 * @param value is the value we want to set the chosen global setting to.
		 */
		void SetGlobalStringSetting( const char *setting_name , const char *value ) const { this->sgapi->fpSimplygon_SetGlobalStringSetting( setting_name , value ); }

        /**
		 * Gets a named global library boolean setting
		 * @param setting_name is the name of the global setting we want to get.
		 * @return the value of the chosen setting.
		 */
		bool GetGlobalBoolSetting( const char *setting_name ) const { return this->sgapi->fpSimplygon_GetGlobalBoolSetting( setting_name ); }

		/**
		 * Gets a named global library integer setting
		 * @param setting_name is the name of the global setting we want to get.
		 * @return the value of the chosen setting.
		 */
		int GetGlobalIntSetting( const char *setting_name ) const { return this->sgapi->fpSimplygon_GetGlobalIntSetting( setting_name ); }

		/**
		 * Gets a named global library floating point setting
		 * @param setting_name is the name of the global setting we want to get.
		 * @return the value of the chosen setting.
		 */
		double GetGlobalFloatSetting( const char *setting_name ) const { return this->sgapi->fpSimplygon_GetGlobalFloatSetting( setting_name ); }

		/**
		 * Gets a named global library string setting
		 * @param setting_name is the name of the global setting we want to get.
		 * @return the value of the chosen setting.
		 */
		spString GetGlobalStringSetting( const char *setting_name ) const { return spString( this->sgapi , this->sgapi->fpSimplygon_GetGlobalStringSetting( setting_name )); }

		/**
		 * Sets a named library string setting local to this thread
		 * @param setting_name is the name of the thread local setting we want to set.
		 * @param value is the value we want to set the chosen thread local setting to.
		 */
		void SetThreadLocalStringSetting( const char *setting_name , const char *value ) const { this->sgapi->fpSimplygon_SetThreadLocalStringSetting( setting_name , value ); }

		/**
		 * Gets a named library string setting local to this thread
		 * @param setting_name is the name of the thread local setting we want to get.
		 * @return the value of the chosen setting.
		 */
		spString GetThreadLocalStringSetting( const char *setting_name ) const { return spString( this->sgapi , this->sgapi->fpSimplygon_GetThreadLocalStringSetting( setting_name )); }

		/**
		 * Enable log to file
		 * @param logLevel is the minimum log level to output.
		 * @param logDecorationMask sets how the log should be decorated with meta data.
		 */
		void EnableLogToFile( ELogLevel logLevel, unsigned int logDecorationMask ) { this->sgapi->fpSimplygon_EnableLogToFile( (int)logLevel , logDecorationMask , nullptr ); }

		/**
		 * Enable log to file
		 * @param logLevel is the minimum log level to output.
		 * @param logDecorationMask sets how the log should be decorated with meta data.
		 * @param logFileName specifices where to store the log.
		 */
		void EnableLogToFile( ELogLevel logLevel, unsigned int logDecorationMask, const char* logFileName ) { this->sgapi->fpSimplygon_EnableLogToFile( (int)logLevel , logDecorationMask , logFileName ); }


		/**
		 * Set the global setting DefaultTangentCalculatorType.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalDefaultTangentCalculatorTypeSetting( ETangentSpaceMethod value ) const { this->SetGlobalIntSetting( "DefaultTangentCalculatorType" , (int)(value) ); }

		/**
		 * Get the global setting DefaultTangentCalculatorType.
		 * @return the current value of the setting.
		 */
		ETangentSpaceMethod GetGlobalDefaultTangentCalculatorTypeSetting() const { return (ETangentSpaceMethod)(this->GetGlobalIntSetting( "DefaultTangentCalculatorType" )); }

		/**
		 * Set the global setting AllowDirectX.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalAllowDirectXSetting( bool value ) const { this->SetGlobalBoolSetting( "AllowDirectX" , (bool)(value) ); }

		/**
		 * Get the global setting AllowDirectX.
		 * @return the current value of the setting.
		 */
		bool GetGlobalAllowDirectXSetting() const { return (bool)(this->GetGlobalBoolSetting( "AllowDirectX" )); }

		/**
		 * Set the global setting AllowGPUAcceleration.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalAllowGPUAccelerationSetting( bool value ) const { this->SetGlobalBoolSetting( "AllowGPUAcceleration" , (bool)(value) ); }

		/**
		 * Get the global setting AllowGPUAcceleration.
		 * @return the current value of the setting.
		 */
		bool GetGlobalAllowGPUAccelerationSetting() const { return (bool)(this->GetGlobalBoolSetting( "AllowGPUAcceleration" )); }

		/**
		 * Set the global setting AllowTextureSamplingInterpolation.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalAllowTextureSamplingInterpolationSetting( bool value ) const { this->SetGlobalBoolSetting( "AllowTextureSamplingInterpolation" , (bool)(value) ); }

		/**
		 * Get the global setting AllowTextureSamplingInterpolation.
		 * @return the current value of the setting.
		 */
		bool GetGlobalAllowTextureSamplingInterpolationSetting() const { return (bool)(this->GetGlobalBoolSetting( "AllowTextureSamplingInterpolation" )); }

		/**
		 * Set the global setting AllowShadingNetworkCaching.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalAllowShadingNetworkCachingSetting( bool value ) const { this->SetGlobalBoolSetting( "AllowShadingNetworkCaching" , (bool)(value) ); }

		/**
		 * Get the global setting AllowShadingNetworkCaching.
		 * @return the current value of the setting.
		 */
		bool GetGlobalAllowShadingNetworkCachingSetting() const { return (bool)(this->GetGlobalBoolSetting( "AllowShadingNetworkCaching" )); }

		/**
		 * Set the global setting AllowDistributionLocalFallback.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalAllowDistributionLocalFallbackSetting( bool value ) const { this->SetGlobalBoolSetting( "AllowDistributionLocalFallback" , (bool)(value) ); }

		/**
		 * Get the global setting AllowDistributionLocalFallback.
		 * @return the current value of the setting.
		 */
		bool GetGlobalAllowDistributionLocalFallbackSetting() const { return (bool)(this->GetGlobalBoolSetting( "AllowDistributionLocalFallback" )); }

		/**
		 * Set the global setting UnpackFBXInSimplygonTempDirectory.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalUnpackFBXInSimplygonTempDirectorySetting( bool value ) const { this->SetGlobalBoolSetting( "UnpackFBXInSimplygonTempDirectory" , (bool)(value) ); }

		/**
		 * Get the global setting UnpackFBXInSimplygonTempDirectory.
		 * @return the current value of the setting.
		 */
		bool GetGlobalUnpackFBXInSimplygonTempDirectorySetting() const { return (bool)(this->GetGlobalBoolSetting( "UnpackFBXInSimplygonTempDirectory" )); }

		/**
		 * Set the global setting AutomaticGuidGeneration.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalAutomaticGuidGenerationSetting( bool value ) const { this->SetGlobalBoolSetting( "AutomaticGuidGeneration" , (bool)(value) ); }

		/**
		 * Get the global setting AutomaticGuidGeneration.
		 * @return the current value of the setting.
		 */
		bool GetGlobalAutomaticGuidGenerationSetting() const { return (bool)(this->GetGlobalBoolSetting( "AutomaticGuidGeneration" )); }

		/**
		 * Set the global setting CacheToDisk.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalCacheToDiskSetting( bool value ) const { this->SetGlobalBoolSetting( "CacheToDisk" , (bool)(value) ); }

		/**
		 * Get the global setting CacheToDisk.
		 * @return the current value of the setting.
		 */
		bool GetGlobalCacheToDiskSetting() const { return (bool)(this->GetGlobalBoolSetting( "CacheToDisk" )); }

		/**
		 * Set the global setting PreventDirectXThreadingOptimizations.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalPreventDirectXThreadingOptimizationsSetting( bool value ) const { this->SetGlobalBoolSetting( "PreventDirectXThreadingOptimizations" , (bool)(value) ); }

		/**
		 * Get the global setting PreventDirectXThreadingOptimizations.
		 * @return the current value of the setting.
		 */
		bool GetGlobalPreventDirectXThreadingOptimizationsSetting() const { return (bool)(this->GetGlobalBoolSetting( "PreventDirectXThreadingOptimizations" )); }

		/**
		 * Set the global setting LogicalCoreLimit.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalLogicalCoreLimitSetting( unsigned int value ) const { this->SetGlobalIntSetting( "LogicalCoreLimit" , (int)(value) ); }

		/**
		 * Get the global setting LogicalCoreLimit.
		 * @return the current value of the setting.
		 */
		unsigned int GetGlobalLogicalCoreLimitSetting() const { return (unsigned int)(this->GetGlobalIntSetting( "LogicalCoreLimit" )); }

		/**
		 * Set the global setting MaskFPExceptions.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalMaskFPExceptionsSetting( bool value ) const { this->SetGlobalBoolSetting( "MaskFPExceptions" , (bool)(value) ); }

		/**
		 * Get the global setting MaskFPExceptions.
		 * @return the current value of the setting.
		 */
		bool GetGlobalMaskFPExceptionsSetting() const { return (bool)(this->GetGlobalBoolSetting( "MaskFPExceptions" )); }

		/**
		 * Set the global setting ValidRealThreshold.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalValidRealThresholdSetting( float value ) const { this->SetGlobalFloatSetting( "ValidRealThreshold" , (double)(value) ); }

		/**
		 * Get the global setting ValidRealThreshold.
		 * @return the current value of the setting.
		 */
		float GetGlobalValidRealThresholdSetting() const { return (float)(this->GetGlobalFloatSetting( "ValidRealThreshold" )); }

		/**
		 * Set the global setting ValidateProcessing.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalValidateProcessingSetting( bool value ) const { this->SetGlobalBoolSetting( "ValidateProcessing" , (bool)(value) ); }

		/**
		 * Get the global setting ValidateProcessing.
		 * @return the current value of the setting.
		 */
		bool GetGlobalValidateProcessingSetting() const { return (bool)(this->GetGlobalBoolSetting( "ValidateProcessing" )); }

		/**
		 * Set the global setting ValidateProcessingAssertOnError.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalValidateProcessingAssertOnErrorSetting( bool value ) const { this->SetGlobalBoolSetting( "ValidateProcessingAssertOnError" , (bool)(value) ); }

		/**
		 * Get the global setting ValidateProcessingAssertOnError.
		 * @return the current value of the setting.
		 */
		bool GetGlobalValidateProcessingAssertOnErrorSetting() const { return (bool)(this->GetGlobalBoolSetting( "ValidateProcessingAssertOnError" )); }

		/**
		 * Set the global setting IgnorePNGGammaOnImageLoad.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalIgnorePNGGammaOnImageLoadSetting( bool value ) const { this->SetGlobalBoolSetting( "IgnorePNGGammaOnImageLoad" , (bool)(value) ); }

		/**
		 * Get the global setting IgnorePNGGammaOnImageLoad.
		 * @return the current value of the setting.
		 */
		bool GetGlobalIgnorePNGGammaOnImageLoadSetting() const { return (bool)(this->GetGlobalBoolSetting( "IgnorePNGGammaOnImageLoad" )); }

		/**
		 * Set the global setting ValidateProcessingDebugLevel.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalValidateProcessingDebugLevelSetting( unsigned int value ) const { this->SetGlobalIntSetting( "ValidateProcessingDebugLevel" , (int)(value) ); }

		/**
		 * Get the global setting ValidateProcessingDebugLevel.
		 * @return the current value of the setting.
		 */
		unsigned int GetGlobalValidateProcessingDebugLevelSetting() const { return (unsigned int)(this->GetGlobalIntSetting( "ValidateProcessingDebugLevel" )); }

		/**
		 * Set the global setting ValidateProcessingOutputDirectory.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalValidateProcessingOutputDirectorySetting( const char * value ) const { this->SetGlobalStringSetting( "ValidateProcessingOutputDirectory" , (const char *)(value) ); }

		/**
		 * Get the global setting ValidateProcessingOutputDirectory.
		 * @return the current value of the setting.
		 */
		spString GetGlobalValidateProcessingOutputDirectorySetting() const { return (spString)(this->GetGlobalStringSetting( "ValidateProcessingOutputDirectory" )); }

		/**
		 * Set the global setting EnableLog.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalEnableLogSetting( bool value ) const { this->SetGlobalBoolSetting( "EnableLog" , (bool)(value) ); }

		/**
		 * Get the global setting EnableLog.
		 * @return the current value of the setting.
		 */
		bool GetGlobalEnableLogSetting() const { return (bool)(this->GetGlobalBoolSetting( "EnableLog" )); }

		/**
		 * Set the global setting LogToFile.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalLogToFileSetting( bool value ) const { this->SetGlobalBoolSetting( "LogToFile" , (bool)(value) ); }

		/**
		 * Get the global setting LogToFile.
		 * @return the current value of the setting.
		 */
		bool GetGlobalLogToFileSetting() const { return (bool)(this->GetGlobalBoolSetting( "LogToFile" )); }

		/**
		 * Set the global setting FlushLogPerRow.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalFlushLogPerRowSetting( bool value ) const { this->SetGlobalBoolSetting( "FlushLogPerRow" , (bool)(value) ); }

		/**
		 * Get the global setting FlushLogPerRow.
		 * @return the current value of the setting.
		 */
		bool GetGlobalFlushLogPerRowSetting() const { return (bool)(this->GetGlobalBoolSetting( "FlushLogPerRow" )); }

		/**
		 * Set the global setting LogOutputToTraceWindow.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalLogOutputToTraceWindowSetting( bool value ) const { this->SetGlobalBoolSetting( "LogOutputToTraceWindow" , (bool)(value) ); }

		/**
		 * Get the global setting LogOutputToTraceWindow.
		 * @return the current value of the setting.
		 */
		bool GetGlobalLogOutputToTraceWindowSetting() const { return (bool)(this->GetGlobalBoolSetting( "LogOutputToTraceWindow" )); }

		/**
		 * Set the global setting LogLevel.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalLogLevelSetting( ELogLevel value ) const { this->SetGlobalIntSetting( "LogLevel" , (int)(value) ); }

		/**
		 * Get the global setting LogLevel.
		 * @return the current value of the setting.
		 */
		ELogLevel GetGlobalLogLevelSetting() const { return (ELogLevel)(this->GetGlobalIntSetting( "LogLevel" )); }

		/**
		 * Set the global setting LogDecorationMask.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalLogDecorationMaskSetting( unsigned int value ) const { this->SetGlobalIntSetting( "LogDecorationMask" , (int)(value) ); }

		/**
		 * Get the global setting LogDecorationMask.
		 * @return the current value of the setting.
		 */
		unsigned int GetGlobalLogDecorationMaskSetting() const { return (unsigned int)(this->GetGlobalIntSetting( "LogDecorationMask" )); }

		/**
		 * Set the global setting LogFileName.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalLogFileNameSetting( const char * value ) const { this->SetGlobalStringSetting( "LogFileName" , (const char *)(value) ); }

		/**
		 * Get the global setting LogFileName.
		 * @return the current value of the setting.
		 */
		spString GetGlobalLogFileNameSetting() const { return (spString)(this->GetGlobalStringSetting( "LogFileName" )); }

		/**
		 * Set the global setting InputSceneValidationAction.
		 * @param value the value to set the setting to.
		 */
		void SetGlobalInputSceneValidationActionSetting( EInputSceneValidationActionType value ) const { this->SetGlobalIntSetting( "InputSceneValidationAction" , (int)(value) ); }

		/**
		 * Get the global setting InputSceneValidationAction.
		 * @return the current value of the setting.
		 */
		EInputSceneValidationActionType GetGlobalInputSceneValidationActionSetting() const { return (EInputSceneValidationActionType)(this->GetGlobalIntSetting( "InputSceneValidationAction" )); }

		/**
		 * Set the thread-local setting LogFileName.
		 * @param value the value to set the setting to.
		 */
		void SetThreadLocalLogFileNameSetting( const char * value ) const { this->SetThreadLocalStringSetting( "LogFileName" , (const char *)(value) ); }

		/**
		 * Get the thread-local setting LogFileName.
		 * @return the current value of the setting.
		 */
		spString GetThreadLocalLogFileNameSetting() const { return (spString)(this->GetThreadLocalStringSetting( "LogFileName" )); }

	};



	inline APIAccessor::~APIAccessor()
	{
		this->Release();
	}

	inline void APIAccessor::AddRef()
	{
		if( this->sghandle != nullptr )
		{
			this->sgapi->fpObject_AddRef( this->sghandle );
		}
	}

	inline void APIAccessor::Release()
	{
		if( this->sghandle != nullptr )
		{
			this->ReplaceAccessor( nullptr , nullptr );
		}
	}

	inline void APIAccessor::ReplaceAccessor( const APIInterfacePtrs *_sgapi , hIntf _sghandle )
	{
		// only modify if other accessor than current
		if( this->sghandle != _sghandle )
		{
			// first release the handle
			if( this->sghandle != nullptr )
			{
				this->sgapi->fpObject_Release( this->sghandle );
			}

			// next, replace accessor 
			if( this->sgapi != _sgapi )
			{
				if( this->sgapi != nullptr )
				{
					this->sgapi->fpSimplygon_UnregisterAccessor( this );
				}
				this->sgapi = _sgapi;
				if( this->sgapi != nullptr )
				{
					this->sgapi->fpSimplygon_RegisterAccessor( this );
				}
			}

			// set the new handle
			this->sghandle = _sghandle;
			this->AddRef();
		}
	}

	/// Implementation of ISimplygon methods
	inline ISimplygon::ISimplygon( APIInterfacePtrs *_sgapi ) : sgapi(_sgapi) {};
	inline ISimplygon * ISimplygon::CreateAPI( void *libHandle ) { APIInterfacePtrs *sgapi = new APIInterfacePtrs(); if( !sgapi->LoadAPIPtrs( libHandle ) ) { delete sgapi; return nullptr; } return new ISimplygon(sgapi); }
	inline ISimplygon::~ISimplygon() { delete sgapi; };

	/// Implementations of spString methods
	inline bool spString::IsNullOrEmpty() const{ if( ptr == nullptr ) { return true; } if( sgapi->fpReturnData_GetByteSize( this->ptr ) == 0 ) { return true; } return false;}
	inline const char* spString::Data() const{ if( this->ptr == nullptr ) { return nullptr; } return static_cast<const char*>( sgapi->fpReturnData_GetRawPointer( this->ptr ) );}
	inline char spString::operator[]( unsigned int index ) const { return ( static_cast<const char*>( sgapi->fpReturnData_GetRawPointer( this->ptr ) ) )[ index ]; }
	inline unsigned int spString::GetItemCount() const{ if( this->ptr == nullptr ) { return 0; } return ( (unsigned int)( sgapi->fpReturnData_GetByteSize( this->ptr ) ) / sizeof( char ) );}
	inline void spString::addref_ptr(){ if( this->ptr != nullptr ) { sgapi->fpReturnData_AddRef( this->ptr ); }}
	inline void spString::release_ptr(){ if( this->ptr != nullptr ) { sgapi->fpReturnData_Release( this->ptr ); this->ptr = nullptr; }}
	inline void spString::replace_ptr( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hRMem p ){ if( this->ptr != p ) { this->release_ptr(); this->ptr = p; this->sgapi = _sg; this->addref_ptr(); }}

	/// Implementations of spObject methods
    inline spObject::spObject() : spObject( nullptr, nullptr ) {}
	inline spObject::spObject( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) { this->replace_ptr( _sg , _intfptr ); }
	inline spObject::spObject( const spObject &p ) : spObject(p._GetAPI() , p._GetHandle() ) {}
	inline spObject::~spObject() { this->release_ptr(); }
	inline spObject& spObject::operator=( const spObject &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spObject spObject::SafeCast( spObject other ) { spObject ret; if( other.NonNull() && other.IsA("IObject") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }

	inline bool spObject::IsNull() const { return (this->_GetHandle() == nullptr); }
	inline bool spObject::NonNull() const { return (this->_GetHandle() != nullptr); }
	inline bool spObject::IsSameObjectAs( const spObject &p ) { return ( this->_GetHandle() == p._GetHandle() ) ? true : false; }
	inline bool spObject::operator==( const spObject &p ) { return this->IsSameObjectAs(p); } 
	
	inline bool spObject::operator==( const _NilStruct & ) { return (this->_GetHandle() == nullptr); } 
	inline bool spObject::operator!=( const _NilStruct & ) { return (this->_GetHandle() != nullptr); } 

	inline spObject::operator void *() const { return this->_GetHandle(); }
	inline void spObject::addref_ptr() { this->api.AddRef(); }
	inline void spObject::release_ptr() { this->api.Release(); }
	inline void spObject::replace_ptr( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf p ) { this->api.ReplaceAccessor(_sg,p); }

	inline spString spObject::GetClass() const { return Simplygon::spString( this->_GetAPI(), this->_GetAPI()->fpObject_GetClass( this->_GetHandle() ) ); }
	inline bool spObject::IsA( const char* Name ) const { return this->_GetAPI()->fpObject_IsA( this->_GetHandle(), Name ); }
	inline void spObject::SetName( const char* Name ) const { this->_GetAPI()->fpObject_SetName( this->_GetHandle(), Name ); }
	inline spString spObject::GetName() const { return Simplygon::spString( this->_GetAPI(), this->_GetAPI()->fpObject_GetName( this->_GetHandle() ) ); }
	inline void spObject::PrintInfo() const { this->_GetAPI()->fpObject_PrintInfo( this->_GetHandle() ); }
	inline rid spObject::AddObserver(Simplygon::Observer* observer) const { observer->sgapi = this->_GetAPI(); return this->_GetAPI()->fpObject_AddObserver( this->_GetHandle() , observer ); }
	inline void spObject::RemoveObserver(rid observerId) const { this->_GetAPI()->fpObject_RemoveObserver( this->_GetHandle() , observerId ); }
	inline void spObject::SetUserData( const char* name, const void* data, unsigned int size ) const { this->_GetAPI()->fpObject_SetUserData( this->_GetHandle() , name , data , size ); }
	inline spUnsignedCharData spObject::GetUserData( const char* name ) const { return spUnsignedCharData( this->_GetAPI() , this->_GetAPI()->fpObject_GetUserData( this->_GetHandle() , name )); }
	inline const spObject* spObject::operator->() const { return this; }
	/// Implementations of spArray methods
	inline spArray::spArray() : spObject( nullptr , nullptr ) {}
	inline spArray::spArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spArray::spArray( const spArray &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spArray & spArray::operator= ( const spArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spArray spArray::SafeCast( spObject other ) { spArray ret; if( other.NonNull() && other.IsA("IArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spArray* spArray::operator->() const { return this; }
	inline spArray::spArray( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::spArray spArray::NewCopy( bool copy_data ) const
	{
		spArray retobj = spArray( this->_GetAPI() , this->_GetAPI()->fpArray_NewCopy( this->_GetHandle() , copy_data ));
		return retobj;
	}

	inline Simplygon::spArray spArray::NewPackedCopy( const spRidArray & index_array ) const
	{
		spArray retobj = spArray( this->_GetAPI() , this->_GetAPI()->fpArray_NewPackedCopy( this->_GetHandle() , hIntf(index_array) ));
		return retobj;
	}

	inline void spArray::DeepCopy( const spArray & source ) const
	{
		this->_GetAPI()->fpArray_DeepCopy( this->_GetHandle() , hIntf(source) );
	}

	inline void spArray::IndexedCopy( const spArray & source , const spRidArray & idtable , rid startId ) const
	{
		this->_GetAPI()->fpArray_IndexedCopy( this->_GetHandle() , hIntf(source) , hIntf(idtable) , startId );
	}

	inline void spArray::SetTupleSize( unsigned int value ) const
	{
		this->_GetAPI()->fpArray_SetTupleSize( this->_GetHandle() , value );
	}

	inline unsigned int spArray::GetTupleSize(  ) const
	{
		return this->_GetAPI()->fpArray_GetTupleSize( this->_GetHandle() );
	}

	inline void spArray::SetItemCount( unsigned int value ) const
	{
		this->_GetAPI()->fpArray_SetItemCount( this->_GetHandle() , value );
	}

	inline unsigned int spArray::GetItemCount(  ) const
	{
		return this->_GetAPI()->fpArray_GetItemCount( this->_GetHandle() );
	}

	inline rid spArray::GetMaxItemId(  ) const
	{
		return this->_GetAPI()->fpArray_GetMaxItemId( this->_GetHandle() );
	}

	inline void spArray::Clear(  ) const
	{
		this->_GetAPI()->fpArray_Clear( this->_GetHandle() );
	}

	inline bool spArray::IsEmpty(  ) const
	{
		return this->_GetAPI()->fpArray_IsEmpty( this->_GetHandle() );
	}

	inline void spArray::SetTupleCount( unsigned int value ) const
	{
		this->_GetAPI()->fpArray_SetTupleCount( this->_GetHandle() , value );
	}

	inline unsigned int spArray::GetTupleCount(  ) const
	{
		return this->_GetAPI()->fpArray_GetTupleCount( this->_GetHandle() );
	}

	inline rid spArray::GetMaxTupleId(  ) const
	{
		return this->_GetAPI()->fpArray_GetMaxTupleId( this->_GetHandle() );
	}

	inline Simplygon::EBaseTypes spArray::GetBaseType(  ) const
	{
		return this->_GetAPI()->fpArray_GetBaseType( this->_GetHandle() );
	}

	inline void spArray::AppendArray( const spArray & source ) const
	{
		this->_GetAPI()->fpArray_AppendArray( this->_GetHandle() , hIntf(source) );
	}

	inline void spArray::ExtractTuples( const spArray & dest , rid start , unsigned int count ) const
	{
		this->_GetAPI()->fpArray_ExtractTuples( this->_GetHandle() , hIntf(dest) , start , count );
	}

	inline void spArray::CopyTuple( const spArray & sourceArray , rid dest_id , rid src_id ) const
	{
		this->_GetAPI()->fpArray_CopyTuple( this->_GetHandle() , hIntf(sourceArray) , dest_id , src_id );
	}

	inline int spArray::CompareTuples( const spArray & otherArray , rid tuple_id , rid other_tuple_id ) const
	{
		return this->_GetAPI()->fpArray_CompareTuples( this->_GetHandle() , hIntf(otherArray) , tuple_id , other_tuple_id );
	}

	inline void spArray::CopyRange( const spArray & source_array , rid start_dest_id , rid start_src_id , unsigned int count ) const
	{
		this->_GetAPI()->fpArray_CopyRange( this->_GetHandle() , hIntf(source_array) , start_dest_id , start_src_id , count );
	}

	inline void spArray::SetAlternativeName( const char * value ) const
	{
		this->_GetAPI()->fpArray_SetAlternativeName( this->_GetHandle() , value );
	}

	inline spString spArray::GetAlternativeName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpArray_GetAlternativeName( this->_GetHandle() ));
	}

	/// Implementations of spValueArray methods
	inline spValueArray::spValueArray() : spArray( nullptr , nullptr ) {}
	inline spValueArray::spValueArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spArray( _sg , _intfptr ) {}
	inline spValueArray::spValueArray( const spValueArray &p ) : spArray( p._GetAPI() , p._GetHandle() ) {}
	inline spValueArray & spValueArray::operator= ( const spValueArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spValueArray spValueArray::SafeCast( spObject other ) { spValueArray ret; if( other.NonNull() && other.IsA("IValueArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spValueArray* spValueArray::operator->() const { return this; }
	inline spValueArray::spValueArray( const _NilStruct & ) : spArray( nullptr , nullptr ) {}

	inline void spValueArray::SetRealItem( rid id , real value ) const
	{
		this->_GetAPI()->fpValueArray_SetRealItem( this->_GetHandle() , id , value );
	}

	inline real spValueArray::GetRealItem( rid id ) const
	{
		return this->_GetAPI()->fpValueArray_GetRealItem( this->_GetHandle() , id );
	}

	/// Implementations of spBoolArray methods
	inline spBoolArray::spBoolArray() : spValueArray( nullptr , nullptr ) {}
	inline spBoolArray::spBoolArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spBoolArray::spBoolArray( const spBoolArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spBoolArray & spBoolArray::operator= ( const spBoolArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spBoolArray spBoolArray::SafeCast( spObject other ) { spBoolArray ret; if( other.NonNull() && other.IsA("IBoolArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spBoolArray* spBoolArray::operator->() const { return this; }
	inline spBoolArray::spBoolArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spBoolArray::AddItem( bool value ) const
	{
		this->_GetAPI()->fpBoolArray_AddItem( this->_GetHandle() , value );
	}

	inline void spBoolArray::SetItem( rid id , bool value ) const
	{
		this->_GetAPI()->fpBoolArray_SetItem( this->_GetHandle() , id , value );
	}

	inline bool spBoolArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpBoolArray_GetItem( this->_GetHandle() , id );
	}

	inline void spBoolArray::AddTuple( const bool *tuple ) const
	{
		this->_GetAPI()->fpBoolArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spBoolArray::SetTuple( rid id , const bool *tuple ) const
	{
		this->_GetAPI()->fpBoolArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spBoolData spBoolArray::GetTuple( rid id ) const
	{
		return spBoolData( this->_GetAPI() , this->_GetAPI()->fpBoolArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spBoolData spBoolArray::GetData(  ) const
	{
		return spBoolData( this->_GetAPI() , this->_GetAPI()->fpBoolArray_GetData( this->_GetHandle() ));
	}

	inline spBoolData spBoolArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spBoolData( this->_GetAPI() , this->_GetAPI()->fpBoolArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spBoolArray::SetData( const bool *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpBoolArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spBoolArray::SetDataRange( rid start_tuple_id , const bool *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpBoolArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spBoolArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpBoolArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spCharArray methods
	inline spCharArray::spCharArray() : spValueArray( nullptr , nullptr ) {}
	inline spCharArray::spCharArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spCharArray::spCharArray( const spCharArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spCharArray & spCharArray::operator= ( const spCharArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spCharArray spCharArray::SafeCast( spObject other ) { spCharArray ret; if( other.NonNull() && other.IsA("ICharArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spCharArray* spCharArray::operator->() const { return this; }
	inline spCharArray::spCharArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spCharArray::AddItem( char value ) const
	{
		this->_GetAPI()->fpCharArray_AddItem( this->_GetHandle() , value );
	}

	inline void spCharArray::SetItem( rid id , char value ) const
	{
		this->_GetAPI()->fpCharArray_SetItem( this->_GetHandle() , id , value );
	}

	inline char spCharArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpCharArray_GetItem( this->_GetHandle() , id );
	}

	inline void spCharArray::AddTuple( const char *tuple ) const
	{
		this->_GetAPI()->fpCharArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spCharArray::SetTuple( rid id , const char *tuple ) const
	{
		this->_GetAPI()->fpCharArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spCharData spCharArray::GetTuple( rid id ) const
	{
		return spCharData( this->_GetAPI() , this->_GetAPI()->fpCharArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spCharData spCharArray::GetData(  ) const
	{
		return spCharData( this->_GetAPI() , this->_GetAPI()->fpCharArray_GetData( this->_GetHandle() ));
	}

	inline spCharData spCharArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spCharData( this->_GetAPI() , this->_GetAPI()->fpCharArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spCharArray::SetData( const char *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpCharArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spCharArray::SetDataRange( rid start_tuple_id , const char *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpCharArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spCharArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpCharArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spDoubleArray methods
	inline spDoubleArray::spDoubleArray() : spValueArray( nullptr , nullptr ) {}
	inline spDoubleArray::spDoubleArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spDoubleArray::spDoubleArray( const spDoubleArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spDoubleArray & spDoubleArray::operator= ( const spDoubleArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spDoubleArray spDoubleArray::SafeCast( spObject other ) { spDoubleArray ret; if( other.NonNull() && other.IsA("IDoubleArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spDoubleArray* spDoubleArray::operator->() const { return this; }
	inline spDoubleArray::spDoubleArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spDoubleArray::AddItem( double value ) const
	{
		this->_GetAPI()->fpDoubleArray_AddItem( this->_GetHandle() , value );
	}

	inline void spDoubleArray::SetItem( rid id , double value ) const
	{
		this->_GetAPI()->fpDoubleArray_SetItem( this->_GetHandle() , id , value );
	}

	inline double spDoubleArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpDoubleArray_GetItem( this->_GetHandle() , id );
	}

	inline void spDoubleArray::AddTuple( const double *tuple ) const
	{
		this->_GetAPI()->fpDoubleArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spDoubleArray::SetTuple( rid id , const double *tuple ) const
	{
		this->_GetAPI()->fpDoubleArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spDoubleData spDoubleArray::GetTuple( rid id ) const
	{
		return spDoubleData( this->_GetAPI() , this->_GetAPI()->fpDoubleArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spDoubleData spDoubleArray::GetData(  ) const
	{
		return spDoubleData( this->_GetAPI() , this->_GetAPI()->fpDoubleArray_GetData( this->_GetHandle() ));
	}

	inline spDoubleData spDoubleArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spDoubleData( this->_GetAPI() , this->_GetAPI()->fpDoubleArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spDoubleArray::SetData( const double *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpDoubleArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spDoubleArray::SetDataRange( rid start_tuple_id , const double *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpDoubleArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spDoubleArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpDoubleArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spFloatArray methods
	inline spFloatArray::spFloatArray() : spValueArray( nullptr , nullptr ) {}
	inline spFloatArray::spFloatArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spFloatArray::spFloatArray( const spFloatArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spFloatArray & spFloatArray::operator= ( const spFloatArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spFloatArray spFloatArray::SafeCast( spObject other ) { spFloatArray ret; if( other.NonNull() && other.IsA("IFloatArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spFloatArray* spFloatArray::operator->() const { return this; }
	inline spFloatArray::spFloatArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spFloatArray::AddItem( float value ) const
	{
		this->_GetAPI()->fpFloatArray_AddItem( this->_GetHandle() , value );
	}

	inline void spFloatArray::SetItem( rid id , float value ) const
	{
		this->_GetAPI()->fpFloatArray_SetItem( this->_GetHandle() , id , value );
	}

	inline float spFloatArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpFloatArray_GetItem( this->_GetHandle() , id );
	}

	inline void spFloatArray::AddTuple( const float *tuple ) const
	{
		this->_GetAPI()->fpFloatArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spFloatArray::SetTuple( rid id , const float *tuple ) const
	{
		this->_GetAPI()->fpFloatArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spFloatData spFloatArray::GetTuple( rid id ) const
	{
		return spFloatData( this->_GetAPI() , this->_GetAPI()->fpFloatArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spFloatData spFloatArray::GetData(  ) const
	{
		return spFloatData( this->_GetAPI() , this->_GetAPI()->fpFloatArray_GetData( this->_GetHandle() ));
	}

	inline spFloatData spFloatArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spFloatData( this->_GetAPI() , this->_GetAPI()->fpFloatArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spFloatArray::SetData( const float *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpFloatArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spFloatArray::SetDataRange( rid start_tuple_id , const float *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpFloatArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spFloatArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpFloatArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spIntArray methods
	inline spIntArray::spIntArray() : spValueArray( nullptr , nullptr ) {}
	inline spIntArray::spIntArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spIntArray::spIntArray( const spIntArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spIntArray & spIntArray::operator= ( const spIntArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spIntArray spIntArray::SafeCast( spObject other ) { spIntArray ret; if( other.NonNull() && other.IsA("IIntArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spIntArray* spIntArray::operator->() const { return this; }
	inline spIntArray::spIntArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spIntArray::AddItem( int value ) const
	{
		this->_GetAPI()->fpIntArray_AddItem( this->_GetHandle() , value );
	}

	inline void spIntArray::SetItem( rid id , int value ) const
	{
		this->_GetAPI()->fpIntArray_SetItem( this->_GetHandle() , id , value );
	}

	inline int spIntArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpIntArray_GetItem( this->_GetHandle() , id );
	}

	inline void spIntArray::AddTuple( const int *tuple ) const
	{
		this->_GetAPI()->fpIntArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spIntArray::SetTuple( rid id , const int *tuple ) const
	{
		this->_GetAPI()->fpIntArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spIntData spIntArray::GetTuple( rid id ) const
	{
		return spIntData( this->_GetAPI() , this->_GetAPI()->fpIntArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spIntData spIntArray::GetData(  ) const
	{
		return spIntData( this->_GetAPI() , this->_GetAPI()->fpIntArray_GetData( this->_GetHandle() ));
	}

	inline spIntData spIntArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spIntData( this->_GetAPI() , this->_GetAPI()->fpIntArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spIntArray::SetData( const int *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpIntArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spIntArray::SetDataRange( rid start_tuple_id , const int *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpIntArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spIntArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpIntArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spLongArray methods
	inline spLongArray::spLongArray() : spValueArray( nullptr , nullptr ) {}
	inline spLongArray::spLongArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spLongArray::spLongArray( const spLongArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spLongArray & spLongArray::operator= ( const spLongArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spLongArray spLongArray::SafeCast( spObject other ) { spLongArray ret; if( other.NonNull() && other.IsA("ILongArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spLongArray* spLongArray::operator->() const { return this; }
	inline spLongArray::spLongArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spLongArray::AddItem( long value ) const
	{
		this->_GetAPI()->fpLongArray_AddItem( this->_GetHandle() , value );
	}

	inline void spLongArray::SetItem( rid id , long value ) const
	{
		this->_GetAPI()->fpLongArray_SetItem( this->_GetHandle() , id , value );
	}

	inline long spLongArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpLongArray_GetItem( this->_GetHandle() , id );
	}

	inline void spLongArray::AddTuple( const long *tuple ) const
	{
		this->_GetAPI()->fpLongArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spLongArray::SetTuple( rid id , const long *tuple ) const
	{
		this->_GetAPI()->fpLongArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spLongData spLongArray::GetTuple( rid id ) const
	{
		return spLongData( this->_GetAPI() , this->_GetAPI()->fpLongArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spLongData spLongArray::GetData(  ) const
	{
		return spLongData( this->_GetAPI() , this->_GetAPI()->fpLongArray_GetData( this->_GetHandle() ));
	}

	inline spLongData spLongArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spLongData( this->_GetAPI() , this->_GetAPI()->fpLongArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spLongArray::SetData( const long *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpLongArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spLongArray::SetDataRange( rid start_tuple_id , const long *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpLongArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spLongArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpLongArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spRealArray methods
	inline spRealArray::spRealArray() : spValueArray( nullptr , nullptr ) {}
	inline spRealArray::spRealArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spRealArray::spRealArray( const spRealArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spRealArray & spRealArray::operator= ( const spRealArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spRealArray spRealArray::SafeCast( spObject other ) { spRealArray ret; if( other.NonNull() && other.IsA("IRealArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spRealArray* spRealArray::operator->() const { return this; }
	inline spRealArray::spRealArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spRealArray::AddItem( real value ) const
	{
		this->_GetAPI()->fpRealArray_AddItem( this->_GetHandle() , value );
	}

	inline void spRealArray::SetItem( rid id , real value ) const
	{
		this->_GetAPI()->fpRealArray_SetItem( this->_GetHandle() , id , value );
	}

	inline real spRealArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpRealArray_GetItem( this->_GetHandle() , id );
	}

	inline void spRealArray::AddTuple( const real *tuple ) const
	{
		this->_GetAPI()->fpRealArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spRealArray::SetTuple( rid id , const real *tuple ) const
	{
		this->_GetAPI()->fpRealArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spRealData spRealArray::GetTuple( rid id ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpRealArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spRealData spRealArray::GetData(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpRealArray_GetData( this->_GetHandle() ));
	}

	inline spRealData spRealArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpRealArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spRealArray::SetData( const real *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpRealArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spRealArray::SetDataRange( rid start_tuple_id , const real *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpRealArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spRealArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpRealArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spRidArray methods
	inline spRidArray::spRidArray() : spValueArray( nullptr , nullptr ) {}
	inline spRidArray::spRidArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spRidArray::spRidArray( const spRidArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spRidArray & spRidArray::operator= ( const spRidArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spRidArray spRidArray::SafeCast( spObject other ) { spRidArray ret; if( other.NonNull() && other.IsA("IRidArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spRidArray* spRidArray::operator->() const { return this; }
	inline spRidArray::spRidArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spRidArray::AddItem( rid value ) const
	{
		this->_GetAPI()->fpRidArray_AddItem( this->_GetHandle() , value );
	}

	inline void spRidArray::SetItem( rid id , rid value ) const
	{
		this->_GetAPI()->fpRidArray_SetItem( this->_GetHandle() , id , value );
	}

	inline rid spRidArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpRidArray_GetItem( this->_GetHandle() , id );
	}

	inline void spRidArray::AddTuple( const rid *tuple ) const
	{
		this->_GetAPI()->fpRidArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spRidArray::SetTuple( rid id , const rid *tuple ) const
	{
		this->_GetAPI()->fpRidArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spRidData spRidArray::GetTuple( rid id ) const
	{
		return spRidData( this->_GetAPI() , this->_GetAPI()->fpRidArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spRidData spRidArray::GetData(  ) const
	{
		return spRidData( this->_GetAPI() , this->_GetAPI()->fpRidArray_GetData( this->_GetHandle() ));
	}

	inline spRidData spRidArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spRidData( this->_GetAPI() , this->_GetAPI()->fpRidArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spRidArray::SetData( const rid *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpRidArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spRidArray::SetDataRange( rid start_tuple_id , const rid *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpRidArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spRidArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpRidArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spShortArray methods
	inline spShortArray::spShortArray() : spValueArray( nullptr , nullptr ) {}
	inline spShortArray::spShortArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spShortArray::spShortArray( const spShortArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spShortArray & spShortArray::operator= ( const spShortArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShortArray spShortArray::SafeCast( spObject other ) { spShortArray ret; if( other.NonNull() && other.IsA("IShortArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShortArray* spShortArray::operator->() const { return this; }
	inline spShortArray::spShortArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spShortArray::AddItem( short value ) const
	{
		this->_GetAPI()->fpShortArray_AddItem( this->_GetHandle() , value );
	}

	inline void spShortArray::SetItem( rid id , short value ) const
	{
		this->_GetAPI()->fpShortArray_SetItem( this->_GetHandle() , id , value );
	}

	inline short spShortArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpShortArray_GetItem( this->_GetHandle() , id );
	}

	inline void spShortArray::AddTuple( const short *tuple ) const
	{
		this->_GetAPI()->fpShortArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spShortArray::SetTuple( rid id , const short *tuple ) const
	{
		this->_GetAPI()->fpShortArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spShortData spShortArray::GetTuple( rid id ) const
	{
		return spShortData( this->_GetAPI() , this->_GetAPI()->fpShortArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spShortData spShortArray::GetData(  ) const
	{
		return spShortData( this->_GetAPI() , this->_GetAPI()->fpShortArray_GetData( this->_GetHandle() ));
	}

	inline spShortData spShortArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spShortData( this->_GetAPI() , this->_GetAPI()->fpShortArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spShortArray::SetData( const short *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpShortArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spShortArray::SetDataRange( rid start_tuple_id , const short *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpShortArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spShortArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpShortArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spUnsignedCharArray methods
	inline spUnsignedCharArray::spUnsignedCharArray() : spValueArray( nullptr , nullptr ) {}
	inline spUnsignedCharArray::spUnsignedCharArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spUnsignedCharArray::spUnsignedCharArray( const spUnsignedCharArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spUnsignedCharArray & spUnsignedCharArray::operator= ( const spUnsignedCharArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spUnsignedCharArray spUnsignedCharArray::SafeCast( spObject other ) { spUnsignedCharArray ret; if( other.NonNull() && other.IsA("IUnsignedCharArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spUnsignedCharArray* spUnsignedCharArray::operator->() const { return this; }
	inline spUnsignedCharArray::spUnsignedCharArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spUnsignedCharArray::AddItem( unsigned char value ) const
	{
		this->_GetAPI()->fpUnsignedCharArray_AddItem( this->_GetHandle() , value );
	}

	inline void spUnsignedCharArray::SetItem( rid id , unsigned char value ) const
	{
		this->_GetAPI()->fpUnsignedCharArray_SetItem( this->_GetHandle() , id , value );
	}

	inline unsigned char spUnsignedCharArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpUnsignedCharArray_GetItem( this->_GetHandle() , id );
	}

	inline void spUnsignedCharArray::AddTuple( const unsigned char *tuple ) const
	{
		this->_GetAPI()->fpUnsignedCharArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spUnsignedCharArray::SetTuple( rid id , const unsigned char *tuple ) const
	{
		this->_GetAPI()->fpUnsignedCharArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spUnsignedCharData spUnsignedCharArray::GetTuple( rid id ) const
	{
		return spUnsignedCharData( this->_GetAPI() , this->_GetAPI()->fpUnsignedCharArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spUnsignedCharData spUnsignedCharArray::GetData(  ) const
	{
		return spUnsignedCharData( this->_GetAPI() , this->_GetAPI()->fpUnsignedCharArray_GetData( this->_GetHandle() ));
	}

	inline spUnsignedCharData spUnsignedCharArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spUnsignedCharData( this->_GetAPI() , this->_GetAPI()->fpUnsignedCharArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spUnsignedCharArray::SetData( const unsigned char *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpUnsignedCharArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spUnsignedCharArray::SetDataRange( rid start_tuple_id , const unsigned char *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpUnsignedCharArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spUnsignedCharArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpUnsignedCharArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spUnsignedIntArray methods
	inline spUnsignedIntArray::spUnsignedIntArray() : spValueArray( nullptr , nullptr ) {}
	inline spUnsignedIntArray::spUnsignedIntArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spUnsignedIntArray::spUnsignedIntArray( const spUnsignedIntArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spUnsignedIntArray & spUnsignedIntArray::operator= ( const spUnsignedIntArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spUnsignedIntArray spUnsignedIntArray::SafeCast( spObject other ) { spUnsignedIntArray ret; if( other.NonNull() && other.IsA("IUnsignedIntArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spUnsignedIntArray* spUnsignedIntArray::operator->() const { return this; }
	inline spUnsignedIntArray::spUnsignedIntArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spUnsignedIntArray::AddItem( unsigned int value ) const
	{
		this->_GetAPI()->fpUnsignedIntArray_AddItem( this->_GetHandle() , value );
	}

	inline void spUnsignedIntArray::SetItem( rid id , unsigned int value ) const
	{
		this->_GetAPI()->fpUnsignedIntArray_SetItem( this->_GetHandle() , id , value );
	}

	inline unsigned int spUnsignedIntArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpUnsignedIntArray_GetItem( this->_GetHandle() , id );
	}

	inline void spUnsignedIntArray::AddTuple( const unsigned int *tuple ) const
	{
		this->_GetAPI()->fpUnsignedIntArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spUnsignedIntArray::SetTuple( rid id , const unsigned int *tuple ) const
	{
		this->_GetAPI()->fpUnsignedIntArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spUnsignedIntData spUnsignedIntArray::GetTuple( rid id ) const
	{
		return spUnsignedIntData( this->_GetAPI() , this->_GetAPI()->fpUnsignedIntArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spUnsignedIntData spUnsignedIntArray::GetData(  ) const
	{
		return spUnsignedIntData( this->_GetAPI() , this->_GetAPI()->fpUnsignedIntArray_GetData( this->_GetHandle() ));
	}

	inline spUnsignedIntData spUnsignedIntArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spUnsignedIntData( this->_GetAPI() , this->_GetAPI()->fpUnsignedIntArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spUnsignedIntArray::SetData( const unsigned int *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpUnsignedIntArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spUnsignedIntArray::SetDataRange( rid start_tuple_id , const unsigned int *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpUnsignedIntArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spUnsignedIntArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpUnsignedIntArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spUnsignedLongArray methods
	inline spUnsignedLongArray::spUnsignedLongArray() : spValueArray( nullptr , nullptr ) {}
	inline spUnsignedLongArray::spUnsignedLongArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spUnsignedLongArray::spUnsignedLongArray( const spUnsignedLongArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spUnsignedLongArray & spUnsignedLongArray::operator= ( const spUnsignedLongArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spUnsignedLongArray spUnsignedLongArray::SafeCast( spObject other ) { spUnsignedLongArray ret; if( other.NonNull() && other.IsA("IUnsignedLongArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spUnsignedLongArray* spUnsignedLongArray::operator->() const { return this; }
	inline spUnsignedLongArray::spUnsignedLongArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spUnsignedLongArray::AddItem( unsigned long value ) const
	{
		this->_GetAPI()->fpUnsignedLongArray_AddItem( this->_GetHandle() , value );
	}

	inline void spUnsignedLongArray::SetItem( rid id , unsigned long value ) const
	{
		this->_GetAPI()->fpUnsignedLongArray_SetItem( this->_GetHandle() , id , value );
	}

	inline unsigned long spUnsignedLongArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpUnsignedLongArray_GetItem( this->_GetHandle() , id );
	}

	inline void spUnsignedLongArray::AddTuple( const unsigned long *tuple ) const
	{
		this->_GetAPI()->fpUnsignedLongArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spUnsignedLongArray::SetTuple( rid id , const unsigned long *tuple ) const
	{
		this->_GetAPI()->fpUnsignedLongArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spUnsignedLongData spUnsignedLongArray::GetTuple( rid id ) const
	{
		return spUnsignedLongData( this->_GetAPI() , this->_GetAPI()->fpUnsignedLongArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spUnsignedLongData spUnsignedLongArray::GetData(  ) const
	{
		return spUnsignedLongData( this->_GetAPI() , this->_GetAPI()->fpUnsignedLongArray_GetData( this->_GetHandle() ));
	}

	inline spUnsignedLongData spUnsignedLongArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spUnsignedLongData( this->_GetAPI() , this->_GetAPI()->fpUnsignedLongArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spUnsignedLongArray::SetData( const unsigned long *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpUnsignedLongArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spUnsignedLongArray::SetDataRange( rid start_tuple_id , const unsigned long *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpUnsignedLongArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spUnsignedLongArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpUnsignedLongArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spUnsignedShortArray methods
	inline spUnsignedShortArray::spUnsignedShortArray() : spValueArray( nullptr , nullptr ) {}
	inline spUnsignedShortArray::spUnsignedShortArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spUnsignedShortArray::spUnsignedShortArray( const spUnsignedShortArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spUnsignedShortArray & spUnsignedShortArray::operator= ( const spUnsignedShortArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spUnsignedShortArray spUnsignedShortArray::SafeCast( spObject other ) { spUnsignedShortArray ret; if( other.NonNull() && other.IsA("IUnsignedShortArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spUnsignedShortArray* spUnsignedShortArray::operator->() const { return this; }
	inline spUnsignedShortArray::spUnsignedShortArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spUnsignedShortArray::AddItem( unsigned short value ) const
	{
		this->_GetAPI()->fpUnsignedShortArray_AddItem( this->_GetHandle() , value );
	}

	inline void spUnsignedShortArray::SetItem( rid id , unsigned short value ) const
	{
		this->_GetAPI()->fpUnsignedShortArray_SetItem( this->_GetHandle() , id , value );
	}

	inline unsigned short spUnsignedShortArray::GetItem( rid id ) const
	{
		return this->_GetAPI()->fpUnsignedShortArray_GetItem( this->_GetHandle() , id );
	}

	inline void spUnsignedShortArray::AddTuple( const unsigned short *tuple ) const
	{
		this->_GetAPI()->fpUnsignedShortArray_AddTuple( this->_GetHandle() , tuple );
	}

	inline void spUnsignedShortArray::SetTuple( rid id , const unsigned short *tuple ) const
	{
		this->_GetAPI()->fpUnsignedShortArray_SetTuple( this->_GetHandle() , id , tuple );
	}

	inline spUnsignedShortData spUnsignedShortArray::GetTuple( rid id ) const
	{
		return spUnsignedShortData( this->_GetAPI() , this->_GetAPI()->fpUnsignedShortArray_GetTuple( this->_GetHandle() , id ));
	}

	inline spUnsignedShortData spUnsignedShortArray::GetData(  ) const
	{
		return spUnsignedShortData( this->_GetAPI() , this->_GetAPI()->fpUnsignedShortArray_GetData( this->_GetHandle() ));
	}

	inline spUnsignedShortData spUnsignedShortArray::GetDataRange( rid start_tuple_id , unsigned int tuple_count ) const
	{
		return spUnsignedShortData( this->_GetAPI() , this->_GetAPI()->fpUnsignedShortArray_GetDataRange( this->_GetHandle() , start_tuple_id , tuple_count ));
	}

	inline void spUnsignedShortArray::SetData( const unsigned short *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpUnsignedShortArray_SetData( this->_GetHandle() , source_items , source_item_count );
	}

	inline void spUnsignedShortArray::SetDataRange( rid start_tuple_id , const unsigned short *source_items , unsigned int source_item_count ) const
	{
		this->_GetAPI()->fpUnsignedShortArray_SetDataRange( this->_GetHandle() , start_tuple_id , source_items , source_item_count );
	}

	inline void spUnsignedShortArray::SetDataFromMemoryPtr( void *mem_area , unsigned int source_tuple_count , unsigned int item_stride , unsigned int tuple_stride ) const
	{
		this->_GetAPI()->fpUnsignedShortArray_SetDataFromMemoryPtr( this->_GetHandle() , mem_area , source_tuple_count , item_stride , tuple_stride );
	}

	/// Implementations of spChunkedImageData methods
	inline spChunkedImageData::spChunkedImageData() : spObject( nullptr , nullptr ) {}
	inline spChunkedImageData::spChunkedImageData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spChunkedImageData::spChunkedImageData( const spChunkedImageData &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spChunkedImageData & spChunkedImageData::operator= ( const spChunkedImageData &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spChunkedImageData spChunkedImageData::SafeCast( spObject other ) { spChunkedImageData ret; if( other.NonNull() && other.IsA("IChunkedImageData") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spChunkedImageData* spChunkedImageData::operator->() const { return this; }
	inline spChunkedImageData::spChunkedImageData( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::spChunkedImageData spChunkedImageData::NewCopy( bool copy_data ) const
	{
		spChunkedImageData retobj = spChunkedImageData( this->_GetAPI() , this->_GetAPI()->fpChunkedImageData_NewCopy( this->_GetHandle() , copy_data ));
		return retobj;
	}

	inline void spChunkedImageData::DeepCopy( const spChunkedImageData & source , bool copy_data ) const
	{
		this->_GetAPI()->fpChunkedImageData_DeepCopy( this->_GetHandle() , hIntf(source) , copy_data );
	}

	inline void spChunkedImageData::SetTemplateImage( const spImageData & _template ) const
	{
		this->_GetAPI()->fpChunkedImageData_SetTemplateImage( this->_GetHandle() , hIntf(_template) );
	}

	inline unsigned int spChunkedImageData::GetTemplateXSize(  ) const
	{
		return this->_GetAPI()->fpChunkedImageData_GetTemplateXSize( this->_GetHandle() );
	}

	inline unsigned int spChunkedImageData::GetTemplateYSize(  ) const
	{
		return this->_GetAPI()->fpChunkedImageData_GetTemplateYSize( this->_GetHandle() );
	}

	inline unsigned int spChunkedImageData::GetTemplateZSize(  ) const
	{
		return this->_GetAPI()->fpChunkedImageData_GetTemplateZSize( this->_GetHandle() );
	}

	inline unsigned int spChunkedImageData::GetXSize(  ) const
	{
		return this->_GetAPI()->fpChunkedImageData_GetXSize( this->_GetHandle() );
	}

	inline unsigned int spChunkedImageData::GetYSize(  ) const
	{
		return this->_GetAPI()->fpChunkedImageData_GetYSize( this->_GetHandle() );
	}

	inline unsigned int spChunkedImageData::GetZSize(  ) const
	{
		return this->_GetAPI()->fpChunkedImageData_GetZSize( this->_GetHandle() );
	}

	inline void spChunkedImageData::Set1DSize( unsigned int _xs ) const
	{
		this->_GetAPI()->fpChunkedImageData_Set1DSize( this->_GetHandle() , _xs );
	}

	inline void spChunkedImageData::Set2DSize( unsigned int _xs , unsigned int _ys ) const
	{
		this->_GetAPI()->fpChunkedImageData_Set2DSize( this->_GetHandle() , _xs , _ys );
	}

	inline void spChunkedImageData::Set3DSize( unsigned int _xs , unsigned int _ys , unsigned int _zs ) const
	{
		this->_GetAPI()->fpChunkedImageData_Set3DSize( this->_GetHandle() , _xs , _ys , _zs );
	}

	inline unsigned int spChunkedImageData::GetTotalXSize(  ) const
	{
		return this->_GetAPI()->fpChunkedImageData_GetTotalXSize( this->_GetHandle() );
	}

	inline unsigned int spChunkedImageData::GetTotalYSize(  ) const
	{
		return this->_GetAPI()->fpChunkedImageData_GetTotalYSize( this->_GetHandle() );
	}

	inline unsigned int spChunkedImageData::GetTotalZSize(  ) const
	{
		return this->_GetAPI()->fpChunkedImageData_GetTotalZSize( this->_GetHandle() );
	}

	inline void spChunkedImageData::Reset(  ) const
	{
		this->_GetAPI()->fpChunkedImageData_Reset( this->_GetHandle() );
	}

	inline Simplygon::spImageData spChunkedImageData::LockChunk1D( rid x ) const
	{
		spImageData retobj = spImageData( this->_GetAPI() , this->_GetAPI()->fpChunkedImageData_LockChunk1D( this->_GetHandle() , x ));
		return retobj;
	}

	inline Simplygon::spImageData spChunkedImageData::LockChunk2D( rid x , rid y ) const
	{
		spImageData retobj = spImageData( this->_GetAPI() , this->_GetAPI()->fpChunkedImageData_LockChunk2D( this->_GetHandle() , x , y ));
		return retobj;
	}

	inline Simplygon::spImageData spChunkedImageData::LockChunk3D( rid x , rid y , rid z ) const
	{
		spImageData retobj = spImageData( this->_GetAPI() , this->_GetAPI()->fpChunkedImageData_LockChunk3D( this->_GetHandle() , x , y , z ));
		return retobj;
	}

	inline bool spChunkedImageData::IsChunkLocked1D( rid x ) const
	{
		return this->_GetAPI()->fpChunkedImageData_IsChunkLocked1D( this->_GetHandle() , x );
	}

	inline bool spChunkedImageData::IsChunkLocked2D( rid x , rid y ) const
	{
		return this->_GetAPI()->fpChunkedImageData_IsChunkLocked2D( this->_GetHandle() , x , y );
	}

	inline bool spChunkedImageData::IsChunkLocked3D( rid x , rid y , rid z ) const
	{
		return this->_GetAPI()->fpChunkedImageData_IsChunkLocked3D( this->_GetHandle() , x , y , z );
	}

	inline void spChunkedImageData::UnlockChunk1D( rid x ) const
	{
		this->_GetAPI()->fpChunkedImageData_UnlockChunk1D( this->_GetHandle() , x );
	}

	inline void spChunkedImageData::UnlockChunk2D( rid x , rid y ) const
	{
		this->_GetAPI()->fpChunkedImageData_UnlockChunk2D( this->_GetHandle() , x , y );
	}

	inline void spChunkedImageData::UnlockChunk3D( rid x , rid y , rid z ) const
	{
		this->_GetAPI()->fpChunkedImageData_UnlockChunk3D( this->_GetHandle() , x , y , z );
	}

	/// Implementations of spDirectXRenderer methods
	inline spDirectXRenderer::spDirectXRenderer() : spObject( nullptr , nullptr ) {}
	inline spDirectXRenderer::spDirectXRenderer( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spDirectXRenderer::spDirectXRenderer( const spDirectXRenderer &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spDirectXRenderer & spDirectXRenderer::operator= ( const spDirectXRenderer &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spDirectXRenderer spDirectXRenderer::SafeCast( spObject other ) { spDirectXRenderer ret; if( other.NonNull() && other.IsA("IDirectXRenderer") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spDirectXRenderer* spDirectXRenderer::operator->() const { return this; }
	inline spDirectXRenderer::spDirectXRenderer( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline bool spDirectXRenderer::CreatePreviewer( int _width , int _height ) const
	{
		return this->_GetAPI()->fpDirectXRenderer_CreatePreviewer( this->_GetHandle() , _width , _height );
	}

	inline void spDirectXRenderer::RenderAlongCameraPathAndStorePics( int cameraSelectionSetID , const char * file_name_base , const char * format ) const
	{
		this->_GetAPI()->fpDirectXRenderer_RenderAlongCameraPathAndStorePics( this->_GetHandle() , cameraSelectionSetID , file_name_base , format );
	}

	inline void spDirectXRenderer::SetRenderWireFrameMode( bool flag ) const
	{
		this->_GetAPI()->fpDirectXRenderer_SetRenderWireFrameMode( this->_GetHandle() , flag );
	}

	inline void spDirectXRenderer::SetBackgroundColor( real r , real g , real b , real a ) const
	{
		this->_GetAPI()->fpDirectXRenderer_SetBackgroundColor( this->_GetHandle() , r , g , b , a );
	}

	inline spRealData spDirectXRenderer::GetBackgroundColor(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpDirectXRenderer_GetBackgroundColor( this->_GetHandle() ));
	}

	inline void spDirectXRenderer::SetUseInMemoryShaderGeneration( bool flag ) const
	{
		this->_GetAPI()->fpDirectXRenderer_SetUseInMemoryShaderGeneration( this->_GetHandle() , flag );
	}

	inline bool spDirectXRenderer::GetUseInMemoryShaderGeneration(  ) const
	{
		return this->_GetAPI()->fpDirectXRenderer_GetUseInMemoryShaderGeneration( this->_GetHandle() );
	}

	inline bool spDirectXRenderer::LoadGeometryData( const spGeometryData & geom , const spMaterialTable & materials ) const
	{
		return this->_GetAPI()->fpDirectXRenderer_LoadGeometryData( this->_GetHandle() , hIntf(geom) , hIntf(materials) );
	}

	inline bool spDirectXRenderer::LoadGeometryDataWithMaterialShadingNetwork( const spScene & _scene ) const
	{
		return this->_GetAPI()->fpDirectXRenderer_LoadGeometryDataWithMaterialShadingNetwork( this->_GetHandle() , hIntf(_scene) );
	}

	inline void spDirectXRenderer::SetScene( const spScene & _scene ) const
	{
		this->_GetAPI()->fpDirectXRenderer_SetScene( this->_GetHandle() , hIntf(_scene) );
	}

	inline bool spDirectXRenderer::InitializeSceneRenderData(  ) const
	{
		return this->_GetAPI()->fpDirectXRenderer_InitializeSceneRenderData( this->_GetHandle() );
	}

	/// Implementations of spFieldData methods
	inline spFieldData::spFieldData() : spObject( nullptr , nullptr ) {}
	inline spFieldData::spFieldData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spFieldData::spFieldData( const spFieldData &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spFieldData & spFieldData::operator= ( const spFieldData &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spFieldData spFieldData::SafeCast( spObject other ) { spFieldData ret; if( other.NonNull() && other.IsA("IFieldData") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spFieldData* spFieldData::operator->() const { return this; }
	inline spFieldData::spFieldData( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::spFieldData spFieldData::NewCopy( bool copy_data ) const
	{
		spFieldData retobj = spFieldData( this->_GetAPI() , this->_GetAPI()->fpFieldData_NewCopy( this->_GetHandle() , copy_data ));
		return retobj;
	}

	inline Simplygon::spFieldData spFieldData::NewPackedCopy( const spRidArray & index_array ) const
	{
		spFieldData retobj = spFieldData( this->_GetAPI() , this->_GetAPI()->fpFieldData_NewPackedCopy( this->_GetHandle() , hIntf(index_array) ));
		return retobj;
	}

	inline void spFieldData::DeepCopy( const spFieldData & source , bool copy_data ) const
	{
		this->_GetAPI()->fpFieldData_DeepCopy( this->_GetHandle() , hIntf(source) , copy_data );
	}

	inline bool spFieldData::IsSetupIdenticalTo( const spFieldData & other ) const
	{
		return this->_GetAPI()->fpFieldData_IsSetupIdenticalTo( this->_GetHandle() , hIntf(other) );
	}

	inline void spFieldData::IndexedCopy( const spFieldData & source , const spRidArray & idtable , rid startId ) const
	{
		this->_GetAPI()->fpFieldData_IndexedCopy( this->_GetHandle() , hIntf(source) , hIntf(idtable) , startId );
	}

	inline void spFieldData::IndexedCombine( const spFieldData & source , const spRidArray & idtable , const spRealArray & blendtable , rid startId ) const
	{
		this->_GetAPI()->fpFieldData_IndexedCombine( this->_GetHandle() , hIntf(source) , hIntf(idtable) , hIntf(blendtable) , startId );
	}

	inline void spFieldData::IndexedCombine3( const spFieldData & source , const spRidArray & idtable , const spRealArray & blendtable , rid startId ) const
	{
		this->_GetAPI()->fpFieldData_IndexedCombine3( this->_GetHandle() , hIntf(source) , hIntf(idtable) , hIntf(blendtable) , startId );
	}

	inline void spFieldData::Clear(  ) const
	{
		this->_GetAPI()->fpFieldData_Clear( this->_GetHandle() );
	}

	inline void spFieldData::RemoveAllFields(  ) const
	{
		this->_GetAPI()->fpFieldData_RemoveAllFields( this->_GetHandle() );
	}

	inline int spFieldData::IsEmpty(  ) const
	{
		return this->_GetAPI()->fpFieldData_IsEmpty( this->_GetHandle() );
	}

	inline void spFieldData::AppendTuples( const spFieldData & other , bool add_missing_fields ) const
	{
		this->_GetAPI()->fpFieldData_AppendTuples( this->_GetHandle() , hIntf(other) , add_missing_fields );
	}

	inline void spFieldData::ExtractTuples( const spFieldData & dest , rid start , unsigned int count ) const
	{
		this->_GetAPI()->fpFieldData_ExtractTuples( this->_GetHandle() , hIntf(dest) , start , count );
	}

	inline void spFieldData::AddField( const spValueArray & field ) const
	{
		this->_GetAPI()->fpFieldData_AddField( this->_GetHandle() , hIntf(field) );
	}

	inline Simplygon::spValueArray spFieldData::AddBaseTypeField( Simplygon::EBaseTypes base_type , unsigned int tuple_size , const char * name ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpFieldData_AddBaseTypeField( this->_GetHandle() , (EBaseTypes)base_type , tuple_size , name ));
		return retobj;
	}

	inline Simplygon::spValueArray spFieldData::GetField( const char * name ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpFieldData_GetField( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spValueArray spFieldData::GetFieldWithId( rid id ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpFieldData_GetFieldWithId( this->_GetHandle() , id ));
		return retobj;
	}

	inline void spFieldData::RemoveField( const char * name ) const
	{
		this->_GetAPI()->fpFieldData_RemoveField( this->_GetHandle() , name );
	}

	inline void spFieldData::SafeRemoveField( const char * name ) const
	{
		this->_GetAPI()->fpFieldData_SafeRemoveField( this->_GetHandle() , name );
	}

	inline unsigned int spFieldData::GetFieldCount(  ) const
	{
		return this->_GetAPI()->fpFieldData_GetFieldCount( this->_GetHandle() );
	}

	inline rid spFieldData::GetMaxFieldId(  ) const
	{
		return this->_GetAPI()->fpFieldData_GetMaxFieldId( this->_GetHandle() );
	}

	inline rhandle spFieldData::GetFirstFieldHandle(  ) const
	{
		return this->_GetAPI()->fpFieldData_GetFirstFieldHandle( this->_GetHandle() );
	}

	inline rhandle spFieldData::GetNextFieldHandle( rhandle hand ) const
	{
		return this->_GetAPI()->fpFieldData_GetNextFieldHandle( this->_GetHandle() , hand );
	}

	inline Simplygon::spValueArray spFieldData::GetFieldWithHandle( rhandle hand ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpFieldData_GetFieldWithHandle( this->_GetHandle() , hand ));
		return retobj;
	}

	inline void spFieldData::SetTupleCount( unsigned int tuplecount ) const
	{
		this->_GetAPI()->fpFieldData_SetTupleCount( this->_GetHandle() , tuplecount );
	}

	inline unsigned int spFieldData::GetTupleCount(  ) const
	{
		return this->_GetAPI()->fpFieldData_GetTupleCount( this->_GetHandle() );
	}

	inline void spFieldData::AddTupleCount( unsigned int tuplecount ) const
	{
		this->_GetAPI()->fpFieldData_AddTupleCount( this->_GetHandle() , tuplecount );
	}

	inline rid spFieldData::GetMaxTupleId(  ) const
	{
		return this->_GetAPI()->fpFieldData_GetMaxTupleId( this->_GetHandle() );
	}

	inline void spFieldData::CopyTuple( const spFieldData & source , rid dest_id , rid src_id ) const
	{
		this->_GetAPI()->fpFieldData_CopyTuple( this->_GetHandle() , hIntf(source) , dest_id , src_id );
	}

	inline void spFieldData::CopyCombineTuples( const spFieldData & source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha ) const
	{
		this->_GetAPI()->fpFieldData_CopyCombineTuples( this->_GetHandle() , hIntf(source) , dest_id , src_id_1 , src_id_2 , alpha );
	}

	inline void spFieldData::CopyCombine3Tuples( const spFieldData & source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 ) const
	{
		this->_GetAPI()->fpFieldData_CopyCombine3Tuples( this->_GetHandle() , hIntf(source) , dest_id , src_id_1 , src_id_2 , src_id_3 , alpha_1 , alpha_2 );
	}

	inline void spFieldData::CopyRange( const spFieldData & source , rid start_dest_id , rid start_src_id , unsigned int count ) const
	{
		this->_GetAPI()->fpFieldData_CopyRange( this->_GetHandle() , hIntf(source) , start_dest_id , start_src_id , count );
	}

	/// Implementations of spGeometryData methods
	inline spGeometryData::spGeometryData() : spObject( nullptr , nullptr ) {}
	inline spGeometryData::spGeometryData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spGeometryData::spGeometryData( const spGeometryData &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spGeometryData & spGeometryData::operator= ( const spGeometryData &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGeometryData spGeometryData::SafeCast( spObject other ) { spGeometryData ret; if( other.NonNull() && other.IsA("IGeometryData") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGeometryData* spGeometryData::operator->() const { return this; }
	inline spGeometryData::spGeometryData( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::spGeometryData spGeometryData::NewCopy( bool copy_data ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpGeometryData_NewCopy( this->_GetHandle() , copy_data ));
		return retobj;
	}

	inline Simplygon::spPackedGeometryData spGeometryData::NewPackedCopy(  ) const
	{
		spPackedGeometryData retobj = spPackedGeometryData( this->_GetAPI() , this->_GetAPI()->fpGeometryData_NewPackedCopy( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::DeepCopy( const spGeometryData & source , bool copy_data ) const
	{
		this->_GetAPI()->fpGeometryData_DeepCopy( this->_GetHandle() , hIntf(source) , copy_data );
	}

	inline void spGeometryData::SetVertexCount( unsigned int count ) const
	{
		this->_GetAPI()->fpGeometryData_SetVertexCount( this->_GetHandle() , count );
	}

	inline unsigned int spGeometryData::GetVertexCount(  ) const
	{
		return this->_GetAPI()->fpGeometryData_GetVertexCount( this->_GetHandle() );
	}

	inline void spGeometryData::AddVertices( unsigned int count ) const
	{
		this->_GetAPI()->fpGeometryData_AddVertices( this->_GetHandle() , count );
	}

	inline void spGeometryData::SetTriangleCount( unsigned int count ) const
	{
		this->_GetAPI()->fpGeometryData_SetTriangleCount( this->_GetHandle() , count );
	}

	inline unsigned int spGeometryData::GetTriangleCount(  ) const
	{
		return this->_GetAPI()->fpGeometryData_GetTriangleCount( this->_GetHandle() );
	}

	inline void spGeometryData::AddTriangles( unsigned int count ) const
	{
		this->_GetAPI()->fpGeometryData_AddTriangles( this->_GetHandle() , count );
	}

	inline void spGeometryData::FindEdgeIdsFromVertexPairs( const spRidArray & vertex_pairs , const spRidArray & edge_ids ) const
	{
		this->_GetAPI()->fpGeometryData_FindEdgeIdsFromVertexPairs( this->_GetHandle() , hIntf(vertex_pairs) , hIntf(edge_ids) );
	}

	inline Simplygon::spRealArray spGeometryData::GetCoords(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetCoords( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::AddVertexLocks(  ) const
	{
		this->_GetAPI()->fpGeometryData_AddVertexLocks( this->_GetHandle() );
	}

	inline void spGeometryData::RemoveVertexLocks(  ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveVertexLocks( this->_GetHandle() );
	}

	inline Simplygon::spBoolArray spGeometryData::GetVertexLocks(  ) const
	{
		spBoolArray retobj = spBoolArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetVertexLocks( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::AddBoneWeights( unsigned int tuplesize ) const
	{
		this->_GetAPI()->fpGeometryData_AddBoneWeights( this->_GetHandle() , tuplesize );
	}

	inline void spGeometryData::RemoveBoneWeights(  ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveBoneWeights( this->_GetHandle() );
	}

	inline Simplygon::spRealArray spGeometryData::GetBoneWeights(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetBoneWeights( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spRidArray spGeometryData::GetBoneIds(  ) const
	{
		spRidArray retobj = spRidArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetBoneIds( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::AddVertexWeights(  ) const
	{
		this->_GetAPI()->fpGeometryData_AddVertexWeights( this->_GetHandle() );
	}

	inline void spGeometryData::RemoveVertexWeights(  ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveVertexWeights( this->_GetHandle() );
	}

	inline Simplygon::spRealArray spGeometryData::GetVertexWeights(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetVertexWeights( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::AddUserVertexField( const spValueArray & field ) const
	{
		this->_GetAPI()->fpGeometryData_AddUserVertexField( this->_GetHandle() , hIntf(field) );
	}

	inline void spGeometryData::RemoveUserVertexField( const char * name ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveUserVertexField( this->_GetHandle() , name );
	}

	inline Simplygon::spValueArray spGeometryData::GetUserVertexField( const char * name ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetUserVertexField( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spValueArray spGeometryData::AddBaseTypeUserVertexField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_AddBaseTypeUserVertexField( this->_GetHandle() , (EBaseTypes)base_type , name , tuple_size ));
		return retobj;
	}

	inline void spGeometryData::CopyVertex( const spGeometryData & source , rid dest_id , rid src_id ) const
	{
		this->_GetAPI()->fpGeometryData_CopyVertex( this->_GetHandle() , hIntf(source) , dest_id , src_id );
	}

	inline void spGeometryData::CopyCombineVertices( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha ) const
	{
		this->_GetAPI()->fpGeometryData_CopyCombineVertices( this->_GetHandle() , hIntf(source) , dest_id , src_id_1 , src_id_2 , alpha );
	}

	inline void spGeometryData::CopyCombine3Vertices( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 ) const
	{
		this->_GetAPI()->fpGeometryData_CopyCombine3Vertices( this->_GetHandle() , hIntf(source) , dest_id , src_id_1 , src_id_2 , src_id_3 , alpha_1 , alpha_2 );
	}

	inline Simplygon::spFieldData spGeometryData::GetVertices(  ) const
	{
		spFieldData retobj = spFieldData( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetVertices( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spRidArray spGeometryData::GetVertexIds(  ) const
	{
		spRidArray retobj = spRidArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetVertexIds( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::AddTexCoords( rid level ) const
	{
		this->_GetAPI()->fpGeometryData_AddTexCoords( this->_GetHandle() , level );
	}

	inline rid spGeometryData::AddNamedTexCoords( const char * alternative_name ) const
	{
		return this->_GetAPI()->fpGeometryData_AddNamedTexCoords( this->_GetHandle() , alternative_name );
	}

	inline void spGeometryData::RemoveTexCoords( rid level ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveTexCoords( this->_GetHandle() , level );
	}

	inline bool spGeometryData::RemoveNamedTexCoords( const char * alternative_name ) const
	{
		return this->_GetAPI()->fpGeometryData_RemoveNamedTexCoords( this->_GetHandle() , alternative_name );
	}

	inline Simplygon::spRealArray spGeometryData::GetTexCoords( rid level ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetTexCoords( this->_GetHandle() , level ));
		return retobj;
	}

	inline Simplygon::spRealArray spGeometryData::GetNamedTexCoords( const char * alternative_name ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetNamedTexCoords( this->_GetHandle() , alternative_name ));
		return retobj;
	}

	inline void spGeometryData::AddTangents( rid level ) const
	{
		this->_GetAPI()->fpGeometryData_AddTangents( this->_GetHandle() , level );
	}

	inline void spGeometryData::RemoveTangents( rid level ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveTangents( this->_GetHandle() , level );
	}

	inline Simplygon::spRealArray spGeometryData::GetTangents( rid level ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetTangents( this->_GetHandle() , level ));
		return retobj;
	}

	inline Simplygon::spRealArray spGeometryData::GetBitangents( rid level ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetBitangents( this->_GetHandle() , level ));
		return retobj;
	}

	inline void spGeometryData::AddNormals(  ) const
	{
		this->_GetAPI()->fpGeometryData_AddNormals( this->_GetHandle() );
	}

	inline void spGeometryData::RemoveNormals(  ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveNormals( this->_GetHandle() );
	}

	inline Simplygon::spRealArray spGeometryData::GetNormals(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetNormals( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::AddColors( rid channel ) const
	{
		this->_GetAPI()->fpGeometryData_AddColors( this->_GetHandle() , channel );
	}

	inline rid spGeometryData::AddNamedColors( const char * alternative_name ) const
	{
		return this->_GetAPI()->fpGeometryData_AddNamedColors( this->_GetHandle() , alternative_name );
	}

	inline void spGeometryData::RemoveColors( rid level ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveColors( this->_GetHandle() , level );
	}

	inline bool spGeometryData::RemoveNamedColors( const char * alternative_name ) const
	{
		return this->_GetAPI()->fpGeometryData_RemoveNamedColors( this->_GetHandle() , alternative_name );
	}

	inline Simplygon::spRealArray spGeometryData::GetColors( rid level ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetColors( this->_GetHandle() , level ));
		return retobj;
	}

	inline Simplygon::spRealArray spGeometryData::GetNamedColors( const char * alternative_name ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetNamedColors( this->_GetHandle() , alternative_name ));
		return retobj;
	}

	inline void spGeometryData::AddUserCornerField( const spValueArray & field ) const
	{
		this->_GetAPI()->fpGeometryData_AddUserCornerField( this->_GetHandle() , hIntf(field) );
	}

	inline void spGeometryData::RemoveUserCornerField( const char * name ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveUserCornerField( this->_GetHandle() , name );
	}

	inline Simplygon::spValueArray spGeometryData::GetUserCornerField( const char * name ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetUserCornerField( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spValueArray spGeometryData::AddBaseTypeUserCornerField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_AddBaseTypeUserCornerField( this->_GetHandle() , (EBaseTypes)base_type , name , tuple_size ));
		return retobj;
	}

	inline void spGeometryData::CopyCorner( const spGeometryData & source , rid dest_id , rid src_id ) const
	{
		this->_GetAPI()->fpGeometryData_CopyCorner( this->_GetHandle() , hIntf(source) , dest_id , src_id );
	}

	inline void spGeometryData::CopyCombineCorners( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha ) const
	{
		this->_GetAPI()->fpGeometryData_CopyCombineCorners( this->_GetHandle() , hIntf(source) , dest_id , src_id_1 , src_id_2 , alpha );
	}

	inline void spGeometryData::CopyCombine3Corners( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 ) const
	{
		this->_GetAPI()->fpGeometryData_CopyCombine3Corners( this->_GetHandle() , hIntf(source) , dest_id , src_id_1 , src_id_2 , src_id_3 , alpha_1 , alpha_2 );
	}

	inline Simplygon::spFieldData spGeometryData::GetCorners(  ) const
	{
		spFieldData retobj = spFieldData( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetCorners( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::AddMaterialIds(  ) const
	{
		this->_GetAPI()->fpGeometryData_AddMaterialIds( this->_GetHandle() );
	}

	inline void spGeometryData::RemoveMaterialIds(  ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveMaterialIds( this->_GetHandle() );
	}

	inline Simplygon::spRidArray spGeometryData::GetMaterialIds(  ) const
	{
		spRidArray retobj = spRidArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetMaterialIds( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::AddGroupIds(  ) const
	{
		this->_GetAPI()->fpGeometryData_AddGroupIds( this->_GetHandle() );
	}

	inline void spGeometryData::RemoveGroupIds(  ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveGroupIds( this->_GetHandle() );
	}

	inline Simplygon::spRidArray spGeometryData::GetGroupIds(  ) const
	{
		spRidArray retobj = spRidArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetGroupIds( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::AddUserTriangleField( const spValueArray & field ) const
	{
		this->_GetAPI()->fpGeometryData_AddUserTriangleField( this->_GetHandle() , hIntf(field) );
	}

	inline void spGeometryData::RemoveUserTriangleField( const char * name ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveUserTriangleField( this->_GetHandle() , name );
	}

	inline Simplygon::spValueArray spGeometryData::GetUserTriangleField( const char * name ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetUserTriangleField( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spValueArray spGeometryData::AddBaseTypeUserTriangleField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_AddBaseTypeUserTriangleField( this->_GetHandle() , (EBaseTypes)base_type , name , tuple_size ));
		return retobj;
	}

	inline void spGeometryData::CopyTriangle( const spGeometryData & source , rid dest_id , rid src_id ) const
	{
		this->_GetAPI()->fpGeometryData_CopyTriangle( this->_GetHandle() , hIntf(source) , dest_id , src_id );
	}

	inline void spGeometryData::CopyCombineTriangles( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , real alpha ) const
	{
		this->_GetAPI()->fpGeometryData_CopyCombineTriangles( this->_GetHandle() , hIntf(source) , dest_id , src_id_1 , src_id_2 , alpha );
	}

	inline void spGeometryData::CopyCombine3Triangles( const spGeometryData & source , rid dest_id , rid src_id_1 , rid src_id_2 , rid src_id_3 , real alpha_1 , real alpha_2 ) const
	{
		this->_GetAPI()->fpGeometryData_CopyCombine3Triangles( this->_GetHandle() , hIntf(source) , dest_id , src_id_1 , src_id_2 , src_id_3 , alpha_1 , alpha_2 );
	}

	inline Simplygon::spFieldData spGeometryData::GetTriangles(  ) const
	{
		spFieldData retobj = spFieldData( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetTriangles( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::AddCustomField( const spValueArray & field ) const
	{
		this->_GetAPI()->fpGeometryData_AddCustomField( this->_GetHandle() , hIntf(field) );
	}

	inline void spGeometryData::RemoveCustomField( const char * name ) const
	{
		this->_GetAPI()->fpGeometryData_RemoveCustomField( this->_GetHandle() , name );
	}

	inline Simplygon::spValueArray spGeometryData::GetCustomField( const char * name ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetCustomField( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spValueArray spGeometryData::AddBaseTypeCustomField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpGeometryData_AddBaseTypeCustomField( this->_GetHandle() , (EBaseTypes)base_type , name , tuple_size ));
		return retobj;
	}

	inline void spGeometryData::CleanupNanValues(  ) const
	{
		this->_GetAPI()->fpGeometryData_CleanupNanValues( this->_GetHandle() );
	}

	inline void spGeometryData::CleanupInvalidTriangles(  ) const
	{
		this->_GetAPI()->fpGeometryData_CleanupInvalidTriangles( this->_GetHandle() );
	}

	inline rid spGeometryData::FindNamedTexCoordsIndex( const char * field_name ) const
	{
		return this->_GetAPI()->fpGeometryData_FindNamedTexCoordsIndex( this->_GetHandle() , field_name );
	}

	inline rid spGeometryData::FindNamedColorsIndex( const char * field_name ) const
	{
		return this->_GetAPI()->fpGeometryData_FindNamedColorsIndex( this->_GetHandle() , field_name );
	}

	inline Simplygon::spGeometryData spGeometryData::CreateAABB(  ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpGeometryData_CreateAABB( this->_GetHandle() ));
		return retobj;
	}

	inline void spGeometryData::ExpandVertices(  ) const
	{
		this->_GetAPI()->fpGeometryData_ExpandVertices( this->_GetHandle() );
	}

	inline void spGeometryData::ExtractRange( const spGeometryData & dest , rid start_tri_id , unsigned int count ) const
	{
		this->_GetAPI()->fpGeometryData_ExtractRange( this->_GetHandle() , hIntf(dest) , start_tri_id , count );
	}

	inline void spGeometryData::ExtractTriangles( const spGeometryData & dest , const spRidArray & triangle_ids ) const
	{
		this->_GetAPI()->fpGeometryData_ExtractTriangles( this->_GetHandle() , hIntf(dest) , hIntf(triangle_ids) );
	}

	inline void spGeometryData::AppendGeometry( const spGeometryData & source ) const
	{
		this->_GetAPI()->fpGeometryData_AppendGeometry( this->_GetHandle() , hIntf(source) );
	}

	inline void spGeometryData::Compact( bool only_compact_triangles ) const
	{
		this->_GetAPI()->fpGeometryData_Compact( this->_GetHandle() , only_compact_triangles );
	}

	inline void spGeometryData::Weld( real threshold ) const
	{
		this->_GetAPI()->fpGeometryData_Weld( this->_GetHandle() , threshold );
	}

	inline spRealData spGeometryData::GetInf(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetInf( this->_GetHandle() ));
	}

	inline void spGeometryData::SetInf( const real *vec ) const
	{
		this->_GetAPI()->fpGeometryData_SetInf( this->_GetHandle() , vec );
	}

	inline spRealData spGeometryData::GetSup(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpGeometryData_GetSup( this->_GetHandle() ));
	}

	inline void spGeometryData::SetSup( const real *vec ) const
	{
		this->_GetAPI()->fpGeometryData_SetSup( this->_GetHandle() , vec );
	}

	inline void spGeometryData::CalculateExtents( bool only_triangles ) const
	{
		this->_GetAPI()->fpGeometryData_CalculateExtents( this->_GetHandle() , only_triangles );
	}

	inline bool spGeometryData::ExtentsContainCoords(  ) const
	{
		return this->_GetAPI()->fpGeometryData_ExtentsContainCoords( this->_GetHandle() );
	}

	inline void spGeometryData::Transform( const spMatrix4x4 & transformation ) const
	{
		this->_GetAPI()->fpGeometryData_Transform( this->_GetHandle() , hIntf(transformation) );
	}

	inline void spGeometryData::DetectEdgeNeighbours(  ) const
	{
		this->_GetAPI()->fpGeometryData_DetectEdgeNeighbours( this->_GetHandle() );
	}

	inline void spGeometryData::ConvertHandedness(  ) const
	{
		this->_GetAPI()->fpGeometryData_ConvertHandedness( this->_GetHandle() );
	}

	inline void spGeometryData::ChangeWinding(  ) const
	{
		this->_GetAPI()->fpGeometryData_ChangeWinding( this->_GetHandle() );
	}

	/// Implementations of spPackedGeometryData methods
	inline spPackedGeometryData::spPackedGeometryData() : spObject( nullptr , nullptr ) {}
	inline spPackedGeometryData::spPackedGeometryData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spPackedGeometryData::spPackedGeometryData( const spPackedGeometryData &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spPackedGeometryData & spPackedGeometryData::operator= ( const spPackedGeometryData &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spPackedGeometryData spPackedGeometryData::SafeCast( spObject other ) { spPackedGeometryData ret; if( other.NonNull() && other.IsA("IPackedGeometryData") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spPackedGeometryData* spPackedGeometryData::operator->() const { return this; }
	inline spPackedGeometryData::spPackedGeometryData( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::spPackedGeometryData spPackedGeometryData::NewCopy( bool copy_data ) const
	{
		spPackedGeometryData retobj = spPackedGeometryData( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_NewCopy( this->_GetHandle() , copy_data ));
		return retobj;
	}

	inline Simplygon::spGeometryData spPackedGeometryData::NewUnpackedCopy(  ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_NewUnpackedCopy( this->_GetHandle() ));
		return retobj;
	}

	inline void spPackedGeometryData::DeepCopy( const spPackedGeometryData & source , bool copy_data ) const
	{
		this->_GetAPI()->fpPackedGeometryData_DeepCopy( this->_GetHandle() , hIntf(source) , copy_data );
	}

	inline int spPackedGeometryData::AppendPackedGeometry( const spGeometryData & source , const spRidArray & NewVertexIds , bool collapseToOriginalVertices ) const
	{
		return this->_GetAPI()->fpPackedGeometryData_AppendPackedGeometry( this->_GetHandle() , hIntf(source) , hIntf(NewVertexIds) , collapseToOriginalVertices );
	}

	inline void spPackedGeometryData::SetVertexCount( unsigned int count ) const
	{
		this->_GetAPI()->fpPackedGeometryData_SetVertexCount( this->_GetHandle() , count );
	}

	inline unsigned int spPackedGeometryData::GetVertexCount(  ) const
	{
		return this->_GetAPI()->fpPackedGeometryData_GetVertexCount( this->_GetHandle() );
	}

	inline void spPackedGeometryData::AddVertices( unsigned int count ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddVertices( this->_GetHandle() , count );
	}

	inline void spPackedGeometryData::SetTriangleCount( unsigned int count ) const
	{
		this->_GetAPI()->fpPackedGeometryData_SetTriangleCount( this->_GetHandle() , count );
	}

	inline unsigned int spPackedGeometryData::GetTriangleCount(  ) const
	{
		return this->_GetAPI()->fpPackedGeometryData_GetTriangleCount( this->_GetHandle() );
	}

	inline void spPackedGeometryData::AddTriangles( unsigned int count ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddTriangles( this->_GetHandle() , count );
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetCoords(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetCoords( this->_GetHandle() ));
		return retobj;
	}

	inline void spPackedGeometryData::AddVertexLocks(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddVertexLocks( this->_GetHandle() );
	}

	inline void spPackedGeometryData::RemoveVertexLocks(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveVertexLocks( this->_GetHandle() );
	}

	inline Simplygon::spBoolArray spPackedGeometryData::GetVertexLocks(  ) const
	{
		spBoolArray retobj = spBoolArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetVertexLocks( this->_GetHandle() ));
		return retobj;
	}

	inline void spPackedGeometryData::AddBoneWeights( unsigned int tuplesize ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddBoneWeights( this->_GetHandle() , tuplesize );
	}

	inline void spPackedGeometryData::RemoveBoneWeights(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveBoneWeights( this->_GetHandle() );
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetBoneWeights(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetBoneWeights( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spRidArray spPackedGeometryData::GetBoneIds(  ) const
	{
		spRidArray retobj = spRidArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetBoneIds( this->_GetHandle() ));
		return retobj;
	}

	inline void spPackedGeometryData::AddVertexWeighting(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddVertexWeighting( this->_GetHandle() );
	}

	inline void spPackedGeometryData::RemoveVertexWeighting(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveVertexWeighting( this->_GetHandle() );
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetVertexWeighting(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetVertexWeighting( this->_GetHandle() ));
		return retobj;
	}

	inline void spPackedGeometryData::AddVertexWeights(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddVertexWeights( this->_GetHandle() );
	}

	inline void spPackedGeometryData::RemoveVertexWeights(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveVertexWeights( this->_GetHandle() );
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetVertexWeights(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetVertexWeights( this->_GetHandle() ));
		return retobj;
	}

	inline void spPackedGeometryData::AddTexCoords( rid level ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddTexCoords( this->_GetHandle() , level );
	}

	inline rid spPackedGeometryData::AddNamedTexCoords( const char * alternative_name ) const
	{
		return this->_GetAPI()->fpPackedGeometryData_AddNamedTexCoords( this->_GetHandle() , alternative_name );
	}

	inline void spPackedGeometryData::RemoveTexCoords( rid level ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveTexCoords( this->_GetHandle() , level );
	}

	inline bool spPackedGeometryData::RemoveNamedTexCoords( const char * alternative_name ) const
	{
		return this->_GetAPI()->fpPackedGeometryData_RemoveNamedTexCoords( this->_GetHandle() , alternative_name );
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetTexCoords( rid level ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetTexCoords( this->_GetHandle() , level ));
		return retobj;
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetNamedTexCoords( const char * alternative_name ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetNamedTexCoords( this->_GetHandle() , alternative_name ));
		return retobj;
	}

	inline void spPackedGeometryData::AddTangents( rid level ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddTangents( this->_GetHandle() , level );
	}

	inline void spPackedGeometryData::RemoveTangents( rid level ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveTangents( this->_GetHandle() , level );
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetTangents( rid level ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetTangents( this->_GetHandle() , level ));
		return retobj;
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetBitangents( rid level ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetBitangents( this->_GetHandle() , level ));
		return retobj;
	}

	inline void spPackedGeometryData::AddNormals(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddNormals( this->_GetHandle() );
	}

	inline void spPackedGeometryData::RemoveNormals(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveNormals( this->_GetHandle() );
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetNormals(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetNormals( this->_GetHandle() ));
		return retobj;
	}

	inline void spPackedGeometryData::AddColors( rid level ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddColors( this->_GetHandle() , level );
	}

	inline rid spPackedGeometryData::AddNamedColors( const char * alternative_name ) const
	{
		return this->_GetAPI()->fpPackedGeometryData_AddNamedColors( this->_GetHandle() , alternative_name );
	}

	inline void spPackedGeometryData::RemoveColors( rid level ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveColors( this->_GetHandle() , level );
	}

	inline bool spPackedGeometryData::RemoveNamedColors( const char * alternative_name ) const
	{
		return this->_GetAPI()->fpPackedGeometryData_RemoveNamedColors( this->_GetHandle() , alternative_name );
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetColors( rid level ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetColors( this->_GetHandle() , level ));
		return retobj;
	}

	inline Simplygon::spRealArray spPackedGeometryData::GetNamedColors( const char * alternative_name ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetNamedColors( this->_GetHandle() , alternative_name ));
		return retobj;
	}

	inline void spPackedGeometryData::AddUserVertexField( const spValueArray & field ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddUserVertexField( this->_GetHandle() , hIntf(field) );
	}

	inline void spPackedGeometryData::RemoveUserVertexField( const char * name ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveUserVertexField( this->_GetHandle() , name );
	}

	inline Simplygon::spValueArray spPackedGeometryData::GetUserVertexField( const char * name ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetUserVertexField( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spValueArray spPackedGeometryData::AddBaseTypeUserVertexField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_AddBaseTypeUserVertexField( this->_GetHandle() , (EBaseTypes)base_type , name , tuple_size ));
		return retobj;
	}

	inline Simplygon::spFieldData spPackedGeometryData::GetVertices(  ) const
	{
		spFieldData retobj = spFieldData( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetVertices( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spRidArray spPackedGeometryData::GetVertexIds(  ) const
	{
		spRidArray retobj = spRidArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetVertexIds( this->_GetHandle() ));
		return retobj;
	}

	inline void spPackedGeometryData::AddMaterialIds(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddMaterialIds( this->_GetHandle() );
	}

	inline void spPackedGeometryData::RemoveMaterialIds(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveMaterialIds( this->_GetHandle() );
	}

	inline Simplygon::spRidArray spPackedGeometryData::GetMaterialIds(  ) const
	{
		spRidArray retobj = spRidArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetMaterialIds( this->_GetHandle() ));
		return retobj;
	}

	inline void spPackedGeometryData::AddGroupIds(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddGroupIds( this->_GetHandle() );
	}

	inline void spPackedGeometryData::RemoveGroupIds(  ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveGroupIds( this->_GetHandle() );
	}

	inline Simplygon::spRidArray spPackedGeometryData::GetGroupIds(  ) const
	{
		spRidArray retobj = spRidArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetGroupIds( this->_GetHandle() ));
		return retobj;
	}

	inline void spPackedGeometryData::AddUserTriangleField( const spValueArray & field ) const
	{
		this->_GetAPI()->fpPackedGeometryData_AddUserTriangleField( this->_GetHandle() , hIntf(field) );
	}

	inline void spPackedGeometryData::RemoveUserTriangleField( const char * name ) const
	{
		this->_GetAPI()->fpPackedGeometryData_RemoveUserTriangleField( this->_GetHandle() , name );
	}

	inline Simplygon::spValueArray spPackedGeometryData::GetUserTriangleField( const char * name ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetUserTriangleField( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spValueArray spPackedGeometryData::AddBaseTypeUserTriangleField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_AddBaseTypeUserTriangleField( this->_GetHandle() , (EBaseTypes)base_type , name , tuple_size ));
		return retobj;
	}

	inline Simplygon::spFieldData spPackedGeometryData::GetTriangles(  ) const
	{
		spFieldData retobj = spFieldData( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetTriangles( this->_GetHandle() ));
		return retobj;
	}

	inline spRealData spPackedGeometryData::GetInf(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetInf( this->_GetHandle() ));
	}

	inline void spPackedGeometryData::SetInf( const real *vec ) const
	{
		this->_GetAPI()->fpPackedGeometryData_SetInf( this->_GetHandle() , vec );
	}

	inline spRealData spPackedGeometryData::GetSup(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpPackedGeometryData_GetSup( this->_GetHandle() ));
	}

	inline void spPackedGeometryData::SetSup( const real *vec ) const
	{
		this->_GetAPI()->fpPackedGeometryData_SetSup( this->_GetHandle() , vec );
	}

	/// Implementations of spImageData methods
	inline spImageData::spImageData() : spObject( nullptr , nullptr ) {}
	inline spImageData::spImageData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spImageData::spImageData( const spImageData &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spImageData & spImageData::operator= ( const spImageData &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spImageData spImageData::SafeCast( spObject other ) { spImageData ret; if( other.NonNull() && other.IsA("IImageData") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spImageData* spImageData::operator->() const { return this; }
	inline spImageData::spImageData( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::spImageData spImageData::NewCopy( bool copy_data ) const
	{
		spImageData retobj = spImageData( this->_GetAPI() , this->_GetAPI()->fpImageData_NewCopy( this->_GetHandle() , copy_data ));
		return retobj;
	}

	inline void spImageData::DeepCopy( const spImageData & source , bool copy_data ) const
	{
		this->_GetAPI()->fpImageData_DeepCopy( this->_GetHandle() , hIntf(source) , copy_data );
	}

	inline void spImageData::AddColors( Simplygon::EBaseTypes valuetype , const char * format ) const
	{
		this->_GetAPI()->fpImageData_AddColors( this->_GetHandle() , (EBaseTypes)valuetype , format );
	}

	inline void spImageData::RemoveColors(  ) const
	{
		this->_GetAPI()->fpImageData_RemoveColors( this->_GetHandle() );
	}

	inline Simplygon::spValueArray spImageData::GetColors(  ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpImageData_GetColors( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::EBaseTypes spImageData::GetColorsValueType(  ) const
	{
		return this->_GetAPI()->fpImageData_GetColorsValueType( this->_GetHandle() );
	}

	inline bool spImageData::HasColors(  ) const
	{
		return this->_GetAPI()->fpImageData_HasColors( this->_GetHandle() );
	}

	inline spString spImageData::GetColorsFormat(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpImageData_GetColorsFormat( this->_GetHandle() ));
	}

	inline void spImageData::AddField( const char * name , Simplygon::EBaseTypes valuetype , unsigned int tuplesize ) const
	{
		this->_GetAPI()->fpImageData_AddField( this->_GetHandle() , name , (EBaseTypes)valuetype , tuplesize );
	}

	inline void spImageData::RemoveField( const char * name ) const
	{
		this->_GetAPI()->fpImageData_RemoveField( this->_GetHandle() , name );
	}

	inline Simplygon::spValueArray spImageData::GetField( const char * name ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpImageData_GetField( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::EBaseTypes spImageData::GetFieldValueType( const char * name ) const
	{
		return this->_GetAPI()->fpImageData_GetFieldValueType( this->_GetHandle() , name );
	}

	inline bool spImageData::HasField( const char * name ) const
	{
		return this->_GetAPI()->fpImageData_HasField( this->_GetHandle() , name );
	}

	inline unsigned int spImageData::GetType(  ) const
	{
		return this->_GetAPI()->fpImageData_GetType( this->_GetHandle() );
	}

	inline unsigned int spImageData::GetXSize(  ) const
	{
		return this->_GetAPI()->fpImageData_GetXSize( this->_GetHandle() );
	}

	inline unsigned int spImageData::GetYSize(  ) const
	{
		return this->_GetAPI()->fpImageData_GetYSize( this->_GetHandle() );
	}

	inline unsigned int spImageData::GetZSize(  ) const
	{
		return this->_GetAPI()->fpImageData_GetZSize( this->_GetHandle() );
	}

	inline void spImageData::Set1DSize( unsigned int _xs ) const
	{
		this->_GetAPI()->fpImageData_Set1DSize( this->_GetHandle() , _xs );
	}

	inline void spImageData::Set2DSize( unsigned int _xs , unsigned int _ys ) const
	{
		this->_GetAPI()->fpImageData_Set2DSize( this->_GetHandle() , _xs , _ys );
	}

	inline void spImageData::Set3DSize( unsigned int _xs , unsigned int _ys , unsigned int _zs ) const
	{
		this->_GetAPI()->fpImageData_Set3DSize( this->_GetHandle() , _xs , _ys , _zs );
	}

	inline void spImageData::SetCubeSize( unsigned int _xs , unsigned int _ys ) const
	{
		this->_GetAPI()->fpImageData_SetCubeSize( this->_GetHandle() , _xs , _ys );
	}

	inline void spImageData::Reset(  ) const
	{
		this->_GetAPI()->fpImageData_Reset( this->_GetHandle() );
	}

	inline Simplygon::spFieldData spImageData::GetImageFields(  ) const
	{
		spFieldData retobj = spFieldData( this->_GetAPI() , this->_GetAPI()->fpImageData_GetImageFields( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spTable methods
	inline spTable::spTable() : spObject( nullptr , nullptr ) {}
	inline spTable::spTable( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spTable::spTable( const spTable &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spTable & spTable::operator= ( const spTable &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spTable spTable::SafeCast( spObject other ) { spTable ret; if( other.NonNull() && other.IsA("ITable") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spTable* spTable::operator->() const { return this; }
	inline spTable::spTable( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline rid spTable::AddItem( const spObject & item ) const
	{
		return this->_GetAPI()->fpTable_AddItem( this->_GetHandle() , hIntf(item) );
	}

	inline void spTable::SetItem( rid id , const spObject & item ) const
	{
		this->_GetAPI()->fpTable_SetItem( this->_GetHandle() , id , hIntf(item) );
	}

	inline Simplygon::spObject spTable::FindItem( const char * name ) const
	{
		spObject retobj = spObject( this->_GetAPI() , this->_GetAPI()->fpTable_FindItem( this->_GetHandle() , name ));
		return retobj;
	}

	inline rid spTable::FindItemId( const char * name ) const
	{
		return this->_GetAPI()->fpTable_FindItemId( this->_GetHandle() , name );
	}

	inline Simplygon::spObject spTable::GetItem( rid id ) const
	{
		spObject retobj = spObject( this->_GetAPI() , this->_GetAPI()->fpTable_GetItem( this->_GetHandle() , id ));
		return retobj;
	}

	inline void spTable::RemoveItem( rid id ) const
	{
		this->_GetAPI()->fpTable_RemoveItem( this->_GetHandle() , id );
	}

	inline void spTable::Clear(  ) const
	{
		this->_GetAPI()->fpTable_Clear( this->_GetHandle() );
	}

	inline unsigned int spTable::GetItemsCount(  ) const
	{
		return this->_GetAPI()->fpTable_GetItemsCount( this->_GetHandle() );
	}

	inline void spTable::Copy( const spTable & src ) const
	{
		this->_GetAPI()->fpTable_Copy( this->_GetHandle() , hIntf(src) );
	}

	/// Implementations of spMaterial methods
	inline spMaterial::spMaterial() : spObject( nullptr , nullptr ) {}
	inline spMaterial::spMaterial( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spMaterial::spMaterial( const spMaterial &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spMaterial & spMaterial::operator= ( const spMaterial &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spMaterial spMaterial::SafeCast( spObject other ) { spMaterial ret; if( other.NonNull() && other.IsA("IMaterial") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spMaterial* spMaterial::operator->() const { return this; }
	inline spMaterial::spMaterial( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline unsigned int spMaterial::GetMaterialChannelCount(  ) const
	{
		return this->_GetAPI()->fpMaterial_GetMaterialChannelCount( this->_GetHandle() );
	}

	inline spString spMaterial::GetMaterialChannelFromIndex( rid index ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpMaterial_GetMaterialChannelFromIndex( this->_GetHandle() , index ));
	}

	inline void spMaterial::AddMaterialChannel( const char * channel_name ) const
	{
		this->_GetAPI()->fpMaterial_AddMaterialChannel( this->_GetHandle() , channel_name );
	}

	inline void spMaterial::RemoveMaterialChannel( const char * channel_name ) const
	{
		this->_GetAPI()->fpMaterial_RemoveMaterialChannel( this->_GetHandle() , channel_name );
	}

	inline bool spMaterial::HasMaterialChannel( const char * channel_name ) const
	{
		return this->_GetAPI()->fpMaterial_HasMaterialChannel( this->_GetHandle() , channel_name );
	}

	inline void spMaterial::SetShadingNetwork( const char * channel_name , const spShadingNode & node ) const
	{
		this->_GetAPI()->fpMaterial_SetShadingNetwork( this->_GetHandle() , channel_name , hIntf(node) );
	}

	inline Simplygon::spShadingNode spMaterial::GetShadingNetwork( const char * channel_name ) const
	{
		spShadingNode retobj = spShadingNode( this->_GetAPI() , this->_GetAPI()->fpMaterial_GetShadingNetwork( this->_GetHandle() , channel_name ));
		return retobj;
	}

	inline void spMaterial::LoadShadingNetworkFromXML( const char * channel_name , const char * in_xml ) const
	{
		this->_GetAPI()->fpMaterial_LoadShadingNetworkFromXML( this->_GetHandle() , channel_name , in_xml );
	}

	inline spString spMaterial::SaveShadingNetworkToXML( const char * channel_name ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpMaterial_SaveShadingNetworkToXML( this->_GetHandle() , channel_name ));
	}

	inline void spMaterial::SetUseTangentSpaceNormals( bool value ) const
	{
		this->_GetAPI()->fpMaterial_SetUseTangentSpaceNormals( this->_GetHandle() , value );
	}

	inline bool spMaterial::GetUseTangentSpaceNormals(  ) const
	{
		return this->_GetAPI()->fpMaterial_GetUseTangentSpaceNormals( this->_GetHandle() );
	}

	inline bool spMaterial::IsIdenticalTo( const spMaterial & mat ) const
	{
		return this->_GetAPI()->fpMaterial_IsIdenticalTo( this->_GetHandle() , hIntf(mat) );
	}

	inline bool spMaterial::IsTransparent(  ) const
	{
		return this->_GetAPI()->fpMaterial_IsTransparent( this->_GetHandle() );
	}

	inline void spMaterial::SetMaterialGUID( const char * value ) const
	{
		this->_GetAPI()->fpMaterial_SetMaterialGUID( this->_GetHandle() , value );
	}

	inline spString spMaterial::GetMaterialGUID(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpMaterial_GetMaterialGUID( this->_GetHandle() ));
	}

	inline void spMaterial::SetMaterialType( Simplygon::EMaterialType value ) const
	{
		this->_GetAPI()->fpMaterial_SetMaterialType( this->_GetHandle() , (EMaterialType)value );
	}

	inline Simplygon::EMaterialType spMaterial::GetMaterialType(  ) const
	{
		return this->_GetAPI()->fpMaterial_GetMaterialType( this->_GetHandle() );
	}

	inline void spMaterial::SetOpacityType( Simplygon::EOpacityType value ) const
	{
		this->_GetAPI()->fpMaterial_SetOpacityType( this->_GetHandle() , (EOpacityType)value );
	}

	inline Simplygon::EOpacityType spMaterial::GetOpacityType(  ) const
	{
		return this->_GetAPI()->fpMaterial_GetOpacityType( this->_GetHandle() );
	}

	inline void spMaterial::SetOpacityChannel( const char * value ) const
	{
		this->_GetAPI()->fpMaterial_SetOpacityChannel( this->_GetHandle() , value );
	}

	inline spString spMaterial::GetOpacityChannel(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpMaterial_GetOpacityChannel( this->_GetHandle() ));
	}

	inline void spMaterial::SetBlendMode( Simplygon::EMaterialBlendMode value ) const
	{
		this->_GetAPI()->fpMaterial_SetBlendMode( this->_GetHandle() , (EMaterialBlendMode)value );
	}

	inline Simplygon::EMaterialBlendMode spMaterial::GetBlendMode(  ) const
	{
		return this->_GetAPI()->fpMaterial_GetBlendMode( this->_GetHandle() );
	}

	inline void spMaterial::SetOpacityCutoff( real value ) const
	{
		this->_GetAPI()->fpMaterial_SetOpacityCutoff( this->_GetHandle() , value );
	}

	inline real spMaterial::GetOpacityCutoff(  ) const
	{
		return this->_GetAPI()->fpMaterial_GetOpacityCutoff( this->_GetHandle() );
	}

	inline void spMaterial::ChangeTexturePrefixPath( const char * current_path_prefix , const char * new_path_prefix ) const
	{
		this->_GetAPI()->fpMaterial_ChangeTexturePrefixPath( this->_GetHandle() , current_path_prefix , new_path_prefix );
	}

	inline void spMaterial::SetOpacityFromDiffuseAlpha(  ) const
	{
		this->_GetAPI()->fpMaterial_SetOpacityFromDiffuseAlpha( this->_GetHandle() );
	}

	inline void spMaterial::ConvertHandedness(  ) const
	{
		this->_GetAPI()->fpMaterial_ConvertHandedness( this->_GetHandle() );
	}

	inline void spMaterial::GetMaterialChannels( const spStringArray & channels ) const
	{
		this->_GetAPI()->fpMaterial_GetMaterialChannels( this->_GetHandle() , hIntf(channels) );
	}

	inline void spMaterial::GetMaterialChannelsWithTextureInputs( const spStringArray & channels ) const
	{
		this->_GetAPI()->fpMaterial_GetMaterialChannelsWithTextureInputs( this->_GetHandle() , hIntf(channels) );
	}

	/// Implementations of spMaterialTable methods
	inline spMaterialTable::spMaterialTable() : spTable( nullptr , nullptr ) {}
	inline spMaterialTable::spMaterialTable( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spTable( _sg , _intfptr ) {}
	inline spMaterialTable::spMaterialTable( const spMaterialTable &p ) : spTable( p._GetAPI() , p._GetHandle() ) {}
	inline spMaterialTable & spMaterialTable::operator= ( const spMaterialTable &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spMaterialTable spMaterialTable::SafeCast( spObject other ) { spMaterialTable ret; if( other.NonNull() && other.IsA("IMaterialTable") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spMaterialTable* spMaterialTable::operator->() const { return this; }
	inline spMaterialTable::spMaterialTable( const _NilStruct & ) : spTable( nullptr , nullptr ) {}

	inline rid spMaterialTable::AddMaterial( const spMaterial & material ) const
	{
		return this->_GetAPI()->fpMaterialTable_AddMaterial( this->_GetHandle() , hIntf(material) );
	}

	inline Simplygon::spMaterial spMaterialTable::FindMaterial( const char * name ) const
	{
		spMaterial retobj = spMaterial( this->_GetAPI() , this->_GetAPI()->fpMaterialTable_FindMaterial( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spMaterial spMaterialTable::FindIdenticalMaterial( const spMaterial & mat ) const
	{
		spMaterial retobj = spMaterial( this->_GetAPI() , this->_GetAPI()->fpMaterialTable_FindIdenticalMaterial( this->_GetHandle() , hIntf(mat) ));
		return retobj;
	}

	inline rid spMaterialTable::FindMaterialId( const char * name ) const
	{
		return this->_GetAPI()->fpMaterialTable_FindMaterialId( this->_GetHandle() , name );
	}

	inline rid spMaterialTable::FindIdenticalMaterialId( const spMaterial & mat ) const
	{
		return this->_GetAPI()->fpMaterialTable_FindIdenticalMaterialId( this->_GetHandle() , hIntf(mat) );
	}

	inline Simplygon::spRidArray spMaterialTable::FindIdenticalMaterialIds( const spMaterial & mat ) const
	{
		spRidArray retobj = spRidArray( this->_GetAPI() , this->_GetAPI()->fpMaterialTable_FindIdenticalMaterialIds( this->_GetHandle() , hIntf(mat) ));
		return retobj;
	}

	inline void spMaterialTable::SetMaterial( rid id , const spMaterial & material ) const
	{
		this->_GetAPI()->fpMaterialTable_SetMaterial( this->_GetHandle() , id , hIntf(material) );
	}

	inline Simplygon::spMaterial spMaterialTable::GetMaterial( rid id ) const
	{
		spMaterial retobj = spMaterial( this->_GetAPI() , this->_GetAPI()->fpMaterialTable_GetMaterial( this->_GetHandle() , id ));
		return retobj;
	}

	inline void spMaterialTable::RemoveMaterial( rid id ) const
	{
		this->_GetAPI()->fpMaterialTable_RemoveMaterial( this->_GetHandle() , id );
	}

	inline unsigned int spMaterialTable::GetMaterialsCount(  ) const
	{
		return this->_GetAPI()->fpMaterialTable_GetMaterialsCount( this->_GetHandle() );
	}

	inline void spMaterialTable::ChangeTexturePrefixPath( const char * current_path_prefix , const char * new_path_prefix ) const
	{
		this->_GetAPI()->fpMaterialTable_ChangeTexturePrefixPath( this->_GetHandle() , current_path_prefix , new_path_prefix );
	}

	inline void spMaterialTable::GetMaterialChannels( const spStringArray & channels ) const
	{
		this->_GetAPI()->fpMaterialTable_GetMaterialChannels( this->_GetHandle() , hIntf(channels) );
	}

	inline void spMaterialTable::GetMaterialChannelsWithTextureInputs( const spStringArray & channels ) const
	{
		this->_GetAPI()->fpMaterialTable_GetMaterialChannelsWithTextureInputs( this->_GetHandle() , hIntf(channels) );
	}

	/// Implementations of spMatrix4x4 methods
	inline spMatrix4x4::spMatrix4x4() : spObject( nullptr , nullptr ) {}
	inline spMatrix4x4::spMatrix4x4( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spMatrix4x4::spMatrix4x4( const spMatrix4x4 &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spMatrix4x4 & spMatrix4x4::operator= ( const spMatrix4x4 &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spMatrix4x4 spMatrix4x4::SafeCast( spObject other ) { spMatrix4x4 ret; if( other.NonNull() && other.IsA("IMatrix4x4") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spMatrix4x4* spMatrix4x4::operator->() const { return this; }
	inline spMatrix4x4::spMatrix4x4( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spMatrix4x4::DeepCopy( const spMatrix4x4 & mtxin ) const
	{
		this->_GetAPI()->fpMatrix4x4_DeepCopy( this->_GetHandle() , hIntf(mtxin) );
	}

	inline void spMatrix4x4::Zero(  ) const
	{
		this->_GetAPI()->fpMatrix4x4_Zero( this->_GetHandle() );
	}

	inline void spMatrix4x4::Identity(  ) const
	{
		this->_GetAPI()->fpMatrix4x4_Identity( this->_GetHandle() );
	}

	inline real spMatrix4x4::GetElement( unsigned int column , unsigned int row ) const
	{
		return this->_GetAPI()->fpMatrix4x4_GetElement( this->_GetHandle() , column , row );
	}

	inline void spMatrix4x4::SetElement( unsigned int column , unsigned int row , real value ) const
	{
		this->_GetAPI()->fpMatrix4x4_SetElement( this->_GetHandle() , column , row , value );
	}

	inline spRealData spMatrix4x4::GetElements(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpMatrix4x4_GetElements( this->_GetHandle() ));
	}

	inline void spMatrix4x4::SetToTranspose( const spMatrix4x4 & mtxin ) const
	{
		this->_GetAPI()->fpMatrix4x4_SetToTranspose( this->_GetHandle() , hIntf(mtxin) );
	}

	inline void spMatrix4x4::Transpose(  ) const
	{
		this->_GetAPI()->fpMatrix4x4_Transpose( this->_GetHandle() );
	}

	inline void spMatrix4x4::SetToInvert( const spMatrix4x4 & mtxin ) const
	{
		this->_GetAPI()->fpMatrix4x4_SetToInvert( this->_GetHandle() , hIntf(mtxin) );
	}

	inline void spMatrix4x4::Invert(  ) const
	{
		this->_GetAPI()->fpMatrix4x4_Invert( this->_GetHandle() );
	}

	inline real spMatrix4x4::Determinant3x3(  ) const
	{
		return this->_GetAPI()->fpMatrix4x4_Determinant3x3( this->_GetHandle() );
	}

	inline void spMatrix4x4::Point3ArrayMultiply( const spRealArray & vecarray ) const
	{
		this->_GetAPI()->fpMatrix4x4_Point3ArrayMultiply( this->_GetHandle() , hIntf(vecarray) );
	}

	inline void spMatrix4x4::Direction3ArrayMultiply( const spRealArray & vecarray ) const
	{
		this->_GetAPI()->fpMatrix4x4_Direction3ArrayMultiply( this->_GetHandle() , hIntf(vecarray) );
	}

	inline void spMatrix4x4::Vector4ArrayMultiply( const spRealArray & vecarray ) const
	{
		this->_GetAPI()->fpMatrix4x4_Vector4ArrayMultiply( this->_GetHandle() , hIntf(vecarray) );
	}

	inline void spMatrix4x4::SetToRotationTransform( real angle , real ax , real ay , real az ) const
	{
		this->_GetAPI()->fpMatrix4x4_SetToRotationTransform( this->_GetHandle() , angle , ax , ay , az );
	}

	inline void spMatrix4x4::SetToScalingTransform( real sx , real sy , real sz ) const
	{
		this->_GetAPI()->fpMatrix4x4_SetToScalingTransform( this->_GetHandle() , sx , sy , sz );
	}

	inline void spMatrix4x4::SetToTranslationTransform( real tx , real ty , real tz ) const
	{
		this->_GetAPI()->fpMatrix4x4_SetToTranslationTransform( this->_GetHandle() , tx , ty , tz );
	}

	/// Implementations of spTransform3 methods
	inline spTransform3::spTransform3() : spObject( nullptr , nullptr ) {}
	inline spTransform3::spTransform3( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spTransform3::spTransform3( const spTransform3 &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spTransform3 & spTransform3::operator= ( const spTransform3 &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spTransform3 spTransform3::SafeCast( spObject other ) { spTransform3 ret; if( other.NonNull() && other.IsA("ITransform3") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spTransform3* spTransform3::operator->() const { return this; }
	inline spTransform3::spTransform3( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spTransform3::Clear(  ) const
	{
		this->_GetAPI()->fpTransform3_Clear( this->_GetHandle() );
	}

	inline Simplygon::spMatrix4x4 spTransform3::GetMatrix(  ) const
	{
		spMatrix4x4 retobj = spMatrix4x4( this->_GetAPI() , this->_GetAPI()->fpTransform3_GetMatrix( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spRealArray spTransform3::GetStack(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpTransform3_GetStack( this->_GetHandle() ));
		return retobj;
	}

	inline void spTransform3::PostMultiply(  ) const
	{
		this->_GetAPI()->fpTransform3_PostMultiply( this->_GetHandle() );
	}

	inline void spTransform3::PreMultiply(  ) const
	{
		this->_GetAPI()->fpTransform3_PreMultiply( this->_GetHandle() );
	}

	inline bool spTransform3::IsPostMultiply(  ) const
	{
		return this->_GetAPI()->fpTransform3_IsPostMultiply( this->_GetHandle() );
	}

	inline bool spTransform3::IsPreMultiply(  ) const
	{
		return this->_GetAPI()->fpTransform3_IsPreMultiply( this->_GetHandle() );
	}

	inline void spTransform3::AddRotation( real angle , real rx , real ry , real rz ) const
	{
		this->_GetAPI()->fpTransform3_AddRotation( this->_GetHandle() , angle , rx , ry , rz );
	}

	inline void spTransform3::AddScaling( real sx , real sy , real sz ) const
	{
		this->_GetAPI()->fpTransform3_AddScaling( this->_GetHandle() , sx , sy , sz );
	}

	inline void spTransform3::AddTranslation( real tx , real ty , real tz ) const
	{
		this->_GetAPI()->fpTransform3_AddTranslation( this->_GetHandle() , tx , ty , tz );
	}

	inline void spTransform3::AddTransformation( const spMatrix4x4 & transform ) const
	{
		this->_GetAPI()->fpTransform3_AddTransformation( this->_GetHandle() , hIntf(transform) );
	}

	inline void spTransform3::Push(  ) const
	{
		this->_GetAPI()->fpTransform3_Push( this->_GetHandle() );
	}

	inline void spTransform3::Pop(  ) const
	{
		this->_GetAPI()->fpTransform3_Pop( this->_GetHandle() );
	}

	/// Implementations of spMappingImage methods
	inline spMappingImage::spMappingImage() : spObject( nullptr , nullptr ) {}
	inline spMappingImage::spMappingImage( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spMappingImage::spMappingImage( const spMappingImage &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spMappingImage & spMappingImage::operator= ( const spMappingImage &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spMappingImage spMappingImage::SafeCast( spObject other ) { spMappingImage ret; if( other.NonNull() && other.IsA("IMappingImage") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spMappingImage* spMappingImage::operator->() const { return this; }
	inline spMappingImage::spMappingImage( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::spMappingImage spMappingImage::NewQuartersizeCopy(  ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpMappingImage_NewQuartersizeCopy( this->_GetHandle() ));
		return retobj;
	}

	inline unsigned int spMappingImage::GetWidth(  ) const
	{
		return this->_GetAPI()->fpMappingImage_GetWidth( this->_GetHandle() );
	}

	inline unsigned int spMappingImage::GetHeight(  ) const
	{
		return this->_GetAPI()->fpMappingImage_GetHeight( this->_GetHandle() );
	}

	inline unsigned int spMappingImage::GetLayerCount(  ) const
	{
		return this->_GetAPI()->fpMappingImage_GetLayerCount( this->_GetHandle() );
	}

	inline unsigned int spMappingImage::GetMultisamplingWidth(  ) const
	{
		return this->_GetAPI()->fpMappingImage_GetMultisamplingWidth( this->_GetHandle() );
	}

	inline unsigned int spMappingImage::GetMultisamplingHeight(  ) const
	{
		return this->_GetAPI()->fpMappingImage_GetMultisamplingHeight( this->_GetHandle() );
	}

	inline Simplygon::spChunkedImageData spMappingImage::GetImageData(  ) const
	{
		spChunkedImageData retobj = spChunkedImageData( this->_GetAPI() , this->_GetAPI()->fpMappingImage_GetImageData( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImageMeshData spMappingImage::GetMappingMeshData(  ) const
	{
		spMappingImageMeshData retobj = spMappingImageMeshData( this->_GetAPI() , this->_GetAPI()->fpMappingImage_GetMappingMeshData( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spProcessingObject methods
	inline spProcessingObject::spProcessingObject() : spObject( nullptr , nullptr ) {}
	inline spProcessingObject::spProcessingObject( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spProcessingObject::spProcessingObject( const spProcessingObject &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spProcessingObject & spProcessingObject::operator= ( const spProcessingObject &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spProcessingObject spProcessingObject::SafeCast( spObject other ) { spProcessingObject ret; if( other.NonNull() && other.IsA("IProcessingObject") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spProcessingObject* spProcessingObject::operator->() const { return this; }
	inline spProcessingObject::spProcessingObject( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::EProcessStatus spProcessingObject::RunProcessing(  ) const
	{
		return this->_GetAPI()->fpProcessingObject_RunProcessing( this->_GetHandle() );
	}

	inline void spProcessingObject::Clear(  ) const
	{
		this->_GetAPI()->fpProcessingObject_Clear( this->_GetHandle() );
	}

	inline real spProcessingObject::GetPercentDone(  ) const
	{
		return this->_GetAPI()->fpProcessingObject_GetPercentDone( this->_GetHandle() );
	}

	inline spString spProcessingObject::ToJSON(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpProcessingObject_ToJSON( this->_GetHandle() ));
	}

	/// Implementations of spParameterizer methods
	inline spParameterizer::spParameterizer() : spObject( nullptr , nullptr ) {}
	inline spParameterizer::spParameterizer( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spParameterizer::spParameterizer( const spParameterizer &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spParameterizer & spParameterizer::operator= ( const spParameterizer &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spParameterizer spParameterizer::SafeCast( spObject other ) { spParameterizer ret; if( other.NonNull() && other.IsA("IParameterizer") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spParameterizer* spParameterizer::operator->() const { return this; }
	inline spParameterizer::spParameterizer( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline bool spParameterizer::Parameterize( const spGeometryData & geom , const spRealArray & arr ) const
	{
		return this->_GetAPI()->fpParameterizer_Parameterize( this->_GetHandle() , hIntf(geom) , hIntf(arr) );
	}

	inline void spParameterizer::SetMaxStretch( real value ) const
	{
		this->_GetAPI()->fpParameterizer_SetMaxStretch( this->_GetHandle() , value );
	}

	inline real spParameterizer::GetMaxStretch(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetMaxStretch( this->_GetHandle() );
	}

	inline void spParameterizer::SetLargeChartsImportance( real value ) const
	{
		this->_GetAPI()->fpParameterizer_SetLargeChartsImportance( this->_GetHandle() , value );
	}

	inline real spParameterizer::GetLargeChartsImportance(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetLargeChartsImportance( this->_GetHandle() );
	}

	inline void spParameterizer::SetInputMaterialCount( unsigned int value ) const
	{
		this->_GetAPI()->fpParameterizer_SetInputMaterialCount( this->_GetHandle() , value );
	}

	inline unsigned int spParameterizer::GetInputMaterialCount(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetInputMaterialCount( this->_GetHandle() );
	}

	inline void spParameterizer::SetOutputMaterialCount( unsigned int value ) const
	{
		this->_GetAPI()->fpParameterizer_SetOutputMaterialCount( this->_GetHandle() , value );
	}

	inline unsigned int spParameterizer::GetOutputMaterialCount(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetOutputMaterialCount( this->_GetHandle() );
	}

	inline void spParameterizer::SetInputOutputMaterialMapping( unsigned int InMaterialId , int OutMaterialId ) const
	{
		this->_GetAPI()->fpParameterizer_SetInputOutputMaterialMapping( this->_GetHandle() , InMaterialId , OutMaterialId );
	}

	inline int spParameterizer::GetInputOutputMaterialMapping( unsigned int InMaterialId ) const
	{
		return this->_GetAPI()->fpParameterizer_GetInputOutputMaterialMapping( this->_GetHandle() , InMaterialId );
	}

	inline void spParameterizer::SetTextureWidth( unsigned int value ) const
	{
		this->_GetAPI()->fpParameterizer_SetTextureWidth( this->_GetHandle() , value );
	}

	inline unsigned int spParameterizer::GetTextureWidth(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetTextureWidth( this->_GetHandle() );
	}

	inline void spParameterizer::SetTextureWidthForImageIndex( unsigned int id , unsigned int value ) const
	{
		this->_GetAPI()->fpParameterizer_SetTextureWidthForImageIndex( this->_GetHandle() , id , value );
	}

	inline unsigned int spParameterizer::GetTextureWidthForImageIndex( unsigned int id ) const
	{
		return this->_GetAPI()->fpParameterizer_GetTextureWidthForImageIndex( this->_GetHandle() , id );
	}

	inline void spParameterizer::SetTextureHeight( unsigned int value ) const
	{
		this->_GetAPI()->fpParameterizer_SetTextureHeight( this->_GetHandle() , value );
	}

	inline unsigned int spParameterizer::GetTextureHeight(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetTextureHeight( this->_GetHandle() );
	}

	inline void spParameterizer::SetTextureHeightForImageIndex( unsigned int id , unsigned int value ) const
	{
		this->_GetAPI()->fpParameterizer_SetTextureHeightForImageIndex( this->_GetHandle() , id , value );
	}

	inline unsigned int spParameterizer::GetTextureHeightForImageIndex( unsigned int id ) const
	{
		return this->_GetAPI()->fpParameterizer_GetTextureHeightForImageIndex( this->_GetHandle() , id );
	}

	inline void spParameterizer::SetGutterSpace( unsigned int value ) const
	{
		this->_GetAPI()->fpParameterizer_SetGutterSpace( this->_GetHandle() , value );
	}

	inline unsigned int spParameterizer::GetGutterSpace(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetGutterSpace( this->_GetHandle() );
	}

	inline void spParameterizer::SetGutterSpaceForImageIndex( unsigned int id , unsigned int value ) const
	{
		this->_GetAPI()->fpParameterizer_SetGutterSpaceForImageIndex( this->_GetHandle() , id , value );
	}

	inline unsigned int spParameterizer::GetGutterSpaceForImageIndex( unsigned int id ) const
	{
		return this->_GetAPI()->fpParameterizer_GetGutterSpaceForImageIndex( this->_GetHandle() , id );
	}

	inline void spParameterizer::SetFeatureFlagsMask( unsigned int value ) const
	{
		this->_GetAPI()->fpParameterizer_SetFeatureFlagsMask( this->_GetHandle() , value );
	}

	inline unsigned int spParameterizer::GetFeatureFlagsMask(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetFeatureFlagsMask( this->_GetHandle() );
	}

	inline void spParameterizer::SetUseAutomaticTextureSize( bool value ) const
	{
		this->_GetAPI()->fpParameterizer_SetUseAutomaticTextureSize( this->_GetHandle() , value );
	}

	inline bool spParameterizer::GetUseAutomaticTextureSize(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetUseAutomaticTextureSize( this->_GetHandle() );
	}

	inline void spParameterizer::SetAutomaticTextureSizeMultiplier( real value ) const
	{
		this->_GetAPI()->fpParameterizer_SetAutomaticTextureSizeMultiplier( this->_GetHandle() , value );
	}

	inline real spParameterizer::GetAutomaticTextureSizeMultiplier(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetAutomaticTextureSizeMultiplier( this->_GetHandle() );
	}

	inline void spParameterizer::SetForcePower2Texture( bool value ) const
	{
		this->_GetAPI()->fpParameterizer_SetForcePower2Texture( this->_GetHandle() , value );
	}

	inline bool spParameterizer::GetForcePower2Texture(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetForcePower2Texture( this->_GetHandle() );
	}

	inline void spParameterizer::SetUseVertexWeights( bool value ) const
	{
		this->_GetAPI()->fpParameterizer_SetUseVertexWeights( this->_GetHandle() , value );
	}

	inline bool spParameterizer::GetUseVertexWeights(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetUseVertexWeights( this->_GetHandle() );
	}

	inline void spParameterizer::SetUseVisibilityWeights( bool value ) const
	{
		this->_GetAPI()->fpParameterizer_SetUseVisibilityWeights( this->_GetHandle() , value );
	}

	inline bool spParameterizer::GetUseVisibilityWeights(  ) const
	{
		return this->_GetAPI()->fpParameterizer_GetUseVisibilityWeights( this->_GetHandle() );
	}

	/// Implementations of spObjectCollection methods
	inline spObjectCollection::spObjectCollection() : spObject( nullptr , nullptr ) {}
	inline spObjectCollection::spObjectCollection( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spObjectCollection::spObjectCollection( const spObjectCollection &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spObjectCollection & spObjectCollection::operator= ( const spObjectCollection &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spObjectCollection spObjectCollection::SafeCast( spObject other ) { spObjectCollection ret; if( other.NonNull() && other.IsA("IObjectCollection") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spObjectCollection* spObjectCollection::operator->() const { return this; }
	inline spObjectCollection::spObjectCollection( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline rhandle spObjectCollection::AddObject( const spObject & obj ) const
	{
		return this->_GetAPI()->fpObjectCollection_AddObject( this->_GetHandle() , hIntf(obj) );
	}

	inline rhandle spObjectCollection::AddObjectSorted( const spObject & obj , bool ascending ) const
	{
		return this->_GetAPI()->fpObjectCollection_AddObjectSorted( this->_GetHandle() , hIntf(obj) , ascending );
	}

	inline rhandle spObjectCollection::GetFirstItem(  ) const
	{
		return this->_GetAPI()->fpObjectCollection_GetFirstItem( this->_GetHandle() );
	}

	inline rhandle spObjectCollection::GetNextItem( rhandle objhandle ) const
	{
		return this->_GetAPI()->fpObjectCollection_GetNextItem( this->_GetHandle() , objhandle );
	}

	inline Simplygon::spObject spObjectCollection::GetItemsObject( rhandle objhandle ) const
	{
		spObject retobj = spObject( this->_GetAPI() , this->_GetAPI()->fpObjectCollection_GetItemsObject( this->_GetHandle() , objhandle ));
		return retobj;
	}

	inline rhandle spObjectCollection::RemoveItem( rhandle objhandle ) const
	{
		return this->_GetAPI()->fpObjectCollection_RemoveItem( this->_GetHandle() , objhandle );
	}

	inline void spObjectCollection::RemoveObject( const spObject & pobj ) const
	{
		this->_GetAPI()->fpObjectCollection_RemoveObject( this->_GetHandle() , hIntf(pobj) );
	}

	inline void spObjectCollection::RemoveAllItems(  ) const
	{
		this->_GetAPI()->fpObjectCollection_RemoveAllItems( this->_GetHandle() );
	}

	inline unsigned int spObjectCollection::GetItemCount(  ) const
	{
		return this->_GetAPI()->fpObjectCollection_GetItemCount( this->_GetHandle() );
	}

	inline rhandle spObjectCollection::GetItem( unsigned int index ) const
	{
		return this->_GetAPI()->fpObjectCollection_GetItem( this->_GetHandle() , index );
	}

	inline Simplygon::spObject spObjectCollection::GetItemAsObject( unsigned int index ) const
	{
		spObject retobj = spObject( this->_GetAPI() , this->_GetAPI()->fpObjectCollection_GetItemAsObject( this->_GetHandle() , index ));
		return retobj;
	}

	inline bool spObjectCollection::IsObjectInCollection( const spObject & pobj ) const
	{
		return this->_GetAPI()->fpObjectCollection_IsObjectInCollection( this->_GetHandle() , hIntf(pobj) );
	}

	inline bool spObjectCollection::IsItemInCollection( rhandle objhandle ) const
	{
		return this->_GetAPI()->fpObjectCollection_IsItemInCollection( this->_GetHandle() , objhandle );
	}

	inline Simplygon::spObject spObjectCollection::FindObject( const char * name ) const
	{
		spObject retobj = spObject( this->_GetAPI() , this->_GetAPI()->fpObjectCollection_FindObject( this->_GetHandle() , name ));
		return retobj;
	}

	/// Implementations of spGeometryDataCollection methods
	inline spGeometryDataCollection::spGeometryDataCollection() : spObjectCollection( nullptr , nullptr ) {}
	inline spGeometryDataCollection::spGeometryDataCollection( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObjectCollection( _sg , _intfptr ) {}
	inline spGeometryDataCollection::spGeometryDataCollection( const spGeometryDataCollection &p ) : spObjectCollection( p._GetAPI() , p._GetHandle() ) {}
	inline spGeometryDataCollection & spGeometryDataCollection::operator= ( const spGeometryDataCollection &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGeometryDataCollection spGeometryDataCollection::SafeCast( spObject other ) { spGeometryDataCollection ret; if( other.NonNull() && other.IsA("IGeometryDataCollection") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGeometryDataCollection* spGeometryDataCollection::operator->() const { return this; }
	inline spGeometryDataCollection::spGeometryDataCollection( const _NilStruct & ) : spObjectCollection( nullptr , nullptr ) {}

	inline rhandle spGeometryDataCollection::AddGeometryData( const spGeometryData & obj ) const
	{
		return this->_GetAPI()->fpGeometryDataCollection_AddGeometryData( this->_GetHandle() , hIntf(obj) );
	}

	inline Simplygon::spGeometryData spGeometryDataCollection::GetGeometryData( rhandle objhandle ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpGeometryDataCollection_GetGeometryData( this->_GetHandle() , objhandle ));
		return retobj;
	}

	inline void spGeometryDataCollection::RemoveGeometryData( const spGeometryData & pobj ) const
	{
		this->_GetAPI()->fpGeometryDataCollection_RemoveGeometryData( this->_GetHandle() , hIntf(pobj) );
	}

	inline Simplygon::spGeometryData spGeometryDataCollection::FindGeometryData( const char * name ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpGeometryDataCollection_FindGeometryData( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spGeometryData spGeometryDataCollection::GetNextItemAsGeometryData( rhandle *phandle ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpGeometryDataCollection_GetNextItemAsGeometryData( this->_GetHandle() , phandle ));
		return retobj;
	}

	inline bool spGeometryDataCollection::IsGeometryDataInCollection( const spGeometryData & pobj ) const
	{
		return this->_GetAPI()->fpGeometryDataCollection_IsGeometryDataInCollection( this->_GetHandle() , hIntf(pobj) );
	}

	/// Implementations of spGraphicsImporter methods
	inline spGraphicsImporter::spGraphicsImporter() : spObject( nullptr , nullptr ) {}
	inline spGraphicsImporter::spGraphicsImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spGraphicsImporter::spGraphicsImporter( const spGraphicsImporter &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spGraphicsImporter & spGraphicsImporter::operator= ( const spGraphicsImporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGraphicsImporter spGraphicsImporter::SafeCast( spObject other ) { spGraphicsImporter ret; if( other.NonNull() && other.IsA("IGraphicsImporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGraphicsImporter* spGraphicsImporter::operator->() const { return this; }
	inline spGraphicsImporter::spGraphicsImporter( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spGraphicsImporter::SetImportFilePath( const char * value ) const
	{
		this->_GetAPI()->fpGraphicsImporter_SetImportFilePath( this->_GetHandle() , value );
	}

	inline spString spGraphicsImporter::GetImportFilePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpGraphicsImporter_GetImportFilePath( this->_GetHandle() ));
	}

	inline bool spGraphicsImporter::RunImport(  ) const
	{
		return this->_GetAPI()->fpGraphicsImporter_RunImport( this->_GetHandle() );
	}

	inline void spGraphicsImporter::Clear(  ) const
	{
		this->_GetAPI()->fpGraphicsImporter_Clear( this->_GetHandle() );
	}

	inline Simplygon::spScene spGraphicsImporter::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpGraphicsImporter_GetScene( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spWavefrontImporter methods
	inline spWavefrontImporter::spWavefrontImporter() : spGraphicsImporter( nullptr , nullptr ) {}
	inline spWavefrontImporter::spWavefrontImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spGraphicsImporter( _sg , _intfptr ) {}
	inline spWavefrontImporter::spWavefrontImporter( const spWavefrontImporter &p ) : spGraphicsImporter( p._GetAPI() , p._GetHandle() ) {}
	inline spWavefrontImporter & spWavefrontImporter::operator= ( const spWavefrontImporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spWavefrontImporter spWavefrontImporter::SafeCast( spObject other ) { spWavefrontImporter ret; if( other.NonNull() && other.IsA("IWavefrontImporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spWavefrontImporter* spWavefrontImporter::operator->() const { return this; }
	inline spWavefrontImporter::spWavefrontImporter( const _NilStruct & ) : spGraphicsImporter( nullptr , nullptr ) {}

	inline void spWavefrontImporter::SetMaterialFilePath( const char * value ) const
	{
		this->_GetAPI()->fpWavefrontImporter_SetMaterialFilePath( this->_GetHandle() , value );
	}

	inline spString spWavefrontImporter::GetMaterialFilePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpWavefrontImporter_GetMaterialFilePath( this->_GetHandle() ));
	}

	inline void spWavefrontImporter::SetExtractGroups( bool value ) const
	{
		this->_GetAPI()->fpWavefrontImporter_SetExtractGroups( this->_GetHandle() , value );
	}

	inline bool spWavefrontImporter::GetExtractGroups(  ) const
	{
		return this->_GetAPI()->fpWavefrontImporter_GetExtractGroups( this->_GetHandle() );
	}

	inline void spWavefrontImporter::SetUseAlphaAsOpacity( bool value ) const
	{
		this->_GetAPI()->fpWavefrontImporter_SetUseAlphaAsOpacity( this->_GetHandle() , value );
	}

	inline bool spWavefrontImporter::GetUseAlphaAsOpacity(  ) const
	{
		return this->_GetAPI()->fpWavefrontImporter_GetUseAlphaAsOpacity( this->_GetHandle() );
	}

	inline void spWavefrontImporter::SetUseFallbackDiffuse( bool value ) const
	{
		this->_GetAPI()->fpWavefrontImporter_SetUseFallbackDiffuse( this->_GetHandle() , value );
	}

	inline bool spWavefrontImporter::GetUseFallbackDiffuse(  ) const
	{
		return this->_GetAPI()->fpWavefrontImporter_GetUseFallbackDiffuse( this->_GetHandle() );
	}

	/// Implementations of spGLTFImporter methods
	inline spGLTFImporter::spGLTFImporter() : spGraphicsImporter( nullptr , nullptr ) {}
	inline spGLTFImporter::spGLTFImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spGraphicsImporter( _sg , _intfptr ) {}
	inline spGLTFImporter::spGLTFImporter( const spGLTFImporter &p ) : spGraphicsImporter( p._GetAPI() , p._GetHandle() ) {}
	inline spGLTFImporter & spGLTFImporter::operator= ( const spGLTFImporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGLTFImporter spGLTFImporter::SafeCast( spObject other ) { spGLTFImporter ret; if( other.NonNull() && other.IsA("IGLTFImporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGLTFImporter* spGLTFImporter::operator->() const { return this; }
	inline spGLTFImporter::spGLTFImporter( const _NilStruct & ) : spGraphicsImporter( nullptr , nullptr ) {}

	/// Implementations of spFBXImporter methods
	inline spFBXImporter::spFBXImporter() : spGraphicsImporter( nullptr , nullptr ) {}
	inline spFBXImporter::spFBXImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spGraphicsImporter( _sg , _intfptr ) {}
	inline spFBXImporter::spFBXImporter( const spFBXImporter &p ) : spGraphicsImporter( p._GetAPI() , p._GetHandle() ) {}
	inline spFBXImporter & spFBXImporter::operator= ( const spFBXImporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spFBXImporter spFBXImporter::SafeCast( spObject other ) { spFBXImporter ret; if( other.NonNull() && other.IsA("IFBXImporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spFBXImporter* spFBXImporter::operator->() const { return this; }
	inline spFBXImporter::spFBXImporter( const _NilStruct & ) : spGraphicsImporter( nullptr , nullptr ) {}

	/// Implementations of spGraphicsExporter methods
	inline spGraphicsExporter::spGraphicsExporter() : spObject( nullptr , nullptr ) {}
	inline spGraphicsExporter::spGraphicsExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spGraphicsExporter::spGraphicsExporter( const spGraphicsExporter &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spGraphicsExporter & spGraphicsExporter::operator= ( const spGraphicsExporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGraphicsExporter spGraphicsExporter::SafeCast( spObject other ) { spGraphicsExporter ret; if( other.NonNull() && other.IsA("IGraphicsExporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGraphicsExporter* spGraphicsExporter::operator->() const { return this; }
	inline spGraphicsExporter::spGraphicsExporter( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spGraphicsExporter::SetExportFilePath( const char * value ) const
	{
		this->_GetAPI()->fpGraphicsExporter_SetExportFilePath( this->_GetHandle() , value );
	}

	inline spString spGraphicsExporter::GetExportFilePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpGraphicsExporter_GetExportFilePath( this->_GetHandle() ));
	}

	inline void spGraphicsExporter::SetScene( const spScene & scene ) const
	{
		this->_GetAPI()->fpGraphicsExporter_SetScene( this->_GetHandle() , hIntf(scene) );
	}

	inline void spGraphicsExporter::SetSelectionSet( int exportSelectionSetID ) const
	{
		this->_GetAPI()->fpGraphicsExporter_SetSelectionSet( this->_GetHandle() , exportSelectionSetID );
	}

	inline bool spGraphicsExporter::RunExport(  ) const
	{
		return this->_GetAPI()->fpGraphicsExporter_RunExport( this->_GetHandle() );
	}

	inline void spGraphicsExporter::SetPrimaryTexCoordName( const char * name ) const
	{
		this->_GetAPI()->fpGraphicsExporter_SetPrimaryTexCoordName( this->_GetHandle() , name );
	}

	inline spString spGraphicsExporter::GetPrimaryTexCoordName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpGraphicsExporter_GetPrimaryTexCoordName( this->_GetHandle() ));
	}

	inline void spGraphicsExporter::SetExportCascadedScenes( bool value ) const
	{
		this->_GetAPI()->fpGraphicsExporter_SetExportCascadedScenes( this->_GetHandle() , value );
	}

	inline bool spGraphicsExporter::GetExportCascadedScenes(  ) const
	{
		return this->_GetAPI()->fpGraphicsExporter_GetExportCascadedScenes( this->_GetHandle() );
	}

	/// Implementations of spWavefrontExporter methods
	inline spWavefrontExporter::spWavefrontExporter() : spGraphicsExporter( nullptr , nullptr ) {}
	inline spWavefrontExporter::spWavefrontExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spGraphicsExporter( _sg , _intfptr ) {}
	inline spWavefrontExporter::spWavefrontExporter( const spWavefrontExporter &p ) : spGraphicsExporter( p._GetAPI() , p._GetHandle() ) {}
	inline spWavefrontExporter & spWavefrontExporter::operator= ( const spWavefrontExporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spWavefrontExporter spWavefrontExporter::SafeCast( spObject other ) { spWavefrontExporter ret; if( other.NonNull() && other.IsA("IWavefrontExporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spWavefrontExporter* spWavefrontExporter::operator->() const { return this; }
	inline spWavefrontExporter::spWavefrontExporter( const _NilStruct & ) : spGraphicsExporter( nullptr , nullptr ) {}

	inline void spWavefrontExporter::SetMaterialFilePath( const char * value ) const
	{
		this->_GetAPI()->fpWavefrontExporter_SetMaterialFilePath( this->_GetHandle() , value );
	}

	inline spString spWavefrontExporter::GetMaterialFilePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpWavefrontExporter_GetMaterialFilePath( this->_GetHandle() ));
	}

	/// Implementations of spFBXExporter methods
	inline spFBXExporter::spFBXExporter() : spGraphicsExporter( nullptr , nullptr ) {}
	inline spFBXExporter::spFBXExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spGraphicsExporter( _sg , _intfptr ) {}
	inline spFBXExporter::spFBXExporter( const spFBXExporter &p ) : spGraphicsExporter( p._GetAPI() , p._GetHandle() ) {}
	inline spFBXExporter & spFBXExporter::operator= ( const spFBXExporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spFBXExporter spFBXExporter::SafeCast( spObject other ) { spFBXExporter ret; if( other.NonNull() && other.IsA("IFBXExporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spFBXExporter* spFBXExporter::operator->() const { return this; }
	inline spFBXExporter::spFBXExporter( const _NilStruct & ) : spGraphicsExporter( nullptr , nullptr ) {}

	inline void spFBXExporter::SetEmbedReferences( bool value ) const
	{
		this->_GetAPI()->fpFBXExporter_SetEmbedReferences( this->_GetHandle() , value );
	}

	inline bool spFBXExporter::GetEmbedReferences(  ) const
	{
		return this->_GetAPI()->fpFBXExporter_GetEmbedReferences( this->_GetHandle() );
	}

	/// Implementations of spGLTFExporter methods
	inline spGLTFExporter::spGLTFExporter() : spGraphicsExporter( nullptr , nullptr ) {}
	inline spGLTFExporter::spGLTFExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spGraphicsExporter( _sg , _intfptr ) {}
	inline spGLTFExporter::spGLTFExporter( const spGLTFExporter &p ) : spGraphicsExporter( p._GetAPI() , p._GetHandle() ) {}
	inline spGLTFExporter & spGLTFExporter::operator= ( const spGLTFExporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGLTFExporter spGLTFExporter::SafeCast( spObject other ) { spGLTFExporter ret; if( other.NonNull() && other.IsA("IGLTFExporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGLTFExporter* spGLTFExporter::operator->() const { return this; }
	inline spGLTFExporter::spGLTFExporter( const _NilStruct & ) : spGraphicsExporter( nullptr , nullptr ) {}

	inline void spGLTFExporter::SetEmbedReferences( bool value ) const
	{
		this->_GetAPI()->fpGLTFExporter_SetEmbedReferences( this->_GetHandle() , value );
	}

	inline bool spGLTFExporter::GetEmbedReferences(  ) const
	{
		return this->_GetAPI()->fpGLTFExporter_GetEmbedReferences( this->_GetHandle() );
	}

	/// Implementations of spBinaryImporter methods
	inline spBinaryImporter::spBinaryImporter() : spGraphicsImporter( nullptr , nullptr ) {}
	inline spBinaryImporter::spBinaryImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spGraphicsImporter( _sg , _intfptr ) {}
	inline spBinaryImporter::spBinaryImporter( const spBinaryImporter &p ) : spGraphicsImporter( p._GetAPI() , p._GetHandle() ) {}
	inline spBinaryImporter & spBinaryImporter::operator= ( const spBinaryImporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spBinaryImporter spBinaryImporter::SafeCast( spObject other ) { spBinaryImporter ret; if( other.NonNull() && other.IsA("IBinaryImporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spBinaryImporter* spBinaryImporter::operator->() const { return this; }
	inline spBinaryImporter::spBinaryImporter( const _NilStruct & ) : spGraphicsImporter( nullptr , nullptr ) {}

	/// Implementations of spBinaryExporter methods
	inline spBinaryExporter::spBinaryExporter() : spGraphicsExporter( nullptr , nullptr ) {}
	inline spBinaryExporter::spBinaryExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spGraphicsExporter( _sg , _intfptr ) {}
	inline spBinaryExporter::spBinaryExporter( const spBinaryExporter &p ) : spGraphicsExporter( p._GetAPI() , p._GetHandle() ) {}
	inline spBinaryExporter & spBinaryExporter::operator= ( const spBinaryExporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spBinaryExporter spBinaryExporter::SafeCast( spObject other ) { spBinaryExporter ret; if( other.NonNull() && other.IsA("IBinaryExporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spBinaryExporter* spBinaryExporter::operator->() const { return this; }
	inline spBinaryExporter::spBinaryExporter( const _NilStruct & ) : spGraphicsExporter( nullptr , nullptr ) {}

	/// Implementations of spGeometryValidator methods
	inline spGeometryValidator::spGeometryValidator() : spObject( nullptr , nullptr ) {}
	inline spGeometryValidator::spGeometryValidator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spGeometryValidator::spGeometryValidator( const spGeometryValidator &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spGeometryValidator & spGeometryValidator::operator= ( const spGeometryValidator &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGeometryValidator spGeometryValidator::SafeCast( spObject other ) { spGeometryValidator ret; if( other.NonNull() && other.IsA("IGeometryValidator") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGeometryValidator* spGeometryValidator::operator->() const { return this; }
	inline spGeometryValidator::spGeometryValidator( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline bool spGeometryValidator::ValidateGeometry( const spGeometryData & geom ) const
	{
		return this->_GetAPI()->fpGeometryValidator_ValidateGeometry( this->_GetHandle() , hIntf(geom) );
	}

	inline unsigned int spGeometryValidator::GetErrorValue(  ) const
	{
		return this->_GetAPI()->fpGeometryValidator_GetErrorValue( this->_GetHandle() );
	}

	inline spString spGeometryValidator::GetErrorString(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpGeometryValidator_GetErrorString( this->_GetHandle() ));
	}

	inline void spGeometryValidator::SetCheckDegenerateFaceIndices( bool value ) const
	{
		this->_GetAPI()->fpGeometryValidator_SetCheckDegenerateFaceIndices( this->_GetHandle() , value );
	}

	inline bool spGeometryValidator::GetCheckDegenerateFaceIndices(  ) const
	{
		return this->_GetAPI()->fpGeometryValidator_GetCheckDegenerateFaceIndices( this->_GetHandle() );
	}

	inline void spGeometryValidator::SetCheckZeroAreaFaces( bool value ) const
	{
		this->_GetAPI()->fpGeometryValidator_SetCheckZeroAreaFaces( this->_GetHandle() , value );
	}

	inline bool spGeometryValidator::GetCheckZeroAreaFaces(  ) const
	{
		return this->_GetAPI()->fpGeometryValidator_GetCheckZeroAreaFaces( this->_GetHandle() );
	}

	inline void spGeometryValidator::SetAllowedMaterialCount( unsigned int value ) const
	{
		this->_GetAPI()->fpGeometryValidator_SetAllowedMaterialCount( this->_GetHandle() , value );
	}

	inline void spGeometryValidator::SetAllowedBoneCount( unsigned int value ) const
	{
		this->_GetAPI()->fpGeometryValidator_SetAllowedBoneCount( this->_GetHandle() , value );
	}

	inline void spGeometryValidator::SetAllowedGroupCount( unsigned int value ) const
	{
		this->_GetAPI()->fpGeometryValidator_SetAllowedGroupCount( this->_GetHandle() , value );
	}

	/// Implementations of spSettingsObject methods
	inline spSettingsObject::spSettingsObject() : spObject( nullptr , nullptr ) {}
	inline spSettingsObject::spSettingsObject( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spSettingsObject::spSettingsObject( const spSettingsObject &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spSettingsObject & spSettingsObject::operator= ( const spSettingsObject &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSettingsObject spSettingsObject::SafeCast( spObject other ) { spSettingsObject ret; if( other.NonNull() && other.IsA("ISettingsObject") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSettingsObject* spSettingsObject::operator->() const { return this; }
	inline spSettingsObject::spSettingsObject( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline bool spSettingsObject::ValidateSettings(  ) const
	{
		return this->_GetAPI()->fpSettingsObject_ValidateSettings( this->_GetHandle() );
	}

	inline spString spSettingsObject::GetErrorString(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpSettingsObject_GetErrorString( this->_GetHandle() ));
	}

	inline bool spSettingsObject::SetBoolParameter( const char * name , bool value ) const
	{
		return this->_GetAPI()->fpSettingsObject_SetBoolParameter( this->_GetHandle() , name , value );
	}

	inline bool spSettingsObject::SetIntParameter( const char * name , int value ) const
	{
		return this->_GetAPI()->fpSettingsObject_SetIntParameter( this->_GetHandle() , name , value );
	}

	inline bool spSettingsObject::SetUIntParameter( const char * name , unsigned int value ) const
	{
		return this->_GetAPI()->fpSettingsObject_SetUIntParameter( this->_GetHandle() , name , value );
	}

	inline bool spSettingsObject::SetDoubleParameter( const char * name , double value ) const
	{
		return this->_GetAPI()->fpSettingsObject_SetDoubleParameter( this->_GetHandle() , name , value );
	}

	inline bool spSettingsObject::SetStringParameter( const char * name , const char * value ) const
	{
		return this->_GetAPI()->fpSettingsObject_SetStringParameter( this->_GetHandle() , name , value );
	}

	inline bool spSettingsObject::GetBoolParameter( const char * name ) const
	{
		return this->_GetAPI()->fpSettingsObject_GetBoolParameter( this->_GetHandle() , name );
	}

	inline int spSettingsObject::GetIntParameter( const char * name ) const
	{
		return this->_GetAPI()->fpSettingsObject_GetIntParameter( this->_GetHandle() , name );
	}

	inline unsigned int spSettingsObject::GetUIntParameter( const char * name ) const
	{
		return this->_GetAPI()->fpSettingsObject_GetUIntParameter( this->_GetHandle() , name );
	}

	inline double spSettingsObject::GetDoubleParameter( const char * name ) const
	{
		return this->_GetAPI()->fpSettingsObject_GetDoubleParameter( this->_GetHandle() , name );
	}

	inline spString spSettingsObject::GetStringParameter( const char * name ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpSettingsObject_GetStringParameter( this->_GetHandle() , name ));
	}

	inline spString spSettingsObject::ToJSON(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpSettingsObject_ToJSON( this->_GetHandle() ));
	}

	inline void spSettingsObject::SetValidateParameterNames( bool validate ) const
	{
		this->_GetAPI()->fpSettingsObject_SetValidateParameterNames( this->_GetHandle() , validate );
	}

	/// Implementations of spMaterialCaster methods
	inline spMaterialCaster::spMaterialCaster() : spProcessingObject( nullptr , nullptr ) {}
	inline spMaterialCaster::spMaterialCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spProcessingObject( _sg , _intfptr ) {}
	inline spMaterialCaster::spMaterialCaster( const spMaterialCaster &p ) : spProcessingObject( p._GetAPI() , p._GetHandle() ) {}
	inline spMaterialCaster & spMaterialCaster::operator= ( const spMaterialCaster &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spMaterialCaster spMaterialCaster::SafeCast( spObject other ) { spMaterialCaster ret; if( other.NonNull() && other.IsA("IMaterialCaster") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spMaterialCaster* spMaterialCaster::operator->() const { return this; }
	inline spMaterialCaster::spMaterialCaster( const _NilStruct & ) : spProcessingObject( nullptr , nullptr ) {}

	inline Simplygon::spMaterialCasterSettings spMaterialCaster::GetMaterialCasterSettings(  ) const
	{
		spMaterialCasterSettings retobj = spMaterialCasterSettings( this->_GetAPI() , this->_GetAPI()->fpMaterialCaster_GetMaterialCasterSettings( this->_GetHandle() ));
		return retobj;
	}

	inline void spMaterialCaster::SetSourceTextures( const spTextureTable & value ) const
	{
		this->_GetAPI()->fpMaterialCaster_SetSourceTextures( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spTextureTable spMaterialCaster::GetSourceTextures(  ) const
	{
		spTextureTable retobj = spTextureTable( this->_GetAPI() , this->_GetAPI()->fpMaterialCaster_GetSourceTextures( this->_GetHandle() ));
		return retobj;
	}

	inline void spMaterialCaster::SetSourceMaterials( const spMaterialTable & value ) const
	{
		this->_GetAPI()->fpMaterialCaster_SetSourceMaterials( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spMaterialTable spMaterialCaster::GetSourceMaterials(  ) const
	{
		spMaterialTable retobj = spMaterialTable( this->_GetAPI() , this->_GetAPI()->fpMaterialCaster_GetSourceMaterials( this->_GetHandle() ));
		return retobj;
	}

	inline void spMaterialCaster::SetDestMaterialId( rid value ) const
	{
		this->_GetAPI()->fpMaterialCaster_SetDestMaterialId( this->_GetHandle() , value );
	}

	inline rid spMaterialCaster::GetDestMaterialId(  ) const
	{
		return this->_GetAPI()->fpMaterialCaster_GetDestMaterialId( this->_GetHandle() );
	}

	inline void spMaterialCaster::SetMappingImage( const spMappingImage & value ) const
	{
		this->_GetAPI()->fpMaterialCaster_SetMappingImage( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spMappingImage spMaterialCaster::GetMappingImage(  ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpMaterialCaster_GetMappingImage( this->_GetHandle() ));
		return retobj;
	}

	inline void spMaterialCaster::SetOutputFilePath( const char * value ) const
	{
		this->_GetAPI()->fpMaterialCaster_SetOutputFilePath( this->_GetHandle() , value );
	}

	inline spString spMaterialCaster::GetOutputFilePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpMaterialCaster_GetOutputFilePath( this->_GetHandle() ));
	}

	inline void spMaterialCaster::SetOutputImage( const spImageData & value ) const
	{
		this->_GetAPI()->fpMaterialCaster_SetOutputImage( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spImageData spMaterialCaster::GetOutputImage(  ) const
	{
		spImageData retobj = spImageData( this->_GetAPI() , this->_GetAPI()->fpMaterialCaster_GetOutputImage( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMaterialCaster spMaterialCaster::NewCopy(  ) const
	{
		spMaterialCaster retobj = spMaterialCaster( this->_GetAPI() , this->_GetAPI()->fpMaterialCaster_NewCopy( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spMaterialCasterSettings methods
	inline spMaterialCasterSettings::spMaterialCasterSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spMaterialCasterSettings::spMaterialCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spMaterialCasterSettings::spMaterialCasterSettings( const spMaterialCasterSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spMaterialCasterSettings & spMaterialCasterSettings::operator= ( const spMaterialCasterSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spMaterialCasterSettings spMaterialCasterSettings::SafeCast( spObject other ) { spMaterialCasterSettings ret; if( other.NonNull() && other.IsA("IMaterialCasterSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spMaterialCasterSettings* spMaterialCasterSettings::operator->() const { return this; }
	inline spMaterialCasterSettings::spMaterialCasterSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spMaterialCasterSettings::SetMaterialChannel( const char * value ) const
	{
		this->_GetAPI()->fpMaterialCasterSettings_SetMaterialChannel( this->_GetHandle() , value );
	}

	inline spString spMaterialCasterSettings::GetMaterialChannel(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpMaterialCasterSettings_GetMaterialChannel( this->_GetHandle() ));
	}

	inline void spMaterialCasterSettings::SetOpacityChannel( const char * value ) const
	{
		this->_GetAPI()->fpMaterialCasterSettings_SetOpacityChannel( this->_GetHandle() , value );
	}

	inline spString spMaterialCasterSettings::GetOpacityChannel(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpMaterialCasterSettings_GetOpacityChannel( this->_GetHandle() ));
	}

	inline void spMaterialCasterSettings::SetOpacityChannelComponent( Simplygon::EColorComponent value ) const
	{
		this->_GetAPI()->fpMaterialCasterSettings_SetOpacityChannelComponent( this->_GetHandle() , (EColorComponent)value );
	}

	inline Simplygon::EColorComponent spMaterialCasterSettings::GetOpacityChannelComponent(  ) const
	{
		return this->_GetAPI()->fpMaterialCasterSettings_GetOpacityChannelComponent( this->_GetHandle() );
	}

	inline void spMaterialCasterSettings::SetDilation( unsigned int value ) const
	{
		this->_GetAPI()->fpMaterialCasterSettings_SetDilation( this->_GetHandle() , value );
	}

	inline unsigned int spMaterialCasterSettings::GetDilation(  ) const
	{
		return this->_GetAPI()->fpMaterialCasterSettings_GetDilation( this->_GetHandle() );
	}

	inline void spMaterialCasterSettings::SetOutputPixelFormat( Simplygon::EPixelFormat value ) const
	{
		this->_GetAPI()->fpMaterialCasterSettings_SetOutputPixelFormat( this->_GetHandle() , (EPixelFormat)value );
	}

	inline Simplygon::EPixelFormat spMaterialCasterSettings::GetOutputPixelFormat(  ) const
	{
		return this->_GetAPI()->fpMaterialCasterSettings_GetOutputPixelFormat( this->_GetHandle() );
	}

	inline void spMaterialCasterSettings::SetDitherType( Simplygon::EDitherPatterns value ) const
	{
		this->_GetAPI()->fpMaterialCasterSettings_SetDitherType( this->_GetHandle() , (EDitherPatterns)value );
	}

	inline Simplygon::EDitherPatterns spMaterialCasterSettings::GetDitherType(  ) const
	{
		return this->_GetAPI()->fpMaterialCasterSettings_GetDitherType( this->_GetHandle() );
	}

	inline void spMaterialCasterSettings::SetFillMode( Simplygon::EAtlasFillMode value ) const
	{
		this->_GetAPI()->fpMaterialCasterSettings_SetFillMode( this->_GetHandle() , (EAtlasFillMode)value );
	}

	inline Simplygon::EAtlasFillMode spMaterialCasterSettings::GetFillMode(  ) const
	{
		return this->_GetAPI()->fpMaterialCasterSettings_GetFillMode( this->_GetHandle() );
	}

	inline void spMaterialCasterSettings::SetUseMultisampling( bool value ) const
	{
		this->_GetAPI()->fpMaterialCasterSettings_SetUseMultisampling( this->_GetHandle() , value );
	}

	inline bool spMaterialCasterSettings::GetUseMultisampling(  ) const
	{
		return this->_GetAPI()->fpMaterialCasterSettings_GetUseMultisampling( this->_GetHandle() );
	}

	inline void spMaterialCasterSettings::SetOutputImageFileFormat( Simplygon::EImageOutputFormat value ) const
	{
		this->_GetAPI()->fpMaterialCasterSettings_SetOutputImageFileFormat( this->_GetHandle() , (EImageOutputFormat)value );
	}

	inline Simplygon::EImageOutputFormat spMaterialCasterSettings::GetOutputImageFileFormat(  ) const
	{
		return this->_GetAPI()->fpMaterialCasterSettings_GetOutputImageFileFormat( this->_GetHandle() );
	}

	inline void spMaterialCasterSettings::SetOutputDDSCompressionType( Simplygon::EDDSCompressionType value ) const
	{
		this->_GetAPI()->fpMaterialCasterSettings_SetOutputDDSCompressionType( this->_GetHandle() , (EDDSCompressionType)value );
	}

	inline Simplygon::EDDSCompressionType spMaterialCasterSettings::GetOutputDDSCompressionType(  ) const
	{
		return this->_GetAPI()->fpMaterialCasterSettings_GetOutputDDSCompressionType( this->_GetHandle() );
	}

	/// Implementations of spColorCaster methods
	inline spColorCaster::spColorCaster() : spMaterialCaster( nullptr , nullptr ) {}
	inline spColorCaster::spColorCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCaster( _sg , _intfptr ) {}
	inline spColorCaster::spColorCaster( const spColorCaster &p ) : spMaterialCaster( p._GetAPI() , p._GetHandle() ) {}
	inline spColorCaster & spColorCaster::operator= ( const spColorCaster &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spColorCaster spColorCaster::SafeCast( spObject other ) { spColorCaster ret; if( other.NonNull() && other.IsA("IColorCaster") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spColorCaster* spColorCaster::operator->() const { return this; }
	inline spColorCaster::spColorCaster( const _NilStruct & ) : spMaterialCaster( nullptr , nullptr ) {}

	inline bool spColorCaster::GetLastCastingWasSkipped(  ) const
	{
		return this->_GetAPI()->fpColorCaster_GetLastCastingWasSkipped( this->_GetHandle() );
	}

	inline Simplygon::spColorCasterSettings spColorCaster::GetColorCasterSettings(  ) const
	{
		spColorCasterSettings retobj = spColorCasterSettings( this->_GetAPI() , this->_GetAPI()->fpColorCaster_GetColorCasterSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spColorCasterSettings methods
	inline spColorCasterSettings::spColorCasterSettings() : spMaterialCasterSettings( nullptr , nullptr ) {}
	inline spColorCasterSettings::spColorCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCasterSettings( _sg , _intfptr ) {}
	inline spColorCasterSettings::spColorCasterSettings( const spColorCasterSettings &p ) : spMaterialCasterSettings( p._GetAPI() , p._GetHandle() ) {}
	inline spColorCasterSettings & spColorCasterSettings::operator= ( const spColorCasterSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spColorCasterSettings spColorCasterSettings::SafeCast( spObject other ) { spColorCasterSettings ret; if( other.NonNull() && other.IsA("IColorCasterSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spColorCasterSettings* spColorCasterSettings::operator->() const { return this; }
	inline spColorCasterSettings::spColorCasterSettings( const _NilStruct & ) : spMaterialCasterSettings( nullptr , nullptr ) {}

	inline void spColorCasterSettings::SetBakeOpacityInAlpha( bool value ) const
	{
		this->_GetAPI()->fpColorCasterSettings_SetBakeOpacityInAlpha( this->_GetHandle() , value );
	}

	inline bool spColorCasterSettings::GetBakeOpacityInAlpha(  ) const
	{
		return this->_GetAPI()->fpColorCasterSettings_GetBakeOpacityInAlpha( this->_GetHandle() );
	}

	inline void spColorCasterSettings::SetOutputOpacityType( Simplygon::EOpacityType value ) const
	{
		this->_GetAPI()->fpColorCasterSettings_SetOutputOpacityType( this->_GetHandle() , (EOpacityType)value );
	}

	inline Simplygon::EOpacityType spColorCasterSettings::GetOutputOpacityType(  ) const
	{
		return this->_GetAPI()->fpColorCasterSettings_GetOutputOpacityType( this->_GetHandle() );
	}

	inline void spColorCasterSettings::SetSkipCastingIfNoInputChannel( bool value ) const
	{
		this->_GetAPI()->fpColorCasterSettings_SetSkipCastingIfNoInputChannel( this->_GetHandle() , value );
	}

	inline bool spColorCasterSettings::GetSkipCastingIfNoInputChannel(  ) const
	{
		return this->_GetAPI()->fpColorCasterSettings_GetSkipCastingIfNoInputChannel( this->_GetHandle() );
	}

	inline void spColorCasterSettings::SetOutputSRGB( bool value ) const
	{
		this->_GetAPI()->fpColorCasterSettings_SetOutputSRGB( this->_GetHandle() , value );
	}

	inline bool spColorCasterSettings::GetOutputSRGB(  ) const
	{
		return this->_GetAPI()->fpColorCasterSettings_GetOutputSRGB( this->_GetHandle() );
	}

	/// Implementations of spOpacityCaster methods
	inline spOpacityCaster::spOpacityCaster() : spMaterialCaster( nullptr , nullptr ) {}
	inline spOpacityCaster::spOpacityCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCaster( _sg , _intfptr ) {}
	inline spOpacityCaster::spOpacityCaster( const spOpacityCaster &p ) : spMaterialCaster( p._GetAPI() , p._GetHandle() ) {}
	inline spOpacityCaster & spOpacityCaster::operator= ( const spOpacityCaster &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spOpacityCaster spOpacityCaster::SafeCast( spObject other ) { spOpacityCaster ret; if( other.NonNull() && other.IsA("IOpacityCaster") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spOpacityCaster* spOpacityCaster::operator->() const { return this; }
	inline spOpacityCaster::spOpacityCaster( const _NilStruct & ) : spMaterialCaster( nullptr , nullptr ) {}

	inline Simplygon::spOpacityCasterSettings spOpacityCaster::GetOpacityCasterSettings(  ) const
	{
		spOpacityCasterSettings retobj = spOpacityCasterSettings( this->_GetAPI() , this->_GetAPI()->fpOpacityCaster_GetOpacityCasterSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spOpacityCasterSettings methods
	inline spOpacityCasterSettings::spOpacityCasterSettings() : spMaterialCasterSettings( nullptr , nullptr ) {}
	inline spOpacityCasterSettings::spOpacityCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCasterSettings( _sg , _intfptr ) {}
	inline spOpacityCasterSettings::spOpacityCasterSettings( const spOpacityCasterSettings &p ) : spMaterialCasterSettings( p._GetAPI() , p._GetHandle() ) {}
	inline spOpacityCasterSettings & spOpacityCasterSettings::operator= ( const spOpacityCasterSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spOpacityCasterSettings spOpacityCasterSettings::SafeCast( spObject other ) { spOpacityCasterSettings ret; if( other.NonNull() && other.IsA("IOpacityCasterSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spOpacityCasterSettings* spOpacityCasterSettings::operator->() const { return this; }
	inline spOpacityCasterSettings::spOpacityCasterSettings( const _NilStruct & ) : spMaterialCasterSettings( nullptr , nullptr ) {}

	inline void spOpacityCasterSettings::SetOutputSRGB( bool value ) const
	{
		this->_GetAPI()->fpOpacityCasterSettings_SetOutputSRGB( this->_GetHandle() , value );
	}

	inline bool spOpacityCasterSettings::GetOutputSRGB(  ) const
	{
		return this->_GetAPI()->fpOpacityCasterSettings_GetOutputSRGB( this->_GetHandle() );
	}

	inline void spOpacityCasterSettings::SetOutputOpacityType( Simplygon::EOpacityType value ) const
	{
		this->_GetAPI()->fpOpacityCasterSettings_SetOutputOpacityType( this->_GetHandle() , (EOpacityType)value );
	}

	inline Simplygon::EOpacityType spOpacityCasterSettings::GetOutputOpacityType(  ) const
	{
		return this->_GetAPI()->fpOpacityCasterSettings_GetOutputOpacityType( this->_GetHandle() );
	}

	/// Implementations of spNormalCaster methods
	inline spNormalCaster::spNormalCaster() : spMaterialCaster( nullptr , nullptr ) {}
	inline spNormalCaster::spNormalCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCaster( _sg , _intfptr ) {}
	inline spNormalCaster::spNormalCaster( const spNormalCaster &p ) : spMaterialCaster( p._GetAPI() , p._GetHandle() ) {}
	inline spNormalCaster & spNormalCaster::operator= ( const spNormalCaster &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spNormalCaster spNormalCaster::SafeCast( spObject other ) { spNormalCaster ret; if( other.NonNull() && other.IsA("INormalCaster") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spNormalCaster* spNormalCaster::operator->() const { return this; }
	inline spNormalCaster::spNormalCaster( const _NilStruct & ) : spMaterialCaster( nullptr , nullptr ) {}

	inline Simplygon::spNormalCasterSettings spNormalCaster::GetNormalCasterSettings(  ) const
	{
		spNormalCasterSettings retobj = spNormalCasterSettings( this->_GetAPI() , this->_GetAPI()->fpNormalCaster_GetNormalCasterSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spNormalCasterSettings methods
	inline spNormalCasterSettings::spNormalCasterSettings() : spMaterialCasterSettings( nullptr , nullptr ) {}
	inline spNormalCasterSettings::spNormalCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCasterSettings( _sg , _intfptr ) {}
	inline spNormalCasterSettings::spNormalCasterSettings( const spNormalCasterSettings &p ) : spMaterialCasterSettings( p._GetAPI() , p._GetHandle() ) {}
	inline spNormalCasterSettings & spNormalCasterSettings::operator= ( const spNormalCasterSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spNormalCasterSettings spNormalCasterSettings::SafeCast( spObject other ) { spNormalCasterSettings ret; if( other.NonNull() && other.IsA("INormalCasterSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spNormalCasterSettings* spNormalCasterSettings::operator->() const { return this; }
	inline spNormalCasterSettings::spNormalCasterSettings( const _NilStruct & ) : spMaterialCasterSettings( nullptr , nullptr ) {}

	inline void spNormalCasterSettings::SetFlipBackfacingNormals( bool value ) const
	{
		this->_GetAPI()->fpNormalCasterSettings_SetFlipBackfacingNormals( this->_GetHandle() , value );
	}

	inline bool spNormalCasterSettings::GetFlipBackfacingNormals(  ) const
	{
		return this->_GetAPI()->fpNormalCasterSettings_GetFlipBackfacingNormals( this->_GetHandle() );
	}

	inline void spNormalCasterSettings::SetGenerateTangentSpaceNormals( bool value ) const
	{
		this->_GetAPI()->fpNormalCasterSettings_SetGenerateTangentSpaceNormals( this->_GetHandle() , value );
	}

	inline bool spNormalCasterSettings::GetGenerateTangentSpaceNormals(  ) const
	{
		return this->_GetAPI()->fpNormalCasterSettings_GetGenerateTangentSpaceNormals( this->_GetHandle() );
	}

	inline void spNormalCasterSettings::SetFlipGreen( bool value ) const
	{
		this->_GetAPI()->fpNormalCasterSettings_SetFlipGreen( this->_GetHandle() , value );
	}

	inline bool spNormalCasterSettings::GetFlipGreen(  ) const
	{
		return this->_GetAPI()->fpNormalCasterSettings_GetFlipGreen( this->_GetHandle() );
	}

	inline void spNormalCasterSettings::SetCalculateBitangentPerFragment( bool value ) const
	{
		this->_GetAPI()->fpNormalCasterSettings_SetCalculateBitangentPerFragment( this->_GetHandle() , value );
	}

	inline bool spNormalCasterSettings::GetCalculateBitangentPerFragment(  ) const
	{
		return this->_GetAPI()->fpNormalCasterSettings_GetCalculateBitangentPerFragment( this->_GetHandle() );
	}

	inline void spNormalCasterSettings::SetNormalizeInterpolatedTangentSpace( bool value ) const
	{
		this->_GetAPI()->fpNormalCasterSettings_SetNormalizeInterpolatedTangentSpace( this->_GetHandle() , value );
	}

	inline bool spNormalCasterSettings::GetNormalizeInterpolatedTangentSpace(  ) const
	{
		return this->_GetAPI()->fpNormalCasterSettings_GetNormalizeInterpolatedTangentSpace( this->_GetHandle() );
	}

	/// Implementations of spNormalRepairer methods
	inline spNormalRepairer::spNormalRepairer() : spProcessingObject( nullptr , nullptr ) {}
	inline spNormalRepairer::spNormalRepairer( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spProcessingObject( _sg , _intfptr ) {}
	inline spNormalRepairer::spNormalRepairer( const spNormalRepairer &p ) : spProcessingObject( p._GetAPI() , p._GetHandle() ) {}
	inline spNormalRepairer & spNormalRepairer::operator= ( const spNormalRepairer &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spNormalRepairer spNormalRepairer::SafeCast( spObject other ) { spNormalRepairer ret; if( other.NonNull() && other.IsA("INormalRepairer") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spNormalRepairer* spNormalRepairer::operator->() const { return this; }
	inline spNormalRepairer::spNormalRepairer( const _NilStruct & ) : spProcessingObject( nullptr , nullptr ) {}

	inline void spNormalRepairer::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spNormalRepairer::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpNormalRepairer_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline void spNormalRepairer::SetProcessSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetProcessSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spNormalRepairer::GetProcessSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpNormalRepairer_GetProcessSelectionSetID( this->_GetHandle() );
	}

	inline void spNormalRepairer::SetProcessSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetProcessSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spNormalRepairer::GetProcessSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpNormalRepairer_GetProcessSelectionSetName( this->_GetHandle() ));
	}

	inline void spNormalRepairer::SetRecalculateNormals( bool value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetRecalculateNormals( this->_GetHandle() , value );
	}

	inline bool spNormalRepairer::GetRecalculateNormals(  ) const
	{
		return this->_GetAPI()->fpNormalRepairer_GetRecalculateNormals( this->_GetHandle() );
	}

	inline void spNormalRepairer::SetHardEdgeAngle( real value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetHardEdgeAngle( this->_GetHandle() , value );
	}

	inline real spNormalRepairer::GetHardEdgeAngle(  ) const
	{
		return this->_GetAPI()->fpNormalRepairer_GetHardEdgeAngle( this->_GetHandle() );
	}

	inline void spNormalRepairer::SetScaleByArea( bool value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetScaleByArea( this->_GetHandle() , value );
	}

	inline bool spNormalRepairer::GetScaleByArea(  ) const
	{
		return this->_GetAPI()->fpNormalRepairer_GetScaleByArea( this->_GetHandle() );
	}

	inline void spNormalRepairer::SetScaleByAngle( bool value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetScaleByAngle( this->_GetHandle() , value );
	}

	inline bool spNormalRepairer::GetScaleByAngle(  ) const
	{
		return this->_GetAPI()->fpNormalRepairer_GetScaleByAngle( this->_GetHandle() );
	}

	inline void spNormalRepairer::SetRepairOnlyInvalidNormals( bool value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetRepairOnlyInvalidNormals( this->_GetHandle() , value );
	}

	inline bool spNormalRepairer::GetRepairOnlyInvalidNormals(  ) const
	{
		return this->_GetAPI()->fpNormalRepairer_GetRepairOnlyInvalidNormals( this->_GetHandle() );
	}

	inline void spNormalRepairer::SetSnapNormalsToFlatSurfaces( bool value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetSnapNormalsToFlatSurfaces( this->_GetHandle() , value );
	}

	inline bool spNormalRepairer::GetSnapNormalsToFlatSurfaces(  ) const
	{
		return this->_GetAPI()->fpNormalRepairer_GetSnapNormalsToFlatSurfaces( this->_GetHandle() );
	}

	inline void spNormalRepairer::SetFlipFacesAndNormals( Simplygon::EFlipFacesAndNormals value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetFlipFacesAndNormals( this->_GetHandle() , (EFlipFacesAndNormals)value );
	}

	inline Simplygon::EFlipFacesAndNormals spNormalRepairer::GetFlipFacesAndNormals(  ) const
	{
		return this->_GetAPI()->fpNormalRepairer_GetFlipFacesAndNormals( this->_GetHandle() );
	}

	inline void spNormalRepairer::SetGeometry( const spGeometryData & value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetGeometry( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spGeometryData spNormalRepairer::GetGeometry(  ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpNormalRepairer_GetGeometry( this->_GetHandle() ));
		return retobj;
	}

	inline void spNormalRepairer::SetAutoCorrectionAllowsDoubleSided( bool value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetAutoCorrectionAllowsDoubleSided( this->_GetHandle() , value );
	}

	inline void spNormalRepairer::SetAutoCorrectionRatioThreshold( real value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetAutoCorrectionRatioThreshold( this->_GetHandle() , value );
	}

	inline void spNormalRepairer::SetAutoCorrectionSingleSidedThreshold( real value ) const
	{
		this->_GetAPI()->fpNormalRepairer_SetAutoCorrectionSingleSidedThreshold( this->_GetHandle() , value );
	}

	/// Implementations of spDisplacementCaster methods
	inline spDisplacementCaster::spDisplacementCaster() : spMaterialCaster( nullptr , nullptr ) {}
	inline spDisplacementCaster::spDisplacementCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCaster( _sg , _intfptr ) {}
	inline spDisplacementCaster::spDisplacementCaster( const spDisplacementCaster &p ) : spMaterialCaster( p._GetAPI() , p._GetHandle() ) {}
	inline spDisplacementCaster & spDisplacementCaster::operator= ( const spDisplacementCaster &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spDisplacementCaster spDisplacementCaster::SafeCast( spObject other ) { spDisplacementCaster ret; if( other.NonNull() && other.IsA("IDisplacementCaster") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spDisplacementCaster* spDisplacementCaster::operator->() const { return this; }
	inline spDisplacementCaster::spDisplacementCaster( const _NilStruct & ) : spMaterialCaster( nullptr , nullptr ) {}

	inline Simplygon::spDisplacementCasterSettings spDisplacementCaster::GetDisplacementCasterSettings(  ) const
	{
		spDisplacementCasterSettings retobj = spDisplacementCasterSettings( this->_GetAPI() , this->_GetAPI()->fpDisplacementCaster_GetDisplacementCasterSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spDisplacementCasterSettings methods
	inline spDisplacementCasterSettings::spDisplacementCasterSettings() : spMaterialCasterSettings( nullptr , nullptr ) {}
	inline spDisplacementCasterSettings::spDisplacementCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCasterSettings( _sg , _intfptr ) {}
	inline spDisplacementCasterSettings::spDisplacementCasterSettings( const spDisplacementCasterSettings &p ) : spMaterialCasterSettings( p._GetAPI() , p._GetHandle() ) {}
	inline spDisplacementCasterSettings & spDisplacementCasterSettings::operator= ( const spDisplacementCasterSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spDisplacementCasterSettings spDisplacementCasterSettings::SafeCast( spObject other ) { spDisplacementCasterSettings ret; if( other.NonNull() && other.IsA("IDisplacementCasterSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spDisplacementCasterSettings* spDisplacementCasterSettings::operator->() const { return this; }
	inline spDisplacementCasterSettings::spDisplacementCasterSettings( const _NilStruct & ) : spMaterialCasterSettings( nullptr , nullptr ) {}

	inline void spDisplacementCasterSettings::SetDistanceScaling( real value ) const
	{
		this->_GetAPI()->fpDisplacementCasterSettings_SetDistanceScaling( this->_GetHandle() , value );
	}

	inline real spDisplacementCasterSettings::GetDistanceScaling(  ) const
	{
		return this->_GetAPI()->fpDisplacementCasterSettings_GetDistanceScaling( this->_GetHandle() );
	}

	inline void spDisplacementCasterSettings::SetGenerateScalarDisplacement( bool value ) const
	{
		this->_GetAPI()->fpDisplacementCasterSettings_SetGenerateScalarDisplacement( this->_GetHandle() , value );
	}

	inline bool spDisplacementCasterSettings::GetGenerateScalarDisplacement(  ) const
	{
		return this->_GetAPI()->fpDisplacementCasterSettings_GetGenerateScalarDisplacement( this->_GetHandle() );
	}

	inline void spDisplacementCasterSettings::SetGenerateTangentSpaceDisplacement( bool value ) const
	{
		this->_GetAPI()->fpDisplacementCasterSettings_SetGenerateTangentSpaceDisplacement( this->_GetHandle() , value );
	}

	inline bool spDisplacementCasterSettings::GetGenerateTangentSpaceDisplacement(  ) const
	{
		return this->_GetAPI()->fpDisplacementCasterSettings_GetGenerateTangentSpaceDisplacement( this->_GetHandle() );
	}

	inline void spDisplacementCasterSettings::SetNormalMapTexCoordLevel( rid value ) const
	{
		this->_GetAPI()->fpDisplacementCasterSettings_SetNormalMapTexCoordLevel( this->_GetHandle() , value );
	}

	inline rid spDisplacementCasterSettings::GetNormalMapTexCoordLevel(  ) const
	{
		return this->_GetAPI()->fpDisplacementCasterSettings_GetNormalMapTexCoordLevel( this->_GetHandle() );
	}

	/// Implementations of spTangentCalculator methods
	inline spTangentCalculator::spTangentCalculator() : spObject( nullptr , nullptr ) {}
	inline spTangentCalculator::spTangentCalculator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spTangentCalculator::spTangentCalculator( const spTangentCalculator &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spTangentCalculator & spTangentCalculator::operator= ( const spTangentCalculator &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spTangentCalculator spTangentCalculator::SafeCast( spObject other ) { spTangentCalculator ret; if( other.NonNull() && other.IsA("ITangentCalculator") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spTangentCalculator* spTangentCalculator::operator->() const { return this; }
	inline spTangentCalculator::spTangentCalculator( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spTangentCalculator::CalculateTangents( const spGeometryData & geom ) const
	{
		this->_GetAPI()->fpTangentCalculator_CalculateTangents( this->_GetHandle() , hIntf(geom) );
	}

	inline void spTangentCalculator::CalculateTangentsForNodeHierarchy( const spSceneNode & node ) const
	{
		this->_GetAPI()->fpTangentCalculator_CalculateTangentsForNodeHierarchy( this->_GetHandle() , hIntf(node) );
	}

	inline void spTangentCalculator::SetTexCoordsSetId( rid value ) const
	{
		this->_GetAPI()->fpTangentCalculator_SetTexCoordsSetId( this->_GetHandle() , value );
	}

	inline rid spTangentCalculator::GetTexCoordsSetId(  ) const
	{
		return this->_GetAPI()->fpTangentCalculator_GetTexCoordsSetId( this->_GetHandle() );
	}

	inline void spTangentCalculator::SetTangentCalculatorType( Simplygon::ETangentSpaceMethod type ) const
	{
		this->_GetAPI()->fpTangentCalculator_SetTangentCalculatorType( this->_GetHandle() , (ETangentSpaceMethod)type );
	}

	inline Simplygon::ETangentSpaceMethod spTangentCalculator::GetTangentCalculatorType(  ) const
	{
		return this->_GetAPI()->fpTangentCalculator_GetTangentCalculatorType( this->_GetHandle() );
	}

	inline void spTangentCalculator::SetInvertV( bool value ) const
	{
		this->_GetAPI()->fpTangentCalculator_SetInvertV( this->_GetHandle() , value );
	}

	inline bool spTangentCalculator::GetInvertV(  ) const
	{
		return this->_GetAPI()->fpTangentCalculator_GetInvertV( this->_GetHandle() );
	}

	/// Implementations of spRepairSettings methods
	inline spRepairSettings::spRepairSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spRepairSettings::spRepairSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spRepairSettings::spRepairSettings( const spRepairSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spRepairSettings & spRepairSettings::operator= ( const spRepairSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spRepairSettings spRepairSettings::SafeCast( spObject other ) { spRepairSettings ret; if( other.NonNull() && other.IsA("IRepairSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spRepairSettings* spRepairSettings::operator->() const { return this; }
	inline spRepairSettings::spRepairSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spRepairSettings::SetTJuncDist( real value ) const
	{
		this->_GetAPI()->fpRepairSettings_SetTJuncDist( this->_GetHandle() , value );
	}

	inline real spRepairSettings::GetTJuncDist(  ) const
	{
		return this->_GetAPI()->fpRepairSettings_GetTJuncDist( this->_GetHandle() );
	}

	inline void spRepairSettings::SetUseTJunctionRemover( bool value ) const
	{
		this->_GetAPI()->fpRepairSettings_SetUseTJunctionRemover( this->_GetHandle() , value );
	}

	inline bool spRepairSettings::GetUseTJunctionRemover(  ) const
	{
		return this->_GetAPI()->fpRepairSettings_GetUseTJunctionRemover( this->_GetHandle() );
	}

	inline void spRepairSettings::SetWeldDist( real value ) const
	{
		this->_GetAPI()->fpRepairSettings_SetWeldDist( this->_GetHandle() , value );
	}

	inline real spRepairSettings::GetWeldDist(  ) const
	{
		return this->_GetAPI()->fpRepairSettings_GetWeldDist( this->_GetHandle() );
	}

	inline void spRepairSettings::SetWeldOnlyBorderVertices( bool value ) const
	{
		this->_GetAPI()->fpRepairSettings_SetWeldOnlyBorderVertices( this->_GetHandle() , value );
	}

	inline bool spRepairSettings::GetWeldOnlyBorderVertices(  ) const
	{
		return this->_GetAPI()->fpRepairSettings_GetWeldOnlyBorderVertices( this->_GetHandle() );
	}

	inline void spRepairSettings::SetWeldOnlyWithinMaterial( bool value ) const
	{
		this->_GetAPI()->fpRepairSettings_SetWeldOnlyWithinMaterial( this->_GetHandle() , value );
	}

	inline bool spRepairSettings::GetWeldOnlyWithinMaterial(  ) const
	{
		return this->_GetAPI()->fpRepairSettings_GetWeldOnlyWithinMaterial( this->_GetHandle() );
	}

	inline void spRepairSettings::SetWeldOnlyWithinSceneNode( bool value ) const
	{
		this->_GetAPI()->fpRepairSettings_SetWeldOnlyWithinSceneNode( this->_GetHandle() , value );
	}

	inline bool spRepairSettings::GetWeldOnlyWithinSceneNode(  ) const
	{
		return this->_GetAPI()->fpRepairSettings_GetWeldOnlyWithinSceneNode( this->_GetHandle() );
	}

	inline void spRepairSettings::SetWeldOnlyBetweenSceneNodes( bool value ) const
	{
		this->_GetAPI()->fpRepairSettings_SetWeldOnlyBetweenSceneNodes( this->_GetHandle() , value );
	}

	inline bool spRepairSettings::GetWeldOnlyBetweenSceneNodes(  ) const
	{
		return this->_GetAPI()->fpRepairSettings_GetWeldOnlyBetweenSceneNodes( this->_GetHandle() );
	}

	inline void spRepairSettings::SetUseWelding( bool value ) const
	{
		this->_GetAPI()->fpRepairSettings_SetUseWelding( this->_GetHandle() , value );
	}

	inline bool spRepairSettings::GetUseWelding(  ) const
	{
		return this->_GetAPI()->fpRepairSettings_GetUseWelding( this->_GetHandle() );
	}

	inline void spRepairSettings::SetProgressivePasses( unsigned int value ) const
	{
		this->_GetAPI()->fpRepairSettings_SetProgressivePasses( this->_GetHandle() , value );
	}

	inline unsigned int spRepairSettings::GetProgressivePasses(  ) const
	{
		return this->_GetAPI()->fpRepairSettings_GetProgressivePasses( this->_GetHandle() );
	}

	/// Implementations of spBoneSettings methods
	inline spBoneSettings::spBoneSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spBoneSettings::spBoneSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spBoneSettings::spBoneSettings( const spBoneSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spBoneSettings & spBoneSettings::operator= ( const spBoneSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spBoneSettings spBoneSettings::SafeCast( spObject other ) { spBoneSettings ret; if( other.NonNull() && other.IsA("IBoneSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spBoneSettings* spBoneSettings::operator->() const { return this; }
	inline spBoneSettings::spBoneSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spBoneSettings::SetBoneReductionTargets( Simplygon::EStopCondition stopCondition , bool useBoneRatio , bool useBoneCount , bool useMaxDeviation , bool useOnScreenSize ) const
	{
		this->_GetAPI()->fpBoneSettings_SetBoneReductionTargets( this->_GetHandle() , (EStopCondition)stopCondition , useBoneRatio , useBoneCount , useMaxDeviation , useOnScreenSize );
	}

	inline void spBoneSettings::SetBoneReductionTargetBoneRatioEnabled( bool value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetBoneReductionTargetBoneRatioEnabled( this->_GetHandle() , value );
	}

	inline bool spBoneSettings::GetBoneReductionTargetBoneRatioEnabled(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetBoneReductionTargetBoneRatioEnabled( this->_GetHandle() );
	}

	inline void spBoneSettings::SetBoneReductionTargetBoneCountEnabled( bool value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetBoneReductionTargetBoneCountEnabled( this->_GetHandle() , value );
	}

	inline bool spBoneSettings::GetBoneReductionTargetBoneCountEnabled(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetBoneReductionTargetBoneCountEnabled( this->_GetHandle() );
	}

	inline void spBoneSettings::SetBoneReductionTargetMaxDeviationEnabled( bool value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetBoneReductionTargetMaxDeviationEnabled( this->_GetHandle() , value );
	}

	inline bool spBoneSettings::GetBoneReductionTargetMaxDeviationEnabled(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetBoneReductionTargetMaxDeviationEnabled( this->_GetHandle() );
	}

	inline void spBoneSettings::SetBoneReductionTargetOnScreenSizeEnabled( bool value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetBoneReductionTargetOnScreenSizeEnabled( this->_GetHandle() , value );
	}

	inline bool spBoneSettings::GetBoneReductionTargetOnScreenSizeEnabled(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetBoneReductionTargetOnScreenSizeEnabled( this->_GetHandle() );
	}

	inline void spBoneSettings::SetBoneReductionTargetStopCondition( Simplygon::EStopCondition value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetBoneReductionTargetStopCondition( this->_GetHandle() , (EStopCondition)value );
	}

	inline Simplygon::EStopCondition spBoneSettings::GetBoneReductionTargetStopCondition(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetBoneReductionTargetStopCondition( this->_GetHandle() );
	}

	inline void spBoneSettings::SetBoneReductionTargetBoneRatio( real value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetBoneReductionTargetBoneRatio( this->_GetHandle() , value );
	}

	inline real spBoneSettings::GetBoneReductionTargetBoneRatio(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetBoneReductionTargetBoneRatio( this->_GetHandle() );
	}

	inline void spBoneSettings::SetBoneReductionTargetBoneCount( unsigned int value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetBoneReductionTargetBoneCount( this->_GetHandle() , value );
	}

	inline unsigned int spBoneSettings::GetBoneReductionTargetBoneCount(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetBoneReductionTargetBoneCount( this->_GetHandle() );
	}

	inline void spBoneSettings::SetBoneReductionTargetMaxDeviation( real value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetBoneReductionTargetMaxDeviation( this->_GetHandle() , value );
	}

	inline real spBoneSettings::GetBoneReductionTargetMaxDeviation(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetBoneReductionTargetMaxDeviation( this->_GetHandle() );
	}

	inline void spBoneSettings::SetBoneReductionTargetOnScreenSize( unsigned int value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetBoneReductionTargetOnScreenSize( this->_GetHandle() , value );
	}

	inline unsigned int spBoneSettings::GetBoneReductionTargetOnScreenSize(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetBoneReductionTargetOnScreenSize( this->_GetHandle() );
	}

	inline void spBoneSettings::SetMaxBonePerVertex( unsigned int value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetMaxBonePerVertex( this->_GetHandle() , value );
	}

	inline unsigned int spBoneSettings::GetMaxBonePerVertex(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetMaxBonePerVertex( this->_GetHandle() );
	}

	inline void spBoneSettings::SetRemoveUnusedBones( bool value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetRemoveUnusedBones( this->_GetHandle() , value );
	}

	inline bool spBoneSettings::GetRemoveUnusedBones(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetRemoveUnusedBones( this->_GetHandle() );
	}

	inline void spBoneSettings::SetLimitBonesPerVertex( bool value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetLimitBonesPerVertex( this->_GetHandle() , value );
	}

	inline bool spBoneSettings::GetLimitBonesPerVertex(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetLimitBonesPerVertex( this->_GetHandle() );
	}

	inline void spBoneSettings::SetUseBoneReducer( bool value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetUseBoneReducer( this->_GetHandle() , value );
	}

	inline bool spBoneSettings::GetUseBoneReducer(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetUseBoneReducer( this->_GetHandle() );
	}

	inline void spBoneSettings::SetLockBoneSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetLockBoneSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spBoneSettings::GetLockBoneSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetLockBoneSelectionSetID( this->_GetHandle() );
	}

	inline void spBoneSettings::SetLockBoneSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetLockBoneSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spBoneSettings::GetLockBoneSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpBoneSettings_GetLockBoneSelectionSetName( this->_GetHandle() ));
	}

	inline void spBoneSettings::SetRemoveBoneSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetRemoveBoneSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spBoneSettings::GetRemoveBoneSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpBoneSettings_GetRemoveBoneSelectionSetID( this->_GetHandle() );
	}

	inline void spBoneSettings::SetRemoveBoneSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpBoneSettings_SetRemoveBoneSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spBoneSettings::GetRemoveBoneSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpBoneSettings_GetRemoveBoneSelectionSetName( this->_GetHandle() ));
	}

	/// Implementations of spReductionSettings methods
	inline spReductionSettings::spReductionSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spReductionSettings::spReductionSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spReductionSettings::spReductionSettings( const spReductionSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spReductionSettings & spReductionSettings::operator= ( const spReductionSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spReductionSettings spReductionSettings::SafeCast( spObject other ) { spReductionSettings ret; if( other.NonNull() && other.IsA("IReductionSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spReductionSettings* spReductionSettings::operator->() const { return this; }
	inline spReductionSettings::spReductionSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spReductionSettings::SetReductionTargets( Simplygon::EStopCondition stopCondition , bool useTriangleRatio , bool useTriangleCount , bool useMaxDeviation , bool useOnScreenSize ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionTargets( this->_GetHandle() , (EStopCondition)stopCondition , useTriangleRatio , useTriangleCount , useMaxDeviation , useOnScreenSize );
	}

	inline void spReductionSettings::SetReductionTargetTriangleRatioEnabled( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionTargetTriangleRatioEnabled( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetReductionTargetTriangleRatioEnabled(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetReductionTargetTriangleRatioEnabled( this->_GetHandle() );
	}

	inline void spReductionSettings::SetReductionTargetTriangleCountEnabled( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionTargetTriangleCountEnabled( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetReductionTargetTriangleCountEnabled(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetReductionTargetTriangleCountEnabled( this->_GetHandle() );
	}

	inline void spReductionSettings::SetReductionTargetMaxDeviationEnabled( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionTargetMaxDeviationEnabled( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetReductionTargetMaxDeviationEnabled(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetReductionTargetMaxDeviationEnabled( this->_GetHandle() );
	}

	inline void spReductionSettings::SetReductionTargetOnScreenSizeEnabled( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionTargetOnScreenSizeEnabled( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetReductionTargetOnScreenSizeEnabled(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetReductionTargetOnScreenSizeEnabled( this->_GetHandle() );
	}

	inline void spReductionSettings::SetReductionTargetStopCondition( Simplygon::EStopCondition value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionTargetStopCondition( this->_GetHandle() , (EStopCondition)value );
	}

	inline Simplygon::EStopCondition spReductionSettings::GetReductionTargetStopCondition(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetReductionTargetStopCondition( this->_GetHandle() );
	}

	inline void spReductionSettings::SetReductionHeuristics( Simplygon::EReductionHeuristics value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionHeuristics( this->_GetHandle() , (EReductionHeuristics)value );
	}

	inline Simplygon::EReductionHeuristics spReductionSettings::GetReductionHeuristics(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetReductionHeuristics( this->_GetHandle() );
	}

	inline void spReductionSettings::SetReductionTargetTriangleRatio( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionTargetTriangleRatio( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetReductionTargetTriangleRatio(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetReductionTargetTriangleRatio( this->_GetHandle() );
	}

	inline void spReductionSettings::SetReductionTargetTriangleCount( unsigned int value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionTargetTriangleCount( this->_GetHandle() , value );
	}

	inline unsigned int spReductionSettings::GetReductionTargetTriangleCount(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetReductionTargetTriangleCount( this->_GetHandle() );
	}

	inline void spReductionSettings::SetReductionTargetMaxDeviation( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionTargetMaxDeviation( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetReductionTargetMaxDeviation(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetReductionTargetMaxDeviation( this->_GetHandle() );
	}

	inline void spReductionSettings::SetReductionTargetOnScreenSize( unsigned int value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetReductionTargetOnScreenSize( this->_GetHandle() , value );
	}

	inline unsigned int spReductionSettings::GetReductionTargetOnScreenSize(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetReductionTargetOnScreenSize( this->_GetHandle() );
	}

	inline void spReductionSettings::SetGeometryImportance( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetGeometryImportance( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetGeometryImportance(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetGeometryImportance( this->_GetHandle() );
	}

	inline void spReductionSettings::SetMaterialImportance( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetMaterialImportance( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetMaterialImportance(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetMaterialImportance( this->_GetHandle() );
	}

	inline void spReductionSettings::SetTextureImportance( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetTextureImportance( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetTextureImportance(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetTextureImportance( this->_GetHandle() );
	}

	inline void spReductionSettings::SetShadingImportance( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetShadingImportance( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetShadingImportance(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetShadingImportance( this->_GetHandle() );
	}

	inline void spReductionSettings::SetGroupImportance( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetGroupImportance( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetGroupImportance(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetGroupImportance( this->_GetHandle() );
	}

	inline void spReductionSettings::SetVertexColorImportance( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetVertexColorImportance( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetVertexColorImportance(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetVertexColorImportance( this->_GetHandle() );
	}

	inline void spReductionSettings::SetEdgeSetImportance( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetEdgeSetImportance( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetEdgeSetImportance(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetEdgeSetImportance( this->_GetHandle() );
	}

	inline void spReductionSettings::SetSkinningImportance( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetSkinningImportance( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetSkinningImportance(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetSkinningImportance( this->_GetHandle() );
	}

	inline void spReductionSettings::SetCurvatureImportance( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetCurvatureImportance( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetCurvatureImportance(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetCurvatureImportance( this->_GetHandle() );
	}

	inline void spReductionSettings::SetCreateGeomorphGeometry( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetCreateGeomorphGeometry( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetCreateGeomorphGeometry(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetCreateGeomorphGeometry( this->_GetHandle() );
	}

	inline void spReductionSettings::SetAllowDegenerateTexCoords( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetAllowDegenerateTexCoords( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetAllowDegenerateTexCoords(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetAllowDegenerateTexCoords( this->_GetHandle() );
	}

	inline void spReductionSettings::SetKeepSymmetry( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetKeepSymmetry( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetKeepSymmetry(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetKeepSymmetry( this->_GetHandle() );
	}

	inline void spReductionSettings::SetUseAutomaticSymmetryDetection( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetUseAutomaticSymmetryDetection( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetUseAutomaticSymmetryDetection(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetUseAutomaticSymmetryDetection( this->_GetHandle() );
	}

	inline void spReductionSettings::SetUseSymmetryQuadRetriangulator( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetUseSymmetryQuadRetriangulator( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetUseSymmetryQuadRetriangulator(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetUseSymmetryQuadRetriangulator( this->_GetHandle() );
	}

	inline void spReductionSettings::SetSymmetryAxis( Simplygon::ESymmetryAxis value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetSymmetryAxis( this->_GetHandle() , (ESymmetryAxis)value );
	}

	inline Simplygon::ESymmetryAxis spReductionSettings::GetSymmetryAxis(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetSymmetryAxis( this->_GetHandle() );
	}

	inline void spReductionSettings::SetSymmetryOffset( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetSymmetryOffset( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetSymmetryOffset(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetSymmetryOffset( this->_GetHandle() );
	}

	inline void spReductionSettings::SetSymmetryDetectionTolerance( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetSymmetryDetectionTolerance( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetSymmetryDetectionTolerance(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetSymmetryDetectionTolerance( this->_GetHandle() );
	}

	inline void spReductionSettings::SetDataCreationPreferences( Simplygon::EDataCreationPreferences value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetDataCreationPreferences( this->_GetHandle() , (EDataCreationPreferences)value );
	}

	inline Simplygon::EDataCreationPreferences spReductionSettings::GetDataCreationPreferences(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetDataCreationPreferences( this->_GetHandle() );
	}

	inline void spReductionSettings::SetGenerateGeomorphData( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetGenerateGeomorphData( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetGenerateGeomorphData(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetGenerateGeomorphData( this->_GetHandle() );
	}

	inline void spReductionSettings::SetOutwardMoveMultiplier( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetOutwardMoveMultiplier( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetOutwardMoveMultiplier(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetOutwardMoveMultiplier( this->_GetHandle() );
	}

	inline void spReductionSettings::SetInwardMoveMultiplier( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetInwardMoveMultiplier( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetInwardMoveMultiplier(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetInwardMoveMultiplier( this->_GetHandle() );
	}

	inline void spReductionSettings::SetMaxEdgeLength( real value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetMaxEdgeLength( this->_GetHandle() , value );
	}

	inline real spReductionSettings::GetMaxEdgeLength(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetMaxEdgeLength( this->_GetHandle() );
	}

	inline void spReductionSettings::SetUseHighQualityNormalCalculation( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetUseHighQualityNormalCalculation( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetUseHighQualityNormalCalculation(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetUseHighQualityNormalCalculation( this->_GetHandle() );
	}

	inline void spReductionSettings::SetProcessSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetProcessSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spReductionSettings::GetProcessSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetProcessSelectionSetID( this->_GetHandle() );
	}

	inline void spReductionSettings::SetProcessSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetProcessSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spReductionSettings::GetProcessSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpReductionSettings_GetProcessSelectionSetName( this->_GetHandle() ));
	}

	inline void spReductionSettings::SetMergeGeometries( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetMergeGeometries( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetMergeGeometries(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetMergeGeometries( this->_GetHandle() );
	}

	inline void spReductionSettings::SetKeepUnprocessedSceneMeshes( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetKeepUnprocessedSceneMeshes( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetKeepUnprocessedSceneMeshes(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetKeepUnprocessedSceneMeshes( this->_GetHandle() );
	}

	inline void spReductionSettings::SetLockGeometricBorder( bool value ) const
	{
		this->_GetAPI()->fpReductionSettings_SetLockGeometricBorder( this->_GetHandle() , value );
	}

	inline bool spReductionSettings::GetLockGeometricBorder(  ) const
	{
		return this->_GetAPI()->fpReductionSettings_GetLockGeometricBorder( this->_GetHandle() );
	}

	/// Implementations of spNormalCalculationSettings methods
	inline spNormalCalculationSettings::spNormalCalculationSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spNormalCalculationSettings::spNormalCalculationSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spNormalCalculationSettings::spNormalCalculationSettings( const spNormalCalculationSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spNormalCalculationSettings & spNormalCalculationSettings::operator= ( const spNormalCalculationSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spNormalCalculationSettings spNormalCalculationSettings::SafeCast( spObject other ) { spNormalCalculationSettings ret; if( other.NonNull() && other.IsA("INormalCalculationSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spNormalCalculationSettings* spNormalCalculationSettings::operator->() const { return this; }
	inline spNormalCalculationSettings::spNormalCalculationSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spNormalCalculationSettings::SetReplaceNormals( bool value ) const
	{
		this->_GetAPI()->fpNormalCalculationSettings_SetReplaceNormals( this->_GetHandle() , value );
	}

	inline bool spNormalCalculationSettings::GetReplaceNormals(  ) const
	{
		return this->_GetAPI()->fpNormalCalculationSettings_GetReplaceNormals( this->_GetHandle() );
	}

	inline void spNormalCalculationSettings::SetReplaceTangents( bool value ) const
	{
		this->_GetAPI()->fpNormalCalculationSettings_SetReplaceTangents( this->_GetHandle() , value );
	}

	inline bool spNormalCalculationSettings::GetReplaceTangents(  ) const
	{
		return this->_GetAPI()->fpNormalCalculationSettings_GetReplaceTangents( this->_GetHandle() );
	}

	inline void spNormalCalculationSettings::SetHardEdgeAngle( real value ) const
	{
		this->_GetAPI()->fpNormalCalculationSettings_SetHardEdgeAngle( this->_GetHandle() , value );
	}

	inline real spNormalCalculationSettings::GetHardEdgeAngle(  ) const
	{
		return this->_GetAPI()->fpNormalCalculationSettings_GetHardEdgeAngle( this->_GetHandle() );
	}

	inline void spNormalCalculationSettings::SetRepairInvalidNormals( bool value ) const
	{
		this->_GetAPI()->fpNormalCalculationSettings_SetRepairInvalidNormals( this->_GetHandle() , value );
	}

	inline bool spNormalCalculationSettings::GetRepairInvalidNormals(  ) const
	{
		return this->_GetAPI()->fpNormalCalculationSettings_GetRepairInvalidNormals( this->_GetHandle() );
	}

	inline void spNormalCalculationSettings::SetReorthogonalizeTangentSpace( bool value ) const
	{
		this->_GetAPI()->fpNormalCalculationSettings_SetReorthogonalizeTangentSpace( this->_GetHandle() , value );
	}

	inline bool spNormalCalculationSettings::GetReorthogonalizeTangentSpace(  ) const
	{
		return this->_GetAPI()->fpNormalCalculationSettings_GetReorthogonalizeTangentSpace( this->_GetHandle() );
	}

	inline void spNormalCalculationSettings::SetScaleByArea( bool value ) const
	{
		this->_GetAPI()->fpNormalCalculationSettings_SetScaleByArea( this->_GetHandle() , value );
	}

	inline bool spNormalCalculationSettings::GetScaleByArea(  ) const
	{
		return this->_GetAPI()->fpNormalCalculationSettings_GetScaleByArea( this->_GetHandle() );
	}

	inline void spNormalCalculationSettings::SetScaleByAngle( bool value ) const
	{
		this->_GetAPI()->fpNormalCalculationSettings_SetScaleByAngle( this->_GetHandle() , value );
	}

	inline bool spNormalCalculationSettings::GetScaleByAngle(  ) const
	{
		return this->_GetAPI()->fpNormalCalculationSettings_GetScaleByAngle( this->_GetHandle() );
	}

	inline void spNormalCalculationSettings::SetSnapNormalsToFlatSurfaces( bool value ) const
	{
		this->_GetAPI()->fpNormalCalculationSettings_SetSnapNormalsToFlatSurfaces( this->_GetHandle() , value );
	}

	inline bool spNormalCalculationSettings::GetSnapNormalsToFlatSurfaces(  ) const
	{
		return this->_GetAPI()->fpNormalCalculationSettings_GetSnapNormalsToFlatSurfaces( this->_GetHandle() );
	}

	/// Implementations of spMappingImageSettings methods
	inline spMappingImageSettings::spMappingImageSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spMappingImageSettings::spMappingImageSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spMappingImageSettings::spMappingImageSettings( const spMappingImageSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spMappingImageSettings & spMappingImageSettings::operator= ( const spMappingImageSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spMappingImageSettings spMappingImageSettings::SafeCast( spObject other ) { spMappingImageSettings ret; if( other.NonNull() && other.IsA("IMappingImageSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spMappingImageSettings* spMappingImageSettings::operator->() const { return this; }
	inline spMappingImageSettings::spMappingImageSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spMappingImageSettings::SetInputMaterialCount( unsigned int value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetInputMaterialCount( this->_GetHandle() , value );
	}

	inline unsigned int spMappingImageSettings::GetInputMaterialCount(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetInputMaterialCount( this->_GetHandle() );
	}

	inline Simplygon::spMappingImageInputMaterialSettings spMappingImageSettings::GetInputMaterialSettings( unsigned int index ) const
	{
		spMappingImageInputMaterialSettings retobj = spMappingImageInputMaterialSettings( this->_GetAPI() , this->_GetAPI()->fpMappingImageSettings_GetInputMaterialSettings( this->_GetHandle() , index ));
		return retobj;
	}

	inline void spMappingImageSettings::SetOutputMaterialCount( unsigned int value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetOutputMaterialCount( this->_GetHandle() , value );
	}

	inline unsigned int spMappingImageSettings::GetOutputMaterialCount(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetOutputMaterialCount( this->_GetHandle() );
	}

	inline Simplygon::spMappingImageOutputMaterialSettings spMappingImageSettings::GetOutputMaterialSettings( unsigned int index ) const
	{
		spMappingImageOutputMaterialSettings retobj = spMappingImageOutputMaterialSettings( this->_GetAPI() , this->_GetAPI()->fpMappingImageSettings_GetOutputMaterialSettings( this->_GetHandle() , index ));
		return retobj;
	}

	inline void spMappingImageSettings::SetReplaceMappingImages( bool value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetReplaceMappingImages( this->_GetHandle() , value );
	}

	inline bool spMappingImageSettings::GetReplaceMappingImages(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetReplaceMappingImages( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetMaximumLayers( unsigned int value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetMaximumLayers( this->_GetHandle() , value );
	}

	inline unsigned int spMappingImageSettings::GetMaximumLayers(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetMaximumLayers( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetAllowTransparencyMapping( bool value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetAllowTransparencyMapping( this->_GetHandle() , value );
	}

	inline bool spMappingImageSettings::GetAllowTransparencyMapping(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetAllowTransparencyMapping( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetGenerateMappingImage( bool value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetGenerateMappingImage( this->_GetHandle() , value );
	}

	inline bool spMappingImageSettings::GetGenerateMappingImage(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetGenerateMappingImage( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetGenerateTexCoords( bool value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetGenerateTexCoords( this->_GetHandle() , value );
	}

	inline bool spMappingImageSettings::GetGenerateTexCoords(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetGenerateTexCoords( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetGenerateTangents( bool value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetGenerateTangents( this->_GetHandle() , value );
	}

	inline bool spMappingImageSettings::GetGenerateTangents(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetGenerateTangents( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetTexCoordLevel( rid value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetTexCoordLevel( this->_GetHandle() , value );
	}

	inline rid spMappingImageSettings::GetTexCoordLevel(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetTexCoordLevel( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetTexCoordName( const char * value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetTexCoordName( this->_GetHandle() , value );
	}

	inline spString spMappingImageSettings::GetTexCoordName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpMappingImageSettings_GetTexCoordName( this->_GetHandle() ));
	}

	inline void spMappingImageSettings::SetUseFullRetexturing( bool value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetUseFullRetexturing( this->_GetHandle() , value );
	}

	inline bool spMappingImageSettings::GetUseFullRetexturing(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetUseFullRetexturing( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetApplyNewMaterialIds( bool value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetApplyNewMaterialIds( this->_GetHandle() , value );
	}

	inline bool spMappingImageSettings::GetApplyNewMaterialIds(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetApplyNewMaterialIds( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetUseAutomaticTextureSize( bool value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetUseAutomaticTextureSize( this->_GetHandle() , value );
	}

	inline bool spMappingImageSettings::GetUseAutomaticTextureSize(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetUseAutomaticTextureSize( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetAutomaticTextureSizeMultiplier( real value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetAutomaticTextureSizeMultiplier( this->_GetHandle() , value );
	}

	inline real spMappingImageSettings::GetAutomaticTextureSizeMultiplier(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetAutomaticTextureSizeMultiplier( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetForcePower2Texture( bool value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetForcePower2Texture( this->_GetHandle() , value );
	}

	inline bool spMappingImageSettings::GetForcePower2Texture(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetForcePower2Texture( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetTexCoordGeneratorType( Simplygon::ETexcoordGeneratorType value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetTexCoordGeneratorType( this->_GetHandle() , (ETexcoordGeneratorType)value );
	}

	inline Simplygon::ETexcoordGeneratorType spMappingImageSettings::GetTexCoordGeneratorType(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetTexCoordGeneratorType( this->_GetHandle() );
	}

	inline void spMappingImageSettings::SetOnlyParameterizeInvalidUVs( bool value ) const
	{
		this->_GetAPI()->fpMappingImageSettings_SetOnlyParameterizeInvalidUVs( this->_GetHandle() , value );
	}

	inline bool spMappingImageSettings::GetOnlyParameterizeInvalidUVs(  ) const
	{
		return this->_GetAPI()->fpMappingImageSettings_GetOnlyParameterizeInvalidUVs( this->_GetHandle() );
	}

	inline Simplygon::spChartAggregatorSettings spMappingImageSettings::GetChartAggregatorSettings(  ) const
	{
		spChartAggregatorSettings retobj = spChartAggregatorSettings( this->_GetAPI() , this->_GetAPI()->fpMappingImageSettings_GetChartAggregatorSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spParameterizerSettings spMappingImageSettings::GetParameterizerSettings(  ) const
	{
		spParameterizerSettings retobj = spParameterizerSettings( this->_GetAPI() , this->_GetAPI()->fpMappingImageSettings_GetParameterizerSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spMappingImageInputMaterialSettings methods
	inline spMappingImageInputMaterialSettings::spMappingImageInputMaterialSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spMappingImageInputMaterialSettings::spMappingImageInputMaterialSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spMappingImageInputMaterialSettings::spMappingImageInputMaterialSettings( const spMappingImageInputMaterialSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spMappingImageInputMaterialSettings & spMappingImageInputMaterialSettings::operator= ( const spMappingImageInputMaterialSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spMappingImageInputMaterialSettings spMappingImageInputMaterialSettings::SafeCast( spObject other ) { spMappingImageInputMaterialSettings ret; if( other.NonNull() && other.IsA("IMappingImageInputMaterialSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spMappingImageInputMaterialSettings* spMappingImageInputMaterialSettings::operator->() const { return this; }
	inline spMappingImageInputMaterialSettings::spMappingImageInputMaterialSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spMappingImageInputMaterialSettings::SetMaterialMapping( int value ) const
	{
		this->_GetAPI()->fpMappingImageInputMaterialSettings_SetMaterialMapping( this->_GetHandle() , value );
	}

	inline int spMappingImageInputMaterialSettings::GetMaterialMapping(  ) const
	{
		return this->_GetAPI()->fpMappingImageInputMaterialSettings_GetMaterialMapping( this->_GetHandle() );
	}

	/// Implementations of spMappingImageOutputMaterialSettings methods
	inline spMappingImageOutputMaterialSettings::spMappingImageOutputMaterialSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spMappingImageOutputMaterialSettings::spMappingImageOutputMaterialSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spMappingImageOutputMaterialSettings::spMappingImageOutputMaterialSettings( const spMappingImageOutputMaterialSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spMappingImageOutputMaterialSettings & spMappingImageOutputMaterialSettings::operator= ( const spMappingImageOutputMaterialSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spMappingImageOutputMaterialSettings spMappingImageOutputMaterialSettings::SafeCast( spObject other ) { spMappingImageOutputMaterialSettings ret; if( other.NonNull() && other.IsA("IMappingImageOutputMaterialSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spMappingImageOutputMaterialSettings* spMappingImageOutputMaterialSettings::operator->() const { return this; }
	inline spMappingImageOutputMaterialSettings::spMappingImageOutputMaterialSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spMappingImageOutputMaterialSettings::SetTextureWidth( unsigned int value ) const
	{
		this->_GetAPI()->fpMappingImageOutputMaterialSettings_SetTextureWidth( this->_GetHandle() , value );
	}

	inline unsigned int spMappingImageOutputMaterialSettings::GetTextureWidth(  ) const
	{
		return this->_GetAPI()->fpMappingImageOutputMaterialSettings_GetTextureWidth( this->_GetHandle() );
	}

	inline void spMappingImageOutputMaterialSettings::SetTextureHeight( unsigned int value ) const
	{
		this->_GetAPI()->fpMappingImageOutputMaterialSettings_SetTextureHeight( this->_GetHandle() , value );
	}

	inline unsigned int spMappingImageOutputMaterialSettings::GetTextureHeight(  ) const
	{
		return this->_GetAPI()->fpMappingImageOutputMaterialSettings_GetTextureHeight( this->_GetHandle() );
	}

	inline void spMappingImageOutputMaterialSettings::SetMultisamplingLevel( unsigned int value ) const
	{
		this->_GetAPI()->fpMappingImageOutputMaterialSettings_SetMultisamplingLevel( this->_GetHandle() , value );
	}

	inline unsigned int spMappingImageOutputMaterialSettings::GetMultisamplingLevel(  ) const
	{
		return this->_GetAPI()->fpMappingImageOutputMaterialSettings_GetMultisamplingLevel( this->_GetHandle() );
	}

	inline void spMappingImageOutputMaterialSettings::SetGutterSpace( unsigned int value ) const
	{
		this->_GetAPI()->fpMappingImageOutputMaterialSettings_SetGutterSpace( this->_GetHandle() , value );
	}

	inline unsigned int spMappingImageOutputMaterialSettings::GetGutterSpace(  ) const
	{
		return this->_GetAPI()->fpMappingImageOutputMaterialSettings_GetGutterSpace( this->_GetHandle() );
	}

	/// Implementations of spVisibilitySettings methods
	inline spVisibilitySettings::spVisibilitySettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spVisibilitySettings::spVisibilitySettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spVisibilitySettings::spVisibilitySettings( const spVisibilitySettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spVisibilitySettings & spVisibilitySettings::operator= ( const spVisibilitySettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spVisibilitySettings spVisibilitySettings::SafeCast( spObject other ) { spVisibilitySettings ret; if( other.NonNull() && other.IsA("IVisibilitySettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spVisibilitySettings* spVisibilitySettings::operator->() const { return this; }
	inline spVisibilitySettings::spVisibilitySettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spVisibilitySettings::SetUseVisibilityWeightsInReducer( bool value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetUseVisibilityWeightsInReducer( this->_GetHandle() , value );
	}

	inline bool spVisibilitySettings::GetUseVisibilityWeightsInReducer(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetUseVisibilityWeightsInReducer( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetUseVisibilityWeightsInTexcoordGenerator( bool value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetUseVisibilityWeightsInTexcoordGenerator( this->_GetHandle() , value );
	}

	inline bool spVisibilitySettings::GetUseVisibilityWeightsInTexcoordGenerator(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetUseVisibilityWeightsInTexcoordGenerator( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetVisibilityWeightsPower( real value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetVisibilityWeightsPower( this->_GetHandle() , value );
	}

	inline real spVisibilitySettings::GetVisibilityWeightsPower(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetVisibilityWeightsPower( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetCullOccludedGeometry( bool value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetCullOccludedGeometry( this->_GetHandle() , value );
	}

	inline bool spVisibilitySettings::GetCullOccludedGeometry(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetCullOccludedGeometry( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetForceVisibilityCalculation( bool value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetForceVisibilityCalculation( this->_GetHandle() , value );
	}

	inline bool spVisibilitySettings::GetForceVisibilityCalculation(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetForceVisibilityCalculation( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetUseBackfaceCulling( bool value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetUseBackfaceCulling( this->_GetHandle() , value );
	}

	inline bool spVisibilitySettings::GetUseBackfaceCulling(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetUseBackfaceCulling( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetCameraSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetCameraSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spVisibilitySettings::GetCameraSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetCameraSelectionSetID( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetCameraSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetCameraSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spVisibilitySettings::GetCameraSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpVisibilitySettings_GetCameraSelectionSetName( this->_GetHandle() ));
	}

	inline void spVisibilitySettings::SetOccluderSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetOccluderSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spVisibilitySettings::GetOccluderSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetOccluderSelectionSetID( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetOccluderSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetOccluderSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spVisibilitySettings::GetOccluderSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpVisibilitySettings_GetOccluderSelectionSetName( this->_GetHandle() ));
	}

	inline void spVisibilitySettings::SetFillNonVisibleAreaThreshold( real value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetFillNonVisibleAreaThreshold( this->_GetHandle() , value );
	}

	inline real spVisibilitySettings::GetFillNonVisibleAreaThreshold(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetFillNonVisibleAreaThreshold( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetRemoveTrianglesNotOccludingOtherTriangles( bool value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetRemoveTrianglesNotOccludingOtherTriangles( this->_GetHandle() , value );
	}

	inline bool spVisibilitySettings::GetRemoveTrianglesNotOccludingOtherTriangles(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetRemoveTrianglesNotOccludingOtherTriangles( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetConservativeMode( bool value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetConservativeMode( this->_GetHandle() , value );
	}

	inline bool spVisibilitySettings::GetConservativeMode(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetConservativeMode( this->_GetHandle() );
	}

	inline void spVisibilitySettings::SetComputeVisibilityMode( Simplygon::EComputeVisibilityMode value ) const
	{
		this->_GetAPI()->fpVisibilitySettings_SetComputeVisibilityMode( this->_GetHandle() , (EComputeVisibilityMode)value );
	}

	inline Simplygon::EComputeVisibilityMode spVisibilitySettings::GetComputeVisibilityMode(  ) const
	{
		return this->_GetAPI()->fpVisibilitySettings_GetComputeVisibilityMode( this->_GetHandle() );
	}

	/// Implementations of spReductionProcessor methods
	inline spReductionProcessor::spReductionProcessor() : spProcessingObject( nullptr , nullptr ) {}
	inline spReductionProcessor::spReductionProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spProcessingObject( _sg , _intfptr ) {}
	inline spReductionProcessor::spReductionProcessor( const spReductionProcessor &p ) : spProcessingObject( p._GetAPI() , p._GetHandle() ) {}
	inline spReductionProcessor & spReductionProcessor::operator= ( const spReductionProcessor &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spReductionProcessor spReductionProcessor::SafeCast( spObject other ) { spReductionProcessor ret; if( other.NonNull() && other.IsA("IReductionProcessor") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spReductionProcessor* spReductionProcessor::operator->() const { return this; }
	inline spReductionProcessor::spReductionProcessor( const _NilStruct & ) : spProcessingObject( nullptr , nullptr ) {}

	inline void spReductionProcessor::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpReductionProcessor_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spReductionProcessor::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpReductionProcessor_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spReductionProcessor::GetMappingImage(  ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpReductionProcessor_GetMappingImage( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spReductionProcessor::GetMappingImageForImageIndex( rid OutputMaterialId ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpReductionProcessor_GetMappingImageForImageIndex( this->_GetHandle() , OutputMaterialId ));
		return retobj;
	}

	inline Simplygon::spRepairSettings spReductionProcessor::GetRepairSettings(  ) const
	{
		spRepairSettings retobj = spRepairSettings( this->_GetAPI() , this->_GetAPI()->fpReductionProcessor_GetRepairSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spReductionSettings spReductionProcessor::GetReductionSettings(  ) const
	{
		spReductionSettings retobj = spReductionSettings( this->_GetAPI() , this->_GetAPI()->fpReductionProcessor_GetReductionSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spBoneSettings spReductionProcessor::GetBoneSettings(  ) const
	{
		spBoneSettings retobj = spBoneSettings( this->_GetAPI() , this->_GetAPI()->fpReductionProcessor_GetBoneSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spNormalCalculationSettings spReductionProcessor::GetNormalCalculationSettings(  ) const
	{
		spNormalCalculationSettings retobj = spNormalCalculationSettings( this->_GetAPI() , this->_GetAPI()->fpReductionProcessor_GetNormalCalculationSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImageSettings spReductionProcessor::GetMappingImageSettings(  ) const
	{
		spMappingImageSettings retobj = spMappingImageSettings( this->_GetAPI() , this->_GetAPI()->fpReductionProcessor_GetMappingImageSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVisibilitySettings spReductionProcessor::GetVisibilitySettings(  ) const
	{
		spVisibilitySettings retobj = spVisibilitySettings( this->_GetAPI() , this->_GetAPI()->fpReductionProcessor_GetVisibilitySettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVertexWeightSettings spReductionProcessor::GetVertexWeightSettings(  ) const
	{
		spVertexWeightSettings retobj = spVertexWeightSettings( this->_GetAPI() , this->_GetAPI()->fpReductionProcessor_GetVertexWeightSettings( this->_GetHandle() ));
		return retobj;
	}

	inline real spReductionProcessor::GetResultDeviation(  ) const
	{
		return this->_GetAPI()->fpReductionProcessor_GetResultDeviation( this->_GetHandle() );
	}

	/// Implementations of spRemeshingLegacySettings methods
	inline spRemeshingLegacySettings::spRemeshingLegacySettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spRemeshingLegacySettings::spRemeshingLegacySettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spRemeshingLegacySettings::spRemeshingLegacySettings( const spRemeshingLegacySettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spRemeshingLegacySettings & spRemeshingLegacySettings::operator= ( const spRemeshingLegacySettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spRemeshingLegacySettings spRemeshingLegacySettings::SafeCast( spObject other ) { spRemeshingLegacySettings ret; if( other.NonNull() && other.IsA("IRemeshingLegacySettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spRemeshingLegacySettings* spRemeshingLegacySettings::operator->() const { return this; }
	inline spRemeshingLegacySettings::spRemeshingLegacySettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spRemeshingLegacySettings::SetOnScreenSize( unsigned int value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetOnScreenSize( this->_GetHandle() , value );
	}

	inline unsigned int spRemeshingLegacySettings::GetOnScreenSize(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetOnScreenSize( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetMergeDistance( unsigned int value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetMergeDistance( this->_GetHandle() , value );
	}

	inline unsigned int spRemeshingLegacySettings::GetMergeDistance(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetMergeDistance( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetMergeBoldness( real value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetMergeBoldness( this->_GetHandle() , value );
	}

	inline real spRemeshingLegacySettings::GetMergeBoldness(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetMergeBoldness( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetMaxTriangleSize( unsigned int value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetMaxTriangleSize( this->_GetHandle() , value );
	}

	inline unsigned int spRemeshingLegacySettings::GetMaxTriangleSize(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetMaxTriangleSize( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetSurfaceTransferMode( Simplygon::ESurfaceTransferMode value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetSurfaceTransferMode( this->_GetHandle() , (ESurfaceTransferMode)value );
	}

	inline Simplygon::ESurfaceTransferMode spRemeshingLegacySettings::GetSurfaceTransferMode(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetSurfaceTransferMode( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetUseCuttingPlanes( bool value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetUseCuttingPlanes( this->_GetHandle() , value );
	}

	inline bool spRemeshingLegacySettings::GetUseCuttingPlanes(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetUseCuttingPlanes( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetHardEdgeAngle( real value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetHardEdgeAngle( this->_GetHandle() , value );
	}

	inline real spRemeshingLegacySettings::GetHardEdgeAngle(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetHardEdgeAngle( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetTransferNormals( bool value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetTransferNormals( this->_GetHandle() , value );
	}

	inline bool spRemeshingLegacySettings::GetTransferNormals(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetTransferNormals( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetTransferColors( bool value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetTransferColors( this->_GetHandle() , value );
	}

	inline bool spRemeshingLegacySettings::GetTransferColors(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetTransferColors( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetUseClippingGeometry( bool value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetUseClippingGeometry( this->_GetHandle() , value );
	}

	inline bool spRemeshingLegacySettings::GetUseClippingGeometry(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetUseClippingGeometry( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetUseEmptySpaceOverride( bool value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetUseEmptySpaceOverride( this->_GetHandle() , value );
	}

	inline bool spRemeshingLegacySettings::GetUseEmptySpaceOverride(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetUseEmptySpaceOverride( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetEmptySpaceOverride( const real *value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetEmptySpaceOverride( this->_GetHandle() , value );
	}

	inline spRealData spRemeshingLegacySettings::GetEmptySpaceOverride(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacySettings_GetEmptySpaceOverride( this->_GetHandle() ));
	}

	inline void spRemeshingLegacySettings::SetProcessSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetProcessSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spRemeshingLegacySettings::GetProcessSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetProcessSelectionSetID( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetProcessSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetProcessSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spRemeshingLegacySettings::GetProcessSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacySettings_GetProcessSelectionSetName( this->_GetHandle() ));
	}

	inline void spRemeshingLegacySettings::SetCuttingPlaneSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetCuttingPlaneSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spRemeshingLegacySettings::GetCuttingPlaneSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetCuttingPlaneSelectionSetID( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetCuttingPlaneSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetCuttingPlaneSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spRemeshingLegacySettings::GetCuttingPlaneSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacySettings_GetCuttingPlaneSelectionSetName( this->_GetHandle() ));
	}

	inline void spRemeshingLegacySettings::SetClippingGeometrySelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetClippingGeometrySelectionSetID( this->_GetHandle() , value );
	}

	inline rid spRemeshingLegacySettings::GetClippingGeometrySelectionSetID(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetClippingGeometrySelectionSetID( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetClippingGeometrySelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetClippingGeometrySelectionSetName( this->_GetHandle() , value );
	}

	inline spString spRemeshingLegacySettings::GetClippingGeometrySelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacySettings_GetClippingGeometrySelectionSetName( this->_GetHandle() ));
	}

	inline void spRemeshingLegacySettings::SetUseClippingGeometryEmptySpaceOverride( bool value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetUseClippingGeometryEmptySpaceOverride( this->_GetHandle() , value );
	}

	inline bool spRemeshingLegacySettings::GetUseClippingGeometryEmptySpaceOverride(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetUseClippingGeometryEmptySpaceOverride( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetUsePreviewMode( bool value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetUsePreviewMode( this->_GetHandle() , value );
	}

	inline bool spRemeshingLegacySettings::GetUsePreviewMode(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetUsePreviewMode( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetRespectWindingDirection( bool value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetRespectWindingDirection( this->_GetHandle() , value );
	}

	inline bool spRemeshingLegacySettings::GetRespectWindingDirection(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacySettings_GetRespectWindingDirection( this->_GetHandle() );
	}

	inline void spRemeshingLegacySettings::SetClippingGeometryEmptySpaceOverride( const real *value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetClippingGeometryEmptySpaceOverride( this->_GetHandle() , value );
	}

	inline spRealData spRemeshingLegacySettings::GetClippingGeometryEmptySpaceOverride(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacySettings_GetClippingGeometryEmptySpaceOverride( this->_GetHandle() ));
	}

	inline void spRemeshingLegacySettings::SetOutputSceneNodeName( const char * value ) const
	{
		this->_GetAPI()->fpRemeshingLegacySettings_SetOutputSceneNodeName( this->_GetHandle() , value );
	}

	inline spString spRemeshingLegacySettings::GetOutputSceneNodeName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacySettings_GetOutputSceneNodeName( this->_GetHandle() ));
	}

	/// Implementations of spRemeshingSettings methods
	inline spRemeshingSettings::spRemeshingSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spRemeshingSettings::spRemeshingSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spRemeshingSettings::spRemeshingSettings( const spRemeshingSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spRemeshingSettings & spRemeshingSettings::operator= ( const spRemeshingSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spRemeshingSettings spRemeshingSettings::SafeCast( spObject other ) { spRemeshingSettings ret; if( other.NonNull() && other.IsA("IRemeshingSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spRemeshingSettings* spRemeshingSettings::operator->() const { return this; }
	inline spRemeshingSettings::spRemeshingSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spRemeshingSettings::SetOnScreenSize( unsigned int value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetOnScreenSize( this->_GetHandle() , value );
	}

	inline unsigned int spRemeshingSettings::GetOnScreenSize(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetOnScreenSize( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetRemeshingMode( Simplygon::ERemeshingMode value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetRemeshingMode( this->_GetHandle() , (ERemeshingMode)value );
	}

	inline Simplygon::ERemeshingMode spRemeshingSettings::GetRemeshingMode(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetRemeshingMode( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetHoleFilling( Simplygon::EHoleFilling value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetHoleFilling( this->_GetHandle() , (EHoleFilling)value );
	}

	inline Simplygon::EHoleFilling spRemeshingSettings::GetHoleFilling(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetHoleFilling( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetSurfaceTransferMode( Simplygon::ESurfaceTransferMode value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetSurfaceTransferMode( this->_GetHandle() , (ESurfaceTransferMode)value );
	}

	inline Simplygon::ESurfaceTransferMode spRemeshingSettings::GetSurfaceTransferMode(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetSurfaceTransferMode( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetHardEdgeAngle( real value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetHardEdgeAngle( this->_GetHandle() , value );
	}

	inline real spRemeshingSettings::GetHardEdgeAngle(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetHardEdgeAngle( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetForceSoftEdgesWithinTextureCharts( bool value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetForceSoftEdgesWithinTextureCharts( this->_GetHandle() , value );
	}

	inline bool spRemeshingSettings::GetForceSoftEdgesWithinTextureCharts(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetForceSoftEdgesWithinTextureCharts( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetTransferNormals( bool value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetTransferNormals( this->_GetHandle() , value );
	}

	inline bool spRemeshingSettings::GetTransferNormals(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetTransferNormals( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetTransferColors( bool value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetTransferColors( this->_GetHandle() , value );
	}

	inline bool spRemeshingSettings::GetTransferColors(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetTransferColors( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetProcessSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetProcessSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spRemeshingSettings::GetProcessSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetProcessSelectionSetID( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetProcessSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetProcessSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spRemeshingSettings::GetProcessSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpRemeshingSettings_GetProcessSelectionSetName( this->_GetHandle() ));
	}

	inline void spRemeshingSettings::SetKeepUnprocessedSceneMeshes( bool value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetKeepUnprocessedSceneMeshes( this->_GetHandle() , value );
	}

	inline bool spRemeshingSettings::GetKeepUnprocessedSceneMeshes(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetKeepUnprocessedSceneMeshes( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetRemeshingModeManualPositionX( real value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetRemeshingModeManualPositionX( this->_GetHandle() , value );
	}

	inline real spRemeshingSettings::GetRemeshingModeManualPositionX(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetRemeshingModeManualPositionX( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetRemeshingModeManualPositionY( real value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetRemeshingModeManualPositionY( this->_GetHandle() , value );
	}

	inline real spRemeshingSettings::GetRemeshingModeManualPositionY(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetRemeshingModeManualPositionY( this->_GetHandle() );
	}

	inline void spRemeshingSettings::SetRemeshingModeManualPositionZ( real value ) const
	{
		this->_GetAPI()->fpRemeshingSettings_SetRemeshingModeManualPositionZ( this->_GetHandle() , value );
	}

	inline real spRemeshingSettings::GetRemeshingModeManualPositionZ(  ) const
	{
		return this->_GetAPI()->fpRemeshingSettings_GetRemeshingModeManualPositionZ( this->_GetHandle() );
	}

	/// Implementations of spRemeshingLegacyProcessor methods
	inline spRemeshingLegacyProcessor::spRemeshingLegacyProcessor() : spProcessingObject( nullptr , nullptr ) {}
	inline spRemeshingLegacyProcessor::spRemeshingLegacyProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spProcessingObject( _sg , _intfptr ) {}
	inline spRemeshingLegacyProcessor::spRemeshingLegacyProcessor( const spRemeshingLegacyProcessor &p ) : spProcessingObject( p._GetAPI() , p._GetHandle() ) {}
	inline spRemeshingLegacyProcessor & spRemeshingLegacyProcessor::operator= ( const spRemeshingLegacyProcessor &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spRemeshingLegacyProcessor spRemeshingLegacyProcessor::SafeCast( spObject other ) { spRemeshingLegacyProcessor ret; if( other.NonNull() && other.IsA("IRemeshingLegacyProcessor") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spRemeshingLegacyProcessor* spRemeshingLegacyProcessor::operator->() const { return this; }
	inline spRemeshingLegacyProcessor::spRemeshingLegacyProcessor( const _NilStruct & ) : spProcessingObject( nullptr , nullptr ) {}

	inline void spRemeshingLegacyProcessor::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpRemeshingLegacyProcessor_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spRemeshingLegacyProcessor::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacyProcessor_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spRemeshingLegacyProcessor::GetMappingImage(  ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacyProcessor_GetMappingImage( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spRemeshingLegacyProcessor::GetMappingImageForImageIndex( rid value ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacyProcessor_GetMappingImageForImageIndex( this->_GetHandle() , value ));
		return retobj;
	}

	inline Simplygon::spRemeshingLegacySettings spRemeshingLegacyProcessor::GetRemeshingLegacySettings(  ) const
	{
		spRemeshingLegacySettings retobj = spRemeshingLegacySettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacyProcessor_GetRemeshingLegacySettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImageSettings spRemeshingLegacyProcessor::GetMappingImageSettings(  ) const
	{
		spMappingImageSettings retobj = spMappingImageSettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacyProcessor_GetMappingImageSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spBoneSettings spRemeshingLegacyProcessor::GetBoneSettings(  ) const
	{
		spBoneSettings retobj = spBoneSettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacyProcessor_GetBoneSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVisibilitySettings spRemeshingLegacyProcessor::GetVisibilitySettings(  ) const
	{
		spVisibilitySettings retobj = spVisibilitySettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacyProcessor_GetVisibilitySettings( this->_GetHandle() ));
		return retobj;
	}

	inline rid spRemeshingLegacyProcessor::GetResultSelectionSetId(  ) const
	{
		return this->_GetAPI()->fpRemeshingLegacyProcessor_GetResultSelectionSetId( this->_GetHandle() );
	}

	/// Implementations of spRemeshingProcessor methods
	inline spRemeshingProcessor::spRemeshingProcessor() : spProcessingObject( nullptr , nullptr ) {}
	inline spRemeshingProcessor::spRemeshingProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spProcessingObject( _sg , _intfptr ) {}
	inline spRemeshingProcessor::spRemeshingProcessor( const spRemeshingProcessor &p ) : spProcessingObject( p._GetAPI() , p._GetHandle() ) {}
	inline spRemeshingProcessor & spRemeshingProcessor::operator= ( const spRemeshingProcessor &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spRemeshingProcessor spRemeshingProcessor::SafeCast( spObject other ) { spRemeshingProcessor ret; if( other.NonNull() && other.IsA("IRemeshingProcessor") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spRemeshingProcessor* spRemeshingProcessor::operator->() const { return this; }
	inline spRemeshingProcessor::spRemeshingProcessor( const _NilStruct & ) : spProcessingObject( nullptr , nullptr ) {}

	inline void spRemeshingProcessor::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpRemeshingProcessor_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spRemeshingProcessor::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpRemeshingProcessor_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spRemeshingProcessor::GetMappingImage(  ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpRemeshingProcessor_GetMappingImage( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spRemeshingProcessor::GetMappingImageForImageIndex( rid OutputMaterialId ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpRemeshingProcessor_GetMappingImageForImageIndex( this->_GetHandle() , OutputMaterialId ));
		return retobj;
	}

	inline Simplygon::spRemeshingSettings spRemeshingProcessor::GetRemeshingSettings(  ) const
	{
		spRemeshingSettings retobj = spRemeshingSettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingProcessor_GetRemeshingSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImageSettings spRemeshingProcessor::GetMappingImageSettings(  ) const
	{
		spMappingImageSettings retobj = spMappingImageSettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingProcessor_GetMappingImageSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spBoneSettings spRemeshingProcessor::GetBoneSettings(  ) const
	{
		spBoneSettings retobj = spBoneSettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingProcessor_GetBoneSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spGeometryCullingSettings spRemeshingProcessor::GetGeometryCullingSettings(  ) const
	{
		spGeometryCullingSettings retobj = spGeometryCullingSettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingProcessor_GetGeometryCullingSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVisibilitySettings spRemeshingProcessor::GetVisibilitySettings(  ) const
	{
		spVisibilitySettings retobj = spVisibilitySettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingProcessor_GetVisibilitySettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spScene methods
	inline spScene::spScene() : spObject( nullptr , nullptr ) {}
	inline spScene::spScene( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spScene::spScene( const spScene &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spScene & spScene::operator= ( const spScene &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spScene spScene::SafeCast( spObject other ) { spScene ret; if( other.NonNull() && other.IsA("IScene") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spScene* spScene::operator->() const { return this; }
	inline spScene::spScene( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::spSceneNode spScene::GetRootNode(  ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpScene_GetRootNode( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMaterialTable spScene::GetMaterialTable(  ) const
	{
		spMaterialTable retobj = spMaterialTable( this->_GetAPI() , this->_GetAPI()->fpScene_GetMaterialTable( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spSceneBoneTable spScene::GetBoneTable(  ) const
	{
		spSceneBoneTable retobj = spSceneBoneTable( this->_GetAPI() , this->_GetAPI()->fpScene_GetBoneTable( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spSelectionSetTable spScene::GetSelectionSetTable(  ) const
	{
		spSelectionSetTable retobj = spSelectionSetTable( this->_GetAPI() , this->_GetAPI()->fpScene_GetSelectionSetTable( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spTextureTable spScene::GetTextureTable(  ) const
	{
		spTextureTable retobj = spTextureTable( this->_GetAPI() , this->_GetAPI()->fpScene_GetTextureTable( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spScene::GetMappingImage(  ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpScene_GetMappingImage( this->_GetHandle() ));
		return retobj;
	}

	inline void spScene::RemoveSceneNodesInSelectionSet( int selectionSetID ) const
	{
		this->_GetAPI()->fpScene_RemoveSceneNodesInSelectionSet( this->_GetHandle() , selectionSetID );
	}

	inline void spScene::RemoveSceneNodes(  ) const
	{
		this->_GetAPI()->fpScene_RemoveSceneNodes( this->_GetHandle() );
	}

	inline void spScene::RemoveSceneNodesOfType( const char * nodeType ) const
	{
		this->_GetAPI()->fpScene_RemoveSceneNodesOfType( this->_GetHandle() , nodeType );
	}

	inline Simplygon::spScene spScene::CreateAABB( bool perMesh ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpScene_CreateAABB( this->_GetHandle() , perMesh ));
		return retobj;
	}

	inline void spScene::Clear(  ) const
	{
		this->_GetAPI()->fpScene_Clear( this->_GetHandle() );
	}

	inline bool spScene::LoadFromFile( const char * path ) const
	{
		return this->_GetAPI()->fpScene_LoadFromFile( this->_GetHandle() , path );
	}

	inline bool spScene::SaveToFile( const char * path ) const
	{
		return this->_GetAPI()->fpScene_SaveToFile( this->_GetHandle() , path );
	}

	inline void spScene::EvaluateDefaultGlobalTransformation( const spSceneNode & node , const spMatrix4x4 & global_transform ) const
	{
		this->_GetAPI()->fpScene_EvaluateDefaultGlobalTransformation( this->_GetHandle() , hIntf(node) , hIntf(global_transform) );
	}

	inline spRealData spScene::GetInf(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpScene_GetInf( this->_GetHandle() ));
	}

	inline spRealData spScene::GetSup(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpScene_GetSup( this->_GetHandle() ));
	}

	inline real spScene::GetRadius(  ) const
	{
		return this->_GetAPI()->fpScene_GetRadius( this->_GetHandle() );
	}

	inline bool spScene::CalculateExtents(  ) const
	{
		return this->_GetAPI()->fpScene_CalculateExtents( this->_GetHandle() );
	}

	inline Simplygon::spSceneNode spScene::GetNodeFromPath( const char * path ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpScene_GetNodeFromPath( this->_GetHandle() , path ));
		return retobj;
	}

	inline Simplygon::spSceneNode spScene::GetNodeByGUID( const char * node_id ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpScene_GetNodeByGUID( this->_GetHandle() , node_id ));
		return retobj;
	}

	inline Simplygon::spSceneNode spScene::GetSubNodeByGUID( const char * node_id , const spSceneNode & node ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpScene_GetSubNodeByGUID( this->_GetHandle() , node_id , hIntf(node) ));
		return retobj;
	}

	inline Simplygon::spValueArray spScene::AddCustomField( Simplygon::EBaseTypes base_type , const char * name , unsigned int tuple_size ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpScene_AddCustomField( this->_GetHandle() , (EBaseTypes)base_type , name , tuple_size ));
		return retobj;
	}

	inline void spScene::RemoveCustomField( const char * name ) const
	{
		this->_GetAPI()->fpScene_RemoveCustomField( this->_GetHandle() , name );
	}

	inline Simplygon::spValueArray spScene::GetCustomField( const char * name ) const
	{
		spValueArray retobj = spValueArray( this->_GetAPI() , this->_GetAPI()->fpScene_GetCustomField( this->_GetHandle() , name ));
		return retobj;
	}

	inline bool spScene::HasCustomField( const char * name ) const
	{
		return this->_GetAPI()->fpScene_HasCustomField( this->_GetHandle() , name );
	}

	inline void spScene::RemoveUnlinkedBones(  ) const
	{
		this->_GetAPI()->fpScene_RemoveUnlinkedBones( this->_GetHandle() );
	}

	inline void spScene::Compact(  ) const
	{
		this->_GetAPI()->fpScene_Compact( this->_GetHandle() );
	}

	inline void spScene::Append( const spScene & otherScene ) const
	{
		this->_GetAPI()->fpScene_Append( this->_GetHandle() , hIntf(otherScene) );
	}

	inline Simplygon::spGeometryData spScene::NewCombinedGeometryFromSelectionSet( int selectionSetID ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpScene_NewCombinedGeometryFromSelectionSet( this->_GetHandle() , selectionSetID ));
		return retobj;
	}

	inline Simplygon::spGeometryData spScene::NewCombinedGeometry(  ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpScene_NewCombinedGeometry( this->_GetHandle() ));
		return retobj;
	}

	inline int spScene::SelectNodes( const char * nodeTypeName ) const
	{
		return this->_GetAPI()->fpScene_SelectNodes( this->_GetHandle() , nodeTypeName );
	}

	inline void spScene::DeepCopy( const spScene & src ) const
	{
		this->_GetAPI()->fpScene_DeepCopy( this->_GetHandle() , hIntf(src) );
	}

	inline Simplygon::spScene spScene::NewCopy(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpScene_NewCopy( this->_GetHandle() ));
		return retobj;
	}

	inline unsigned int spScene::GetTriangleCount(  ) const
	{
		return this->_GetAPI()->fpScene_GetTriangleCount( this->_GetHandle() );
	}

	inline void spScene::StandardizeMaterials(  ) const
	{
		this->_GetAPI()->fpScene_StandardizeMaterials( this->_GetHandle() );
	}

	inline unsigned int spScene::GetCascadedSceneCount(  ) const
	{
		return this->_GetAPI()->fpScene_GetCascadedSceneCount( this->_GetHandle() );
	}

	inline Simplygon::spScene spScene::GetCascadedSceneForIndex( unsigned int index ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpScene_GetCascadedSceneForIndex( this->_GetHandle() , index ));
		return retobj;
	}

	inline void spScene::GetMaterialChannels( const spStringArray & channels ) const
	{
		this->_GetAPI()->fpScene_GetMaterialChannels( this->_GetHandle() , hIntf(channels) );
	}

	inline void spScene::GetMaterialChannelsWithTextureInputs( const spStringArray & channels ) const
	{
		this->_GetAPI()->fpScene_GetMaterialChannelsWithTextureInputs( this->_GetHandle() , hIntf(channels) );
	}

	/// Implementations of spSceneNode methods
	inline spSceneNode::spSceneNode() : spObject( nullptr , nullptr ) {}
	inline spSceneNode::spSceneNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spSceneNode::spSceneNode( const spSceneNode &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spSceneNode & spSceneNode::operator= ( const spSceneNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSceneNode spSceneNode::SafeCast( spObject other ) { spSceneNode ret; if( other.NonNull() && other.IsA("ISceneNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSceneNode* spSceneNode::operator->() const { return this; }
	inline spSceneNode::spSceneNode( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::spScene spSceneNode::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpSceneNode_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spSceneNode spSceneNode::GetParent(  ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpSceneNode_GetParent( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMatrix4x4 spSceneNode::GetRelativeTransform(  ) const
	{
		spMatrix4x4 retobj = spMatrix4x4( this->_GetAPI() , this->_GetAPI()->fpSceneNode_GetRelativeTransform( this->_GetHandle() ));
		return retobj;
	}

	inline void spSceneNode::SetOriginalName( const char * value ) const
	{
		this->_GetAPI()->fpSceneNode_SetOriginalName( this->_GetHandle() , value );
	}

	inline spString spSceneNode::GetOriginalName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpSceneNode_GetOriginalName( this->_GetHandle() ));
	}

	inline void spSceneNode::SetIsVisible( bool value ) const
	{
		this->_GetAPI()->fpSceneNode_SetIsVisible( this->_GetHandle() , value );
	}

	inline bool spSceneNode::GetIsVisible(  ) const
	{
		return this->_GetAPI()->fpSceneNode_GetIsVisible( this->_GetHandle() );
	}

	inline void spSceneNode::SetIsFrozen( bool value ) const
	{
		this->_GetAPI()->fpSceneNode_SetIsFrozen( this->_GetHandle() , value );
	}

	inline bool spSceneNode::GetIsFrozen(  ) const
	{
		return this->_GetAPI()->fpSceneNode_GetIsFrozen( this->_GetHandle() );
	}

	inline void spSceneNode::SetIsModified( bool value ) const
	{
		this->_GetAPI()->fpSceneNode_SetIsModified( this->_GetHandle() , value );
	}

	inline bool spSceneNode::GetIsModified(  ) const
	{
		return this->_GetAPI()->fpSceneNode_GetIsModified( this->_GetHandle() );
	}

	inline void spSceneNode::SetNodeGUID( const char * value ) const
	{
		this->_GetAPI()->fpSceneNode_SetNodeGUID( this->_GetHandle() , value );
	}

	inline spString spSceneNode::GetNodeGUID(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpSceneNode_GetNodeGUID( this->_GetHandle() ));
	}

	inline spRealData spSceneNode::GetInf(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpSceneNode_GetInf( this->_GetHandle() ));
	}

	inline spRealData spSceneNode::GetSup(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpSceneNode_GetSup( this->_GetHandle() ));
	}

	inline unsigned int spSceneNode::GetChildCount(  ) const
	{
		return this->_GetAPI()->fpSceneNode_GetChildCount( this->_GetHandle() );
	}

	inline Simplygon::spSceneNode spSceneNode::GetChild( rid index ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpSceneNode_GetChild( this->_GetHandle() , index ));
		return retobj;
	}

	inline Simplygon::spSceneNode spSceneNode::FindNamedChild( const char * name ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpSceneNode_FindNamedChild( this->_GetHandle() , name ));
		return retobj;
	}

	inline void spSceneNode::AddChild( const spSceneNode & child ) const
	{
		this->_GetAPI()->fpSceneNode_AddChild( this->_GetHandle() , hIntf(child) );
	}

	inline Simplygon::spSceneMesh spSceneNode::CreateChildMesh( const spGeometryData & geom ) const
	{
		spSceneMesh retobj = spSceneMesh( this->_GetAPI() , this->_GetAPI()->fpSceneNode_CreateChildMesh( this->_GetHandle() , hIntf(geom) ));
		return retobj;
	}

	inline Simplygon::spScenePlane spSceneNode::CreateChildPlane( const real *position , const real *normal ) const
	{
		spScenePlane retobj = spScenePlane( this->_GetAPI() , this->_GetAPI()->fpSceneNode_CreateChildPlane( this->_GetHandle() , position , normal ));
		return retobj;
	}

	inline void spSceneNode::RemoveChild( const spSceneNode & child ) const
	{
		this->_GetAPI()->fpSceneNode_RemoveChild( this->_GetHandle() , hIntf(child) );
	}

	inline void spSceneNode::RemoveChildren(  ) const
	{
		this->_GetAPI()->fpSceneNode_RemoveChildren( this->_GetHandle() );
	}

	inline void spSceneNode::RemoveFromParent(  ) const
	{
		this->_GetAPI()->fpSceneNode_RemoveFromParent( this->_GetHandle() );
	}

	inline bool spSceneNode::HasChild( const spSceneNode & child ) const
	{
		return this->_GetAPI()->fpSceneNode_HasChild( this->_GetHandle() , hIntf(child) );
	}

	inline Simplygon::spSceneNode spSceneNode::NewCopy(  ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpSceneNode_NewCopy( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spSceneNode spSceneNode::NewClone(  ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpSceneNode_NewClone( this->_GetHandle() ));
		return retobj;
	}

	inline void spSceneNode::EvaluateDefaultGlobalTransformation( const spMatrix4x4 & global_transform ) const
	{
		this->_GetAPI()->fpSceneNode_EvaluateDefaultGlobalTransformation( this->_GetHandle() , hIntf(global_transform) );
	}

	inline bool spSceneNode::CalculateExtents(  ) const
	{
		return this->_GetAPI()->fpSceneNode_CalculateExtents( this->_GetHandle() );
	}

	inline spString spSceneNode::GetPath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpSceneNode_GetPath( this->_GetHandle() ));
	}

	/// Implementations of spSceneNodeCollection methods
	inline spSceneNodeCollection::spSceneNodeCollection() : spObjectCollection( nullptr , nullptr ) {}
	inline spSceneNodeCollection::spSceneNodeCollection( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObjectCollection( _sg , _intfptr ) {}
	inline spSceneNodeCollection::spSceneNodeCollection( const spSceneNodeCollection &p ) : spObjectCollection( p._GetAPI() , p._GetHandle() ) {}
	inline spSceneNodeCollection & spSceneNodeCollection::operator= ( const spSceneNodeCollection &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSceneNodeCollection spSceneNodeCollection::SafeCast( spObject other ) { spSceneNodeCollection ret; if( other.NonNull() && other.IsA("ISceneNodeCollection") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSceneNodeCollection* spSceneNodeCollection::operator->() const { return this; }
	inline spSceneNodeCollection::spSceneNodeCollection( const _NilStruct & ) : spObjectCollection( nullptr , nullptr ) {}

	inline rhandle spSceneNodeCollection::AddSceneNode( const spSceneNode & obj ) const
	{
		return this->_GetAPI()->fpSceneNodeCollection_AddSceneNode( this->_GetHandle() , hIntf(obj) );
	}

	inline Simplygon::spSceneNode spSceneNodeCollection::GetSceneNode( rhandle objhandle ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpSceneNodeCollection_GetSceneNode( this->_GetHandle() , objhandle ));
		return retobj;
	}

	inline void spSceneNodeCollection::RemoveSceneNode( const spSceneNode & pobj ) const
	{
		this->_GetAPI()->fpSceneNodeCollection_RemoveSceneNode( this->_GetHandle() , hIntf(pobj) );
	}

	inline Simplygon::spSceneNode spSceneNodeCollection::FindSceneNode( const char * name ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpSceneNodeCollection_FindSceneNode( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spSceneNode spSceneNodeCollection::GetNextItemAsSceneNode( rhandle *phandle ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpSceneNodeCollection_GetNextItemAsSceneNode( this->_GetHandle() , phandle ));
		return retobj;
	}

	inline bool spSceneNodeCollection::IsSceneNodeInCollection( const spSceneNode & pobj ) const
	{
		return this->_GetAPI()->fpSceneNodeCollection_IsSceneNodeInCollection( this->_GetHandle() , hIntf(pobj) );
	}

	/// Implementations of spSceneMesh methods
	inline spSceneMesh::spSceneMesh() : spSceneNode( nullptr , nullptr ) {}
	inline spSceneMesh::spSceneMesh( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSceneNode( _sg , _intfptr ) {}
	inline spSceneMesh::spSceneMesh( const spSceneMesh &p ) : spSceneNode( p._GetAPI() , p._GetHandle() ) {}
	inline spSceneMesh & spSceneMesh::operator= ( const spSceneMesh &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSceneMesh spSceneMesh::SafeCast( spObject other ) { spSceneMesh ret; if( other.NonNull() && other.IsA("ISceneMesh") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSceneMesh* spSceneMesh::operator->() const { return this; }
	inline spSceneMesh::spSceneMesh( const _NilStruct & ) : spSceneNode( nullptr , nullptr ) {}

	inline void spSceneMesh::SetGeometry( const spGeometryData & value ) const
	{
		this->_GetAPI()->fpSceneMesh_SetGeometry( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spGeometryData spSceneMesh::GetGeometry(  ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpSceneMesh_GetGeometry( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spSceneLodGroup methods
	inline spSceneLodGroup::spSceneLodGroup() : spSceneNode( nullptr , nullptr ) {}
	inline spSceneLodGroup::spSceneLodGroup( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSceneNode( _sg , _intfptr ) {}
	inline spSceneLodGroup::spSceneLodGroup( const spSceneLodGroup &p ) : spSceneNode( p._GetAPI() , p._GetHandle() ) {}
	inline spSceneLodGroup & spSceneLodGroup::operator= ( const spSceneLodGroup &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSceneLodGroup spSceneLodGroup::SafeCast( spObject other ) { spSceneLodGroup ret; if( other.NonNull() && other.IsA("ISceneLodGroup") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSceneLodGroup* spSceneLodGroup::operator->() const { return this; }
	inline spSceneLodGroup::spSceneLodGroup( const _NilStruct & ) : spSceneNode( nullptr , nullptr ) {}

	inline Simplygon::spRealArray spSceneLodGroup::GetThresholds(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpSceneLodGroup_GetThresholds( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spSceneNode spSceneLodGroup::GetLodForDistance( real distance ) const
	{
		spSceneNode retobj = spSceneNode( this->_GetAPI() , this->_GetAPI()->fpSceneLodGroup_GetLodForDistance( this->_GetHandle() , distance ));
		return retobj;
	}

	/// Implementations of spSceneBone methods
	inline spSceneBone::spSceneBone() : spSceneNode( nullptr , nullptr ) {}
	inline spSceneBone::spSceneBone( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSceneNode( _sg , _intfptr ) {}
	inline spSceneBone::spSceneBone( const spSceneBone &p ) : spSceneNode( p._GetAPI() , p._GetHandle() ) {}
	inline spSceneBone & spSceneBone::operator= ( const spSceneBone &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSceneBone spSceneBone::SafeCast( spObject other ) { spSceneBone ret; if( other.NonNull() && other.IsA("ISceneBone") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSceneBone* spSceneBone::operator->() const { return this; }
	inline spSceneBone::spSceneBone( const _NilStruct & ) : spSceneNode( nullptr , nullptr ) {}

	inline rid spSceneBone::GetParentBone(  ) const
	{
		return this->_GetAPI()->fpSceneBone_GetParentBone( this->_GetHandle() );
	}

	inline void spSceneBone::CollectAllChildBones( const spRidArray & child_bones ) const
	{
		this->_GetAPI()->fpSceneBone_CollectAllChildBones( this->_GetHandle() , hIntf(child_bones) );
	}

	inline rid spSceneBone::GetBoneId(  ) const
	{
		return this->_GetAPI()->fpSceneBone_GetBoneId( this->_GetHandle() );
	}

	/// Implementations of spSceneBoneTable methods
	inline spSceneBoneTable::spSceneBoneTable() : spTable( nullptr , nullptr ) {}
	inline spSceneBoneTable::spSceneBoneTable( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spTable( _sg , _intfptr ) {}
	inline spSceneBoneTable::spSceneBoneTable( const spSceneBoneTable &p ) : spTable( p._GetAPI() , p._GetHandle() ) {}
	inline spSceneBoneTable & spSceneBoneTable::operator= ( const spSceneBoneTable &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSceneBoneTable spSceneBoneTable::SafeCast( spObject other ) { spSceneBoneTable ret; if( other.NonNull() && other.IsA("ISceneBoneTable") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSceneBoneTable* spSceneBoneTable::operator->() const { return this; }
	inline spSceneBoneTable::spSceneBoneTable( const _NilStruct & ) : spTable( nullptr , nullptr ) {}

	inline rid spSceneBoneTable::AddBone( const spSceneBone & bone ) const
	{
		return this->_GetAPI()->fpSceneBoneTable_AddBone( this->_GetHandle() , hIntf(bone) );
	}

	inline Simplygon::spSceneBone spSceneBoneTable::FindBone( const char * name ) const
	{
		spSceneBone retobj = spSceneBone( this->_GetAPI() , this->_GetAPI()->fpSceneBoneTable_FindBone( this->_GetHandle() , name ));
		return retobj;
	}

	inline rid spSceneBoneTable::FindBoneId( const char * name ) const
	{
		return this->_GetAPI()->fpSceneBoneTable_FindBoneId( this->_GetHandle() , name );
	}

	inline Simplygon::spSceneBone spSceneBoneTable::GetBone( rid id ) const
	{
		spSceneBone retobj = spSceneBone( this->_GetAPI() , this->_GetAPI()->fpSceneBoneTable_GetBone( this->_GetHandle() , id ));
		return retobj;
	}

	inline void spSceneBoneTable::RemoveBone( rid id ) const
	{
		this->_GetAPI()->fpSceneBoneTable_RemoveBone( this->_GetHandle() , id );
	}

	inline unsigned int spSceneBoneTable::GetBonesCount(  ) const
	{
		return this->_GetAPI()->fpSceneBoneTable_GetBonesCount( this->_GetHandle() );
	}

	/// Implementations of spScenePlane methods
	inline spScenePlane::spScenePlane() : spSceneNode( nullptr , nullptr ) {}
	inline spScenePlane::spScenePlane( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSceneNode( _sg , _intfptr ) {}
	inline spScenePlane::spScenePlane( const spScenePlane &p ) : spSceneNode( p._GetAPI() , p._GetHandle() ) {}
	inline spScenePlane & spScenePlane::operator= ( const spScenePlane &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spScenePlane spScenePlane::SafeCast( spObject other ) { spScenePlane ret; if( other.NonNull() && other.IsA("IScenePlane") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spScenePlane* spScenePlane::operator->() const { return this; }
	inline spScenePlane::spScenePlane( const _NilStruct & ) : spSceneNode( nullptr , nullptr ) {}

	inline spRealData spScenePlane::GetPosition(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpScenePlane_GetPosition( this->_GetHandle() ));
	}

	inline void spScenePlane::SetPosition( const real *vec ) const
	{
		this->_GetAPI()->fpScenePlane_SetPosition( this->_GetHandle() , vec );
	}

	inline spRealData spScenePlane::GetNormal(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpScenePlane_GetNormal( this->_GetHandle() ));
	}

	inline void spScenePlane::SetNormal( const real *vec ) const
	{
		this->_GetAPI()->fpScenePlane_SetNormal( this->_GetHandle() , vec );
	}

	/// Implementations of spSceneCamera methods
	inline spSceneCamera::spSceneCamera() : spSceneNode( nullptr , nullptr ) {}
	inline spSceneCamera::spSceneCamera( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSceneNode( _sg , _intfptr ) {}
	inline spSceneCamera::spSceneCamera( const spSceneCamera &p ) : spSceneNode( p._GetAPI() , p._GetHandle() ) {}
	inline spSceneCamera & spSceneCamera::operator= ( const spSceneCamera &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSceneCamera spSceneCamera::SafeCast( spObject other ) { spSceneCamera ret; if( other.NonNull() && other.IsA("ISceneCamera") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSceneCamera* spSceneCamera::operator->() const { return this; }
	inline spSceneCamera::spSceneCamera( const _NilStruct & ) : spSceneNode( nullptr , nullptr ) {}

	inline void spSceneCamera::SetCameraType( Simplygon::ECameraType value ) const
	{
		this->_GetAPI()->fpSceneCamera_SetCameraType( this->_GetHandle() , (ECameraType)value );
	}

	inline Simplygon::ECameraType spSceneCamera::GetCameraType(  ) const
	{
		return this->_GetAPI()->fpSceneCamera_GetCameraType( this->_GetHandle() );
	}

	inline Simplygon::spRealArray spSceneCamera::GetCameraPositions(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpSceneCamera_GetCameraPositions( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spRealArray spSceneCamera::GetTargetPositions(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpSceneCamera_GetTargetPositions( this->_GetHandle() ));
		return retobj;
	}

	inline void spSceneCamera::SetUseNormalizedCoordinates( bool value ) const
	{
		this->_GetAPI()->fpSceneCamera_SetUseNormalizedCoordinates( this->_GetHandle() , value );
	}

	inline bool spSceneCamera::GetUseNormalizedCoordinates(  ) const
	{
		return this->_GetAPI()->fpSceneCamera_GetUseNormalizedCoordinates( this->_GetHandle() );
	}

	inline void spSceneCamera::SetOrthographicCameraPixelSize( real value ) const
	{
		this->_GetAPI()->fpSceneCamera_SetOrthographicCameraPixelSize( this->_GetHandle() , value );
	}

	inline real spSceneCamera::GetOrthographicCameraPixelSize(  ) const
	{
		return this->_GetAPI()->fpSceneCamera_GetOrthographicCameraPixelSize( this->_GetHandle() );
	}

	inline void spSceneCamera::SetFieldOfView( real value ) const
	{
		this->_GetAPI()->fpSceneCamera_SetFieldOfView( this->_GetHandle() , value );
	}

	inline real spSceneCamera::GetFieldOfView(  ) const
	{
		return this->_GetAPI()->fpSceneCamera_GetFieldOfView( this->_GetHandle() );
	}

	inline void spSceneCamera::SetPixelFieldOfView( real value ) const
	{
		this->_GetAPI()->fpSceneCamera_SetPixelFieldOfView( this->_GetHandle() , value );
	}

	inline real spSceneCamera::GetPixelFieldOfView(  ) const
	{
		return this->_GetAPI()->fpSceneCamera_GetPixelFieldOfView( this->_GetHandle() );
	}

	inline unsigned int spSceneCamera::GetNumberOfViews(  ) const
	{
		return this->_GetAPI()->fpSceneCamera_GetNumberOfViews( this->_GetHandle() );
	}

	inline bool spSceneCamera::ValidateCamera(  ) const
	{
		return this->_GetAPI()->fpSceneCamera_ValidateCamera( this->_GetHandle() );
	}

	inline void spSceneCamera::SetCustomSphereCameraPath( int fidelity , real pitch_angle , real yaw_angle , real coverage_angle ) const
	{
		this->_GetAPI()->fpSceneCamera_SetCustomSphereCameraPath( this->_GetHandle() , fidelity , pitch_angle , yaw_angle , coverage_angle );
	}

	/// Implementations of spSceneExporter methods
	inline spSceneExporter::spSceneExporter() : spObject( nullptr , nullptr ) {}
	inline spSceneExporter::spSceneExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spSceneExporter::spSceneExporter( const spSceneExporter &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spSceneExporter & spSceneExporter::operator= ( const spSceneExporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSceneExporter spSceneExporter::SafeCast( spObject other ) { spSceneExporter ret; if( other.NonNull() && other.IsA("ISceneExporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSceneExporter* spSceneExporter::operator->() const { return this; }
	inline spSceneExporter::spSceneExporter( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spSceneExporter::SetExportFilePath( const char * value ) const
	{
		this->_GetAPI()->fpSceneExporter_SetExportFilePath( this->_GetHandle() , value );
	}

	inline spString spSceneExporter::GetExportFilePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpSceneExporter_GetExportFilePath( this->_GetHandle() ));
	}

	inline void spSceneExporter::SetPrimaryTexCoordName( const char * value ) const
	{
		this->_GetAPI()->fpSceneExporter_SetPrimaryTexCoordName( this->_GetHandle() , value );
	}

	inline spString spSceneExporter::GetPrimaryTexCoordName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpSceneExporter_GetPrimaryTexCoordName( this->_GetHandle() ));
	}

	inline void spSceneExporter::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpSceneExporter_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline bool spSceneExporter::RunExport(  ) const
	{
		return this->_GetAPI()->fpSceneExporter_RunExport( this->_GetHandle() );
	}

	inline void spSceneExporter::Clear(  ) const
	{
		this->_GetAPI()->fpSceneExporter_Clear( this->_GetHandle() );
	}

	inline void spSceneExporter::SetEmbedReferences( bool value ) const
	{
		this->_GetAPI()->fpSceneExporter_SetEmbedReferences( this->_GetHandle() , value );
	}

	inline bool spSceneExporter::GetEmbedReferences(  ) const
	{
		return this->_GetAPI()->fpSceneExporter_GetEmbedReferences( this->_GetHandle() );
	}

	inline void spSceneExporter::SetExportCascadedScenes( bool value ) const
	{
		this->_GetAPI()->fpSceneExporter_SetExportCascadedScenes( this->_GetHandle() , value );
	}

	inline bool spSceneExporter::GetExportCascadedScenes(  ) const
	{
		return this->_GetAPI()->fpSceneExporter_GetExportCascadedScenes( this->_GetHandle() );
	}

	/// Implementations of spSceneImporter methods
	inline spSceneImporter::spSceneImporter() : spObject( nullptr , nullptr ) {}
	inline spSceneImporter::spSceneImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spSceneImporter::spSceneImporter( const spSceneImporter &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spSceneImporter & spSceneImporter::operator= ( const spSceneImporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSceneImporter spSceneImporter::SafeCast( spObject other ) { spSceneImporter ret; if( other.NonNull() && other.IsA("ISceneImporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSceneImporter* spSceneImporter::operator->() const { return this; }
	inline spSceneImporter::spSceneImporter( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spSceneImporter::SetImportFilePath( const char * value ) const
	{
		this->_GetAPI()->fpSceneImporter_SetImportFilePath( this->_GetHandle() , value );
	}

	inline spString spSceneImporter::GetImportFilePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpSceneImporter_GetImportFilePath( this->_GetHandle() ));
	}

	inline Simplygon::spScene spSceneImporter::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpSceneImporter_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline bool spSceneImporter::RunImport(  ) const
	{
		return this->_GetAPI()->fpSceneImporter_RunImport( this->_GetHandle() );
	}

	inline void spSceneImporter::Clear(  ) const
	{
		this->_GetAPI()->fpSceneImporter_Clear( this->_GetHandle() );
	}

	/// Implementations of spSelectionSet methods
	inline spSelectionSet::spSelectionSet() : spObject( nullptr , nullptr ) {}
	inline spSelectionSet::spSelectionSet( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spSelectionSet::spSelectionSet( const spSelectionSet &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spSelectionSet & spSelectionSet::operator= ( const spSelectionSet &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSelectionSet spSelectionSet::SafeCast( spObject other ) { spSelectionSet ret; if( other.NonNull() && other.IsA("ISelectionSet") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSelectionSet* spSelectionSet::operator->() const { return this; }
	inline spSelectionSet::spSelectionSet( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spSelectionSet::AddItem( const char * NodeId ) const
	{
		this->_GetAPI()->fpSelectionSet_AddItem( this->_GetHandle() , NodeId );
	}

	inline void spSelectionSet::RemoveItem( const char * NodeId ) const
	{
		this->_GetAPI()->fpSelectionSet_RemoveItem( this->_GetHandle() , NodeId );
	}

	inline void spSelectionSet::AddHierarchy( const spSceneNode & node ) const
	{
		this->_GetAPI()->fpSelectionSet_AddHierarchy( this->_GetHandle() , hIntf(node) );
	}

	inline void spSelectionSet::RemoveHierarchy( const spSceneNode & node ) const
	{
		this->_GetAPI()->fpSelectionSet_RemoveHierarchy( this->_GetHandle() , hIntf(node) );
	}

	inline void spSelectionSet::Clear(  ) const
	{
		this->_GetAPI()->fpSelectionSet_Clear( this->_GetHandle() );
	}

	inline unsigned int spSelectionSet::GetItemCount(  ) const
	{
		return this->_GetAPI()->fpSelectionSet_GetItemCount( this->_GetHandle() );
	}

	inline spString spSelectionSet::GetItem( unsigned int index ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpSelectionSet_GetItem( this->_GetHandle() , index ));
	}

	/// Implementations of spSelectionSetTable methods
	inline spSelectionSetTable::spSelectionSetTable() : spTable( nullptr , nullptr ) {}
	inline spSelectionSetTable::spSelectionSetTable( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spTable( _sg , _intfptr ) {}
	inline spSelectionSetTable::spSelectionSetTable( const spSelectionSetTable &p ) : spTable( p._GetAPI() , p._GetHandle() ) {}
	inline spSelectionSetTable & spSelectionSetTable::operator= ( const spSelectionSetTable &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSelectionSetTable spSelectionSetTable::SafeCast( spObject other ) { spSelectionSetTable ret; if( other.NonNull() && other.IsA("ISelectionSetTable") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSelectionSetTable* spSelectionSetTable::operator->() const { return this; }
	inline spSelectionSetTable::spSelectionSetTable( const _NilStruct & ) : spTable( nullptr , nullptr ) {}

	inline rid spSelectionSetTable::AddSelectionSet( const spSelectionSet & selectionSet ) const
	{
		return this->_GetAPI()->fpSelectionSetTable_AddSelectionSet( this->_GetHandle() , hIntf(selectionSet) );
	}

	inline Simplygon::spSelectionSet spSelectionSetTable::FindSelectionSet( const char * name ) const
	{
		spSelectionSet retobj = spSelectionSet( this->_GetAPI() , this->_GetAPI()->fpSelectionSetTable_FindSelectionSet( this->_GetHandle() , name ));
		return retobj;
	}

	inline rid spSelectionSetTable::FindSelectionSetId( const char * name ) const
	{
		return this->_GetAPI()->fpSelectionSetTable_FindSelectionSetId( this->_GetHandle() , name );
	}

	inline Simplygon::spSelectionSet spSelectionSetTable::GetSelectionSet( rid id ) const
	{
		spSelectionSet retobj = spSelectionSet( this->_GetAPI() , this->_GetAPI()->fpSelectionSetTable_GetSelectionSet( this->_GetHandle() , id ));
		return retobj;
	}

	inline void spSelectionSetTable::RemoveSelectionSet( rid id ) const
	{
		this->_GetAPI()->fpSelectionSetTable_RemoveSelectionSet( this->_GetHandle() , id );
	}

	inline void spSelectionSetTable::RemoveNamedSelectionSet( const char * name ) const
	{
		this->_GetAPI()->fpSelectionSetTable_RemoveNamedSelectionSet( this->_GetHandle() , name );
	}

	inline unsigned int spSelectionSetTable::GetSelectionSetCount(  ) const
	{
		return this->_GetAPI()->fpSelectionSetTable_GetSelectionSetCount( this->_GetHandle() );
	}

	/// Implementations of spTexture methods
	inline spTexture::spTexture() : spObject( nullptr , nullptr ) {}
	inline spTexture::spTexture( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spTexture::spTexture( const spTexture &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spTexture & spTexture::operator= ( const spTexture &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spTexture spTexture::SafeCast( spObject other ) { spTexture ret; if( other.NonNull() && other.IsA("ITexture") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spTexture* spTexture::operator->() const { return this; }
	inline spTexture::spTexture( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spTexture::SetFilePath( const char * value ) const
	{
		this->_GetAPI()->fpTexture_SetFilePath( this->_GetHandle() , value );
	}

	inline spString spTexture::GetFilePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpTexture_GetFilePath( this->_GetHandle() ));
	}

	inline void spTexture::SetImageData( const spImageData & value ) const
	{
		this->_GetAPI()->fpTexture_SetImageData( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spImageData spTexture::GetImageData(  ) const
	{
		spImageData retobj = spImageData( this->_GetAPI() , this->_GetAPI()->fpTexture_GetImageData( this->_GetHandle() ));
		return retobj;
	}

	inline void spTexture::ChangeTexturePrefixPath( const char * current_path_prefix , const char * new_path_prefix ) const
	{
		this->_GetAPI()->fpTexture_ChangeTexturePrefixPath( this->_GetHandle() , current_path_prefix , new_path_prefix );
	}

	inline bool spTexture::ExportImageData(  ) const
	{
		return this->_GetAPI()->fpTexture_ExportImageData( this->_GetHandle() );
	}

	/// Implementations of spTextureTable methods
	inline spTextureTable::spTextureTable() : spTable( nullptr , nullptr ) {}
	inline spTextureTable::spTextureTable( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spTable( _sg , _intfptr ) {}
	inline spTextureTable::spTextureTable( const spTextureTable &p ) : spTable( p._GetAPI() , p._GetHandle() ) {}
	inline spTextureTable & spTextureTable::operator= ( const spTextureTable &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spTextureTable spTextureTable::SafeCast( spObject other ) { spTextureTable ret; if( other.NonNull() && other.IsA("ITextureTable") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spTextureTable* spTextureTable::operator->() const { return this; }
	inline spTextureTable::spTextureTable( const _NilStruct & ) : spTable( nullptr , nullptr ) {}

	inline rid spTextureTable::AddTexture( const spTexture & texture ) const
	{
		return this->_GetAPI()->fpTextureTable_AddTexture( this->_GetHandle() , hIntf(texture) );
	}

	inline Simplygon::spTexture spTextureTable::FindTexture( const char * name ) const
	{
		spTexture retobj = spTexture( this->_GetAPI() , this->_GetAPI()->fpTextureTable_FindTexture( this->_GetHandle() , name ));
		return retobj;
	}

	inline Simplygon::spTexture spTextureTable::FindTextureUsingPath( const char * path ) const
	{
		spTexture retobj = spTexture( this->_GetAPI() , this->_GetAPI()->fpTextureTable_FindTextureUsingPath( this->_GetHandle() , path ));
		return retobj;
	}

	inline rid spTextureTable::FindTextureId( const char * name ) const
	{
		return this->_GetAPI()->fpTextureTable_FindTextureId( this->_GetHandle() , name );
	}

	inline void spTextureTable::SetTexture( rid id , const spTexture & texture ) const
	{
		this->_GetAPI()->fpTextureTable_SetTexture( this->_GetHandle() , id , hIntf(texture) );
	}

	inline Simplygon::spTexture spTextureTable::GetTexture( rid id ) const
	{
		spTexture retobj = spTexture( this->_GetAPI() , this->_GetAPI()->fpTextureTable_GetTexture( this->_GetHandle() , id ));
		return retobj;
	}

	inline void spTextureTable::RemoveTexture( rid id ) const
	{
		this->_GetAPI()->fpTextureTable_RemoveTexture( this->_GetHandle() , id );
	}

	inline unsigned int spTextureTable::GetTexturesCount(  ) const
	{
		return this->_GetAPI()->fpTextureTable_GetTexturesCount( this->_GetHandle() );
	}

	inline void spTextureTable::ChangeTexturePrefixPath( const char * current_path_prefix , const char * new_path_prefix ) const
	{
		this->_GetAPI()->fpTextureTable_ChangeTexturePrefixPath( this->_GetHandle() , current_path_prefix , new_path_prefix );
	}

	/// Implementations of spGeometryCullingSettings methods
	inline spGeometryCullingSettings::spGeometryCullingSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spGeometryCullingSettings::spGeometryCullingSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spGeometryCullingSettings::spGeometryCullingSettings( const spGeometryCullingSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spGeometryCullingSettings & spGeometryCullingSettings::operator= ( const spGeometryCullingSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGeometryCullingSettings spGeometryCullingSettings::SafeCast( spObject other ) { spGeometryCullingSettings ret; if( other.NonNull() && other.IsA("IGeometryCullingSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGeometryCullingSettings* spGeometryCullingSettings::operator->() const { return this; }
	inline spGeometryCullingSettings::spGeometryCullingSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spGeometryCullingSettings::SetUseClippingPlanes( bool value ) const
	{
		this->_GetAPI()->fpGeometryCullingSettings_SetUseClippingPlanes( this->_GetHandle() , value );
	}

	inline bool spGeometryCullingSettings::GetUseClippingPlanes(  ) const
	{
		return this->_GetAPI()->fpGeometryCullingSettings_GetUseClippingPlanes( this->_GetHandle() );
	}

	inline void spGeometryCullingSettings::SetUseClippingGeometry( bool value ) const
	{
		this->_GetAPI()->fpGeometryCullingSettings_SetUseClippingGeometry( this->_GetHandle() , value );
	}

	inline bool spGeometryCullingSettings::GetUseClippingGeometry(  ) const
	{
		return this->_GetAPI()->fpGeometryCullingSettings_GetUseClippingGeometry( this->_GetHandle() );
	}

	inline void spGeometryCullingSettings::SetClippingPlaneSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpGeometryCullingSettings_SetClippingPlaneSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spGeometryCullingSettings::GetClippingPlaneSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpGeometryCullingSettings_GetClippingPlaneSelectionSetID( this->_GetHandle() );
	}

	inline void spGeometryCullingSettings::SetClippingPlaneSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpGeometryCullingSettings_SetClippingPlaneSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spGeometryCullingSettings::GetClippingPlaneSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpGeometryCullingSettings_GetClippingPlaneSelectionSetName( this->_GetHandle() ));
	}

	inline void spGeometryCullingSettings::SetClippingGeometrySelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpGeometryCullingSettings_SetClippingGeometrySelectionSetID( this->_GetHandle() , value );
	}

	inline rid spGeometryCullingSettings::GetClippingGeometrySelectionSetID(  ) const
	{
		return this->_GetAPI()->fpGeometryCullingSettings_GetClippingGeometrySelectionSetID( this->_GetHandle() );
	}

	inline void spGeometryCullingSettings::SetClippingGeometrySelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpGeometryCullingSettings_SetClippingGeometrySelectionSetName( this->_GetHandle() , value );
	}

	inline spString spGeometryCullingSettings::GetClippingGeometrySelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpGeometryCullingSettings_GetClippingGeometrySelectionSetName( this->_GetHandle() ));
	}

	/// Implementations of spImageDataImporter methods
	inline spImageDataImporter::spImageDataImporter() : spObject( nullptr , nullptr ) {}
	inline spImageDataImporter::spImageDataImporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spImageDataImporter::spImageDataImporter( const spImageDataImporter &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spImageDataImporter & spImageDataImporter::operator= ( const spImageDataImporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spImageDataImporter spImageDataImporter::SafeCast( spObject other ) { spImageDataImporter ret; if( other.NonNull() && other.IsA("IImageDataImporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spImageDataImporter* spImageDataImporter::operator->() const { return this; }
	inline spImageDataImporter::spImageDataImporter( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spImageDataImporter::SetImportFilePath( const char * value ) const
	{
		this->_GetAPI()->fpImageDataImporter_SetImportFilePath( this->_GetHandle() , value );
	}

	inline spString spImageDataImporter::GetImportFilePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpImageDataImporter_GetImportFilePath( this->_GetHandle() ));
	}

	inline void spImageDataImporter::SetExtensionOverride( const char * value ) const
	{
		this->_GetAPI()->fpImageDataImporter_SetExtensionOverride( this->_GetHandle() , value );
	}

	inline spString spImageDataImporter::GetExtensionOverride(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpImageDataImporter_GetExtensionOverride( this->_GetHandle() ));
	}

	inline Simplygon::spImageData spImageDataImporter::GetImage(  ) const
	{
		spImageData retobj = spImageData( this->_GetAPI() , this->_GetAPI()->fpImageDataImporter_GetImage( this->_GetHandle() ));
		return retobj;
	}

	inline void spImageDataImporter::SetCapToPowerOfTwo( bool value ) const
	{
		this->_GetAPI()->fpImageDataImporter_SetCapToPowerOfTwo( this->_GetHandle() , value );
	}

	inline bool spImageDataImporter::GetCapToPowerOfTwo(  ) const
	{
		return this->_GetAPI()->fpImageDataImporter_GetCapToPowerOfTwo( this->_GetHandle() );
	}

	inline void spImageDataImporter::SetMaxWidth( unsigned int value ) const
	{
		this->_GetAPI()->fpImageDataImporter_SetMaxWidth( this->_GetHandle() , value );
	}

	inline unsigned int spImageDataImporter::GetMaxWidth(  ) const
	{
		return this->_GetAPI()->fpImageDataImporter_GetMaxWidth( this->_GetHandle() );
	}

	inline void spImageDataImporter::SetMaxHeight( unsigned int value ) const
	{
		this->_GetAPI()->fpImageDataImporter_SetMaxHeight( this->_GetHandle() , value );
	}

	inline unsigned int spImageDataImporter::GetMaxHeight(  ) const
	{
		return this->_GetAPI()->fpImageDataImporter_GetMaxHeight( this->_GetHandle() );
	}

	inline void spImageDataImporter::SetImportOnlyHeader( bool value ) const
	{
		this->_GetAPI()->fpImageDataImporter_SetImportOnlyHeader( this->_GetHandle() , value );
	}

	inline bool spImageDataImporter::GetImportOnlyHeader(  ) const
	{
		return this->_GetAPI()->fpImageDataImporter_GetImportOnlyHeader( this->_GetHandle() );
	}

	inline unsigned int spImageDataImporter::GetNumberOfChannels(  ) const
	{
		return this->_GetAPI()->fpImageDataImporter_GetNumberOfChannels( this->_GetHandle() );
	}

	inline unsigned int spImageDataImporter::GetBitsPerPixel(  ) const
	{
		return this->_GetAPI()->fpImageDataImporter_GetBitsPerPixel( this->_GetHandle() );
	}

	inline Simplygon::EImageInputFormat spImageDataImporter::GetImageFileFormat(  ) const
	{
		return this->_GetAPI()->fpImageDataImporter_GetImageFileFormat( this->_GetHandle() );
	}

	inline bool spImageDataImporter::RunImport(  ) const
	{
		return this->_GetAPI()->fpImageDataImporter_RunImport( this->_GetHandle() );
	}

	inline void spImageDataImporter::Clear(  ) const
	{
		this->_GetAPI()->fpImageDataImporter_Clear( this->_GetHandle() );
	}

	/// Implementations of spMappingImageMeshData methods
	inline spMappingImageMeshData::spMappingImageMeshData() : spObject( nullptr , nullptr ) {}
	inline spMappingImageMeshData::spMappingImageMeshData( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spMappingImageMeshData::spMappingImageMeshData( const spMappingImageMeshData &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spMappingImageMeshData & spMappingImageMeshData::operator= ( const spMappingImageMeshData &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spMappingImageMeshData spMappingImageMeshData::SafeCast( spObject other ) { spMappingImageMeshData ret; if( other.NonNull() && other.IsA("IMappingImageMeshData") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spMappingImageMeshData* spMappingImageMeshData::operator->() const { return this; }
	inline spMappingImageMeshData::spMappingImageMeshData( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline unsigned int spMappingImageMeshData::GetMappedGeometriesCount(  ) const
	{
		return this->_GetAPI()->fpMappingImageMeshData_GetMappedGeometriesCount( this->_GetHandle() );
	}

	inline rid spMappingImageMeshData::GetStartTriangleIdOfGeometry( rid GeometryIndex ) const
	{
		return this->_GetAPI()->fpMappingImageMeshData_GetStartTriangleIdOfGeometry( this->_GetHandle() , GeometryIndex );
	}

	inline spString spMappingImageMeshData::GetScenePathOfGeometry( rid GeometryIndex ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpMappingImageMeshData_GetScenePathOfGeometry( this->_GetHandle() , GeometryIndex ));
	}

	inline spString spMappingImageMeshData::GetNodeGuidOfGeometry( rid GeometryIndex ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpMappingImageMeshData_GetNodeGuidOfGeometry( this->_GetHandle() , GeometryIndex ));
	}

	inline void spMappingImageMeshData::Clear(  ) const
	{
		this->_GetAPI()->fpMappingImageMeshData_Clear( this->_GetHandle() );
	}

	/// Implementations of spShadingNode methods
	inline spShadingNode::spShadingNode() : spObject( nullptr , nullptr ) {}
	inline spShadingNode::spShadingNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spShadingNode::spShadingNode( const spShadingNode &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingNode & spShadingNode::operator= ( const spShadingNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingNode spShadingNode::SafeCast( spObject other ) { spShadingNode ret; if( other.NonNull() && other.IsA("IShadingNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingNode* spShadingNode::operator->() const { return this; }
	inline spShadingNode::spShadingNode( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline unsigned int spShadingNode::GetParameterCount(  ) const
	{
		return this->_GetAPI()->fpShadingNode_GetParameterCount( this->_GetHandle() );
	}

	inline spString spShadingNode::GetParameterName( rid parameter_id ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShadingNode_GetParameterName( this->_GetHandle() , parameter_id ));
	}

	inline void spShadingNode::SetDefaultParameter( rid parameter_id , real r , real g , real b , real a ) const
	{
		this->_GetAPI()->fpShadingNode_SetDefaultParameter( this->_GetHandle() , parameter_id , r , g , b , a );
	}

	inline real spShadingNode::GetDefaultParameterRed( rid parameter_id ) const
	{
		return this->_GetAPI()->fpShadingNode_GetDefaultParameterRed( this->_GetHandle() , parameter_id );
	}

	inline real spShadingNode::GetDefaultParameterGreen( rid parameter_id ) const
	{
		return this->_GetAPI()->fpShadingNode_GetDefaultParameterGreen( this->_GetHandle() , parameter_id );
	}

	inline real spShadingNode::GetDefaultParameterBlue( rid parameter_id ) const
	{
		return this->_GetAPI()->fpShadingNode_GetDefaultParameterBlue( this->_GetHandle() , parameter_id );
	}

	inline real spShadingNode::GetDefaultParameterAlpha( rid parameter_id ) const
	{
		return this->_GetAPI()->fpShadingNode_GetDefaultParameterAlpha( this->_GetHandle() , parameter_id );
	}

	/// Implementations of spShadingFilterNode methods
	inline spShadingFilterNode::spShadingFilterNode() : spShadingNode( nullptr , nullptr ) {}
	inline spShadingFilterNode::spShadingFilterNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingNode( _sg , _intfptr ) {}
	inline spShadingFilterNode::spShadingFilterNode( const spShadingFilterNode &p ) : spShadingNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingFilterNode & spShadingFilterNode::operator= ( const spShadingFilterNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingFilterNode spShadingFilterNode::SafeCast( spObject other ) { spShadingFilterNode ret; if( other.NonNull() && other.IsA("IShadingFilterNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingFilterNode* spShadingFilterNode::operator->() const { return this; }
	inline spShadingFilterNode::spShadingFilterNode( const _NilStruct & ) : spShadingNode( nullptr , nullptr ) {}

	inline bool spShadingFilterNode::SetInput( rid input_id , const spShadingNode & input_node ) const
	{
		return this->_GetAPI()->fpShadingFilterNode_SetInput( this->_GetHandle() , input_id , hIntf(input_node) );
	}

	inline Simplygon::spShadingNode spShadingFilterNode::GetInput( rid input_id ) const
	{
		spShadingNode retobj = spShadingNode( this->_GetAPI() , this->_GetAPI()->fpShadingFilterNode_GetInput( this->_GetHandle() , input_id ));
		return retobj;
	}

	inline bool spShadingFilterNode::GetParameterIsInputable( rid param_id ) const
	{
		return this->_GetAPI()->fpShadingFilterNode_GetParameterIsInputable( this->_GetHandle() , param_id );
	}

	/// Implementations of spShadingTextureNode methods
	inline spShadingTextureNode::spShadingTextureNode() : spShadingNode( nullptr , nullptr ) {}
	inline spShadingTextureNode::spShadingTextureNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingNode( _sg , _intfptr ) {}
	inline spShadingTextureNode::spShadingTextureNode( const spShadingTextureNode &p ) : spShadingNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingTextureNode & spShadingTextureNode::operator= ( const spShadingTextureNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingTextureNode spShadingTextureNode::SafeCast( spObject other ) { spShadingTextureNode ret; if( other.NonNull() && other.IsA("IShadingTextureNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingTextureNode* spShadingTextureNode::operator->() const { return this; }
	inline spShadingTextureNode::spShadingTextureNode( const _NilStruct & ) : spShadingNode( nullptr , nullptr ) {}

	inline void spShadingTextureNode::SetTextureName( const char * value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetTextureName( this->_GetHandle() , value );
	}

	inline spString spShadingTextureNode::GetTextureName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShadingTextureNode_GetTextureName( this->_GetHandle() ));
	}

	inline void spShadingTextureNode::SetTexCoordName( const char * value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetTexCoordName( this->_GetHandle() , value );
	}

	inline spString spShadingTextureNode::GetTexCoordName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShadingTextureNode_GetTexCoordName( this->_GetHandle() ));
	}

	inline void spShadingTextureNode::SetTexCoordLevel( int value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetTexCoordLevel( this->_GetHandle() , value );
	}

	inline int spShadingTextureNode::GetTexCoordLevel(  ) const
	{
		return this->_GetAPI()->fpShadingTextureNode_GetTexCoordLevel( this->_GetHandle() );
	}

	inline void spShadingTextureNode::SetUseSRGB( bool value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetUseSRGB( this->_GetHandle() , value );
	}

	inline bool spShadingTextureNode::GetUseSRGB(  ) const
	{
		return this->_GetAPI()->fpShadingTextureNode_GetUseSRGB( this->_GetHandle() );
	}

	inline void spShadingTextureNode::SetTileU( real value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetTileU( this->_GetHandle() , value );
	}

	inline real spShadingTextureNode::GetTileU(  ) const
	{
		return this->_GetAPI()->fpShadingTextureNode_GetTileU( this->_GetHandle() );
	}

	inline void spShadingTextureNode::SetTileV( real value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetTileV( this->_GetHandle() , value );
	}

	inline real spShadingTextureNode::GetTileV(  ) const
	{
		return this->_GetAPI()->fpShadingTextureNode_GetTileV( this->_GetHandle() );
	}

	inline void spShadingTextureNode::SetOffsetU( real value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetOffsetU( this->_GetHandle() , value );
	}

	inline real spShadingTextureNode::GetOffsetU(  ) const
	{
		return this->_GetAPI()->fpShadingTextureNode_GetOffsetU( this->_GetHandle() );
	}

	inline void spShadingTextureNode::SetOffsetV( real value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetOffsetV( this->_GetHandle() , value );
	}

	inline real spShadingTextureNode::GetOffsetV(  ) const
	{
		return this->_GetAPI()->fpShadingTextureNode_GetOffsetV( this->_GetHandle() );
	}

	inline void spShadingTextureNode::SetTextureWrapMode( Simplygon::ETextureWrapMode value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetTextureWrapMode( this->_GetHandle() , (ETextureWrapMode)value );
	}

	inline Simplygon::ETextureWrapMode spShadingTextureNode::GetTextureWrapMode(  ) const
	{
		return this->_GetAPI()->fpShadingTextureNode_GetTextureWrapMode( this->_GetHandle() );
	}

	inline void spShadingTextureNode::SetTextureWrapModeU( Simplygon::ETextureWrapMode value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetTextureWrapModeU( this->_GetHandle() , (ETextureWrapMode)value );
	}

	inline Simplygon::ETextureWrapMode spShadingTextureNode::GetTextureWrapModeU(  ) const
	{
		return this->_GetAPI()->fpShadingTextureNode_GetTextureWrapModeU( this->_GetHandle() );
	}

	inline void spShadingTextureNode::SetTextureWrapModeV( Simplygon::ETextureWrapMode value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetTextureWrapModeV( this->_GetHandle() , (ETextureWrapMode)value );
	}

	inline Simplygon::ETextureWrapMode spShadingTextureNode::GetTextureWrapModeV(  ) const
	{
		return this->_GetAPI()->fpShadingTextureNode_GetTextureWrapModeV( this->_GetHandle() );
	}

	inline void spShadingTextureNode::SetRotation( real value ) const
	{
		this->_GetAPI()->fpShadingTextureNode_SetRotation( this->_GetHandle() , value );
	}

	inline real spShadingTextureNode::GetRotation(  ) const
	{
		return this->_GetAPI()->fpShadingTextureNode_GetRotation( this->_GetHandle() );
	}

	/// Implementations of spShadingSwizzlingNode methods
	inline spShadingSwizzlingNode::spShadingSwizzlingNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingSwizzlingNode::spShadingSwizzlingNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingSwizzlingNode::spShadingSwizzlingNode( const spShadingSwizzlingNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingSwizzlingNode & spShadingSwizzlingNode::operator= ( const spShadingSwizzlingNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingSwizzlingNode spShadingSwizzlingNode::SafeCast( spObject other ) { spShadingSwizzlingNode ret; if( other.NonNull() && other.IsA("IShadingSwizzlingNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingSwizzlingNode* spShadingSwizzlingNode::operator->() const { return this; }
	inline spShadingSwizzlingNode::spShadingSwizzlingNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	inline void spShadingSwizzlingNode::SetRedComponent( unsigned int value ) const
	{
		this->_GetAPI()->fpShadingSwizzlingNode_SetRedComponent( this->_GetHandle() , value );
	}

	inline unsigned int spShadingSwizzlingNode::GetRedComponent(  ) const
	{
		return this->_GetAPI()->fpShadingSwizzlingNode_GetRedComponent( this->_GetHandle() );
	}

	inline void spShadingSwizzlingNode::SetGreenComponent( unsigned int value ) const
	{
		this->_GetAPI()->fpShadingSwizzlingNode_SetGreenComponent( this->_GetHandle() , value );
	}

	inline unsigned int spShadingSwizzlingNode::GetGreenComponent(  ) const
	{
		return this->_GetAPI()->fpShadingSwizzlingNode_GetGreenComponent( this->_GetHandle() );
	}

	inline void spShadingSwizzlingNode::SetBlueComponent( unsigned int value ) const
	{
		this->_GetAPI()->fpShadingSwizzlingNode_SetBlueComponent( this->_GetHandle() , value );
	}

	inline unsigned int spShadingSwizzlingNode::GetBlueComponent(  ) const
	{
		return this->_GetAPI()->fpShadingSwizzlingNode_GetBlueComponent( this->_GetHandle() );
	}

	inline void spShadingSwizzlingNode::SetAlphaComponent( unsigned int value ) const
	{
		this->_GetAPI()->fpShadingSwizzlingNode_SetAlphaComponent( this->_GetHandle() , value );
	}

	inline unsigned int spShadingSwizzlingNode::GetAlphaComponent(  ) const
	{
		return this->_GetAPI()->fpShadingSwizzlingNode_GetAlphaComponent( this->_GetHandle() );
	}

	/// Implementations of spShadingColorNode methods
	inline spShadingColorNode::spShadingColorNode() : spShadingNode( nullptr , nullptr ) {}
	inline spShadingColorNode::spShadingColorNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingNode( _sg , _intfptr ) {}
	inline spShadingColorNode::spShadingColorNode( const spShadingColorNode &p ) : spShadingNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingColorNode & spShadingColorNode::operator= ( const spShadingColorNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingColorNode spShadingColorNode::SafeCast( spObject other ) { spShadingColorNode ret; if( other.NonNull() && other.IsA("IShadingColorNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingColorNode* spShadingColorNode::operator->() const { return this; }
	inline spShadingColorNode::spShadingColorNode( const _NilStruct & ) : spShadingNode( nullptr , nullptr ) {}

	inline void spShadingColorNode::SetColor( real r , real g , real b , real a ) const
	{
		this->_GetAPI()->fpShadingColorNode_SetColor( this->_GetHandle() , r , g , b , a );
	}

	/// Implementations of spShadingAddNode methods
	inline spShadingAddNode::spShadingAddNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingAddNode::spShadingAddNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingAddNode::spShadingAddNode( const spShadingAddNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingAddNode & spShadingAddNode::operator= ( const spShadingAddNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingAddNode spShadingAddNode::SafeCast( spObject other ) { spShadingAddNode ret; if( other.NonNull() && other.IsA("IShadingAddNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingAddNode* spShadingAddNode::operator->() const { return this; }
	inline spShadingAddNode::spShadingAddNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingSubtractNode methods
	inline spShadingSubtractNode::spShadingSubtractNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingSubtractNode::spShadingSubtractNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingSubtractNode::spShadingSubtractNode( const spShadingSubtractNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingSubtractNode & spShadingSubtractNode::operator= ( const spShadingSubtractNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingSubtractNode spShadingSubtractNode::SafeCast( spObject other ) { spShadingSubtractNode ret; if( other.NonNull() && other.IsA("IShadingSubtractNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingSubtractNode* spShadingSubtractNode::operator->() const { return this; }
	inline spShadingSubtractNode::spShadingSubtractNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingMultiplyNode methods
	inline spShadingMultiplyNode::spShadingMultiplyNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingMultiplyNode::spShadingMultiplyNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingMultiplyNode::spShadingMultiplyNode( const spShadingMultiplyNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingMultiplyNode & spShadingMultiplyNode::operator= ( const spShadingMultiplyNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingMultiplyNode spShadingMultiplyNode::SafeCast( spObject other ) { spShadingMultiplyNode ret; if( other.NonNull() && other.IsA("IShadingMultiplyNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingMultiplyNode* spShadingMultiplyNode::operator->() const { return this; }
	inline spShadingMultiplyNode::spShadingMultiplyNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingColorCorrectionNode methods
	inline spShadingColorCorrectionNode::spShadingColorCorrectionNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingColorCorrectionNode::spShadingColorCorrectionNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingColorCorrectionNode::spShadingColorCorrectionNode( const spShadingColorCorrectionNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingColorCorrectionNode & spShadingColorCorrectionNode::operator= ( const spShadingColorCorrectionNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingColorCorrectionNode spShadingColorCorrectionNode::SafeCast( spObject other ) { spShadingColorCorrectionNode ret; if( other.NonNull() && other.IsA("IShadingColorCorrectionNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingColorCorrectionNode* spShadingColorCorrectionNode::operator->() const { return this; }
	inline spShadingColorCorrectionNode::spShadingColorCorrectionNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingPowNode methods
	inline spShadingPowNode::spShadingPowNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingPowNode::spShadingPowNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingPowNode::spShadingPowNode( const spShadingPowNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingPowNode & spShadingPowNode::operator= ( const spShadingPowNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingPowNode spShadingPowNode::SafeCast( spObject other ) { spShadingPowNode ret; if( other.NonNull() && other.IsA("IShadingPowNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingPowNode* spShadingPowNode::operator->() const { return this; }
	inline spShadingPowNode::spShadingPowNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingDivideNode methods
	inline spShadingDivideNode::spShadingDivideNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingDivideNode::spShadingDivideNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingDivideNode::spShadingDivideNode( const spShadingDivideNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingDivideNode & spShadingDivideNode::operator= ( const spShadingDivideNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingDivideNode spShadingDivideNode::SafeCast( spObject other ) { spShadingDivideNode ret; if( other.NonNull() && other.IsA("IShadingDivideNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingDivideNode* spShadingDivideNode::operator->() const { return this; }
	inline spShadingDivideNode::spShadingDivideNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingClampNode methods
	inline spShadingClampNode::spShadingClampNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingClampNode::spShadingClampNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingClampNode::spShadingClampNode( const spShadingClampNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingClampNode & spShadingClampNode::operator= ( const spShadingClampNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingClampNode spShadingClampNode::SafeCast( spObject other ) { spShadingClampNode ret; if( other.NonNull() && other.IsA("IShadingClampNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingClampNode* spShadingClampNode::operator->() const { return this; }
	inline spShadingClampNode::spShadingClampNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingMaxNode methods
	inline spShadingMaxNode::spShadingMaxNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingMaxNode::spShadingMaxNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingMaxNode::spShadingMaxNode( const spShadingMaxNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingMaxNode & spShadingMaxNode::operator= ( const spShadingMaxNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingMaxNode spShadingMaxNode::SafeCast( spObject other ) { spShadingMaxNode ret; if( other.NonNull() && other.IsA("IShadingMaxNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingMaxNode* spShadingMaxNode::operator->() const { return this; }
	inline spShadingMaxNode::spShadingMaxNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingMinNode methods
	inline spShadingMinNode::spShadingMinNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingMinNode::spShadingMinNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingMinNode::spShadingMinNode( const spShadingMinNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingMinNode & spShadingMinNode::operator= ( const spShadingMinNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingMinNode spShadingMinNode::SafeCast( spObject other ) { spShadingMinNode ret; if( other.NonNull() && other.IsA("IShadingMinNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingMinNode* spShadingMinNode::operator->() const { return this; }
	inline spShadingMinNode::spShadingMinNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingStepNode methods
	inline spShadingStepNode::spShadingStepNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingStepNode::spShadingStepNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingStepNode::spShadingStepNode( const spShadingStepNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingStepNode & spShadingStepNode::operator= ( const spShadingStepNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingStepNode spShadingStepNode::SafeCast( spObject other ) { spShadingStepNode ret; if( other.NonNull() && other.IsA("IShadingStepNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingStepNode* spShadingStepNode::operator->() const { return this; }
	inline spShadingStepNode::spShadingStepNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingEqualNode methods
	inline spShadingEqualNode::spShadingEqualNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingEqualNode::spShadingEqualNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingEqualNode::spShadingEqualNode( const spShadingEqualNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingEqualNode & spShadingEqualNode::operator= ( const spShadingEqualNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingEqualNode spShadingEqualNode::SafeCast( spObject other ) { spShadingEqualNode ret; if( other.NonNull() && other.IsA("IShadingEqualNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingEqualNode* spShadingEqualNode::operator->() const { return this; }
	inline spShadingEqualNode::spShadingEqualNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingNotEqualNode methods
	inline spShadingNotEqualNode::spShadingNotEqualNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingNotEqualNode::spShadingNotEqualNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingNotEqualNode::spShadingNotEqualNode( const spShadingNotEqualNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingNotEqualNode & spShadingNotEqualNode::operator= ( const spShadingNotEqualNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingNotEqualNode spShadingNotEqualNode::SafeCast( spObject other ) { spShadingNotEqualNode ret; if( other.NonNull() && other.IsA("IShadingNotEqualNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingNotEqualNode* spShadingNotEqualNode::operator->() const { return this; }
	inline spShadingNotEqualNode::spShadingNotEqualNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingVertexColorNode methods
	inline spShadingVertexColorNode::spShadingVertexColorNode() : spShadingNode( nullptr , nullptr ) {}
	inline spShadingVertexColorNode::spShadingVertexColorNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingNode( _sg , _intfptr ) {}
	inline spShadingVertexColorNode::spShadingVertexColorNode( const spShadingVertexColorNode &p ) : spShadingNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingVertexColorNode & spShadingVertexColorNode::operator= ( const spShadingVertexColorNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingVertexColorNode spShadingVertexColorNode::SafeCast( spObject other ) { spShadingVertexColorNode ret; if( other.NonNull() && other.IsA("IShadingVertexColorNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingVertexColorNode* spShadingVertexColorNode::operator->() const { return this; }
	inline spShadingVertexColorNode::spShadingVertexColorNode( const _NilStruct & ) : spShadingNode( nullptr , nullptr ) {}

	inline void spShadingVertexColorNode::SetVertexColorIndex( rid value ) const
	{
		this->_GetAPI()->fpShadingVertexColorNode_SetVertexColorIndex( this->_GetHandle() , value );
	}

	inline rid spShadingVertexColorNode::GetVertexColorIndex(  ) const
	{
		return this->_GetAPI()->fpShadingVertexColorNode_GetVertexColorIndex( this->_GetHandle() );
	}

	inline void spShadingVertexColorNode::SetVertexColorSet( const char * value ) const
	{
		this->_GetAPI()->fpShadingVertexColorNode_SetVertexColorSet( this->_GetHandle() , value );
	}

	inline spString spShadingVertexColorNode::GetVertexColorSet(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShadingVertexColorNode_GetVertexColorSet( this->_GetHandle() ));
	}

	/// Implementations of spShadingInterpolateNode methods
	inline spShadingInterpolateNode::spShadingInterpolateNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingInterpolateNode::spShadingInterpolateNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingInterpolateNode::spShadingInterpolateNode( const spShadingInterpolateNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingInterpolateNode & spShadingInterpolateNode::operator= ( const spShadingInterpolateNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingInterpolateNode spShadingInterpolateNode::SafeCast( spObject other ) { spShadingInterpolateNode ret; if( other.NonNull() && other.IsA("IShadingInterpolateNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingInterpolateNode* spShadingInterpolateNode::operator->() const { return this; }
	inline spShadingInterpolateNode::spShadingInterpolateNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingCustomNode methods
	inline spShadingCustomNode::spShadingCustomNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingCustomNode::spShadingCustomNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingCustomNode::spShadingCustomNode( const spShadingCustomNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingCustomNode & spShadingCustomNode::operator= ( const spShadingCustomNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingCustomNode spShadingCustomNode::SafeCast( spObject other ) { spShadingCustomNode ret; if( other.NonNull() && other.IsA("IShadingCustomNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingCustomNode* spShadingCustomNode::operator->() const { return this; }
	inline spShadingCustomNode::spShadingCustomNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	inline void spShadingCustomNode::SetInputCount( unsigned int value ) const
	{
		this->_GetAPI()->fpShadingCustomNode_SetInputCount( this->_GetHandle() , value );
	}

	inline unsigned int spShadingCustomNode::GetInputCount(  ) const
	{
		return this->_GetAPI()->fpShadingCustomNode_GetInputCount( this->_GetHandle() );
	}

	inline Simplygon::ShadingColor spShadingCustomNode::GetInputValue( unsigned int value ) const
	{
		ColorStruct color = (this->_GetAPI()->fpShadingCustomNode_GetInputValue( this->_GetHandle() , value ));
		return Simplygon::ShadingColor{ color.r , color.g , color.b , color.a };
	}

	inline void spShadingCustomNode::SetCustomShaderCode( const char * value ) const
	{
		this->_GetAPI()->fpShadingCustomNode_SetCustomShaderCode( this->_GetHandle() , value );
	}

	/// Implementations of spShadingLayeredBlendNode methods
	inline spShadingLayeredBlendNode::spShadingLayeredBlendNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingLayeredBlendNode::spShadingLayeredBlendNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingLayeredBlendNode::spShadingLayeredBlendNode( const spShadingLayeredBlendNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingLayeredBlendNode & spShadingLayeredBlendNode::operator= ( const spShadingLayeredBlendNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingLayeredBlendNode spShadingLayeredBlendNode::SafeCast( spObject other ) { spShadingLayeredBlendNode ret; if( other.NonNull() && other.IsA("IShadingLayeredBlendNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingLayeredBlendNode* spShadingLayeredBlendNode::operator->() const { return this; }
	inline spShadingLayeredBlendNode::spShadingLayeredBlendNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	inline void spShadingLayeredBlendNode::SetInputCount( unsigned int value ) const
	{
		this->_GetAPI()->fpShadingLayeredBlendNode_SetInputCount( this->_GetHandle() , value );
	}

	inline unsigned int spShadingLayeredBlendNode::GetInputCount(  ) const
	{
		return this->_GetAPI()->fpShadingLayeredBlendNode_GetInputCount( this->_GetHandle() );
	}

	inline void spShadingLayeredBlendNode::SetPerInputBlendType( int _input , Simplygon::ETextureBlendType _blendType ) const
	{
		this->_GetAPI()->fpShadingLayeredBlendNode_SetPerInputBlendType( this->_GetHandle() , _input , (ETextureBlendType)_blendType );
	}

	inline Simplygon::ETextureBlendType spShadingLayeredBlendNode::GetPerInputBlendType( int _input ) const
	{
		return this->_GetAPI()->fpShadingLayeredBlendNode_GetPerInputBlendType( this->_GetHandle() , _input );
	}

	/// Implementations of spShadingNormalize3Node methods
	inline spShadingNormalize3Node::spShadingNormalize3Node() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingNormalize3Node::spShadingNormalize3Node( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingNormalize3Node::spShadingNormalize3Node( const spShadingNormalize3Node &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingNormalize3Node & spShadingNormalize3Node::operator= ( const spShadingNormalize3Node &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingNormalize3Node spShadingNormalize3Node::SafeCast( spObject other ) { spShadingNormalize3Node ret; if( other.NonNull() && other.IsA("IShadingNormalize3Node") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingNormalize3Node* spShadingNormalize3Node::operator->() const { return this; }
	inline spShadingNormalize3Node::spShadingNormalize3Node( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingSqrtNode methods
	inline spShadingSqrtNode::spShadingSqrtNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingSqrtNode::spShadingSqrtNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingSqrtNode::spShadingSqrtNode( const spShadingSqrtNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingSqrtNode & spShadingSqrtNode::operator= ( const spShadingSqrtNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingSqrtNode spShadingSqrtNode::SafeCast( spObject other ) { spShadingSqrtNode ret; if( other.NonNull() && other.IsA("IShadingSqrtNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingSqrtNode* spShadingSqrtNode::operator->() const { return this; }
	inline spShadingSqrtNode::spShadingSqrtNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingDot3Node methods
	inline spShadingDot3Node::spShadingDot3Node() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingDot3Node::spShadingDot3Node( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingDot3Node::spShadingDot3Node( const spShadingDot3Node &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingDot3Node & spShadingDot3Node::operator= ( const spShadingDot3Node &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingDot3Node spShadingDot3Node::SafeCast( spObject other ) { spShadingDot3Node ret; if( other.NonNull() && other.IsA("IShadingDot3Node") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingDot3Node* spShadingDot3Node::operator->() const { return this; }
	inline spShadingDot3Node::spShadingDot3Node( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingCross3Node methods
	inline spShadingCross3Node::spShadingCross3Node() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingCross3Node::spShadingCross3Node( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingCross3Node::spShadingCross3Node( const spShadingCross3Node &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingCross3Node & spShadingCross3Node::operator= ( const spShadingCross3Node &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingCross3Node spShadingCross3Node::SafeCast( spObject other ) { spShadingCross3Node ret; if( other.NonNull() && other.IsA("IShadingCross3Node") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingCross3Node* spShadingCross3Node::operator->() const { return this; }
	inline spShadingCross3Node::spShadingCross3Node( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingCosNode methods
	inline spShadingCosNode::spShadingCosNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingCosNode::spShadingCosNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingCosNode::spShadingCosNode( const spShadingCosNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingCosNode & spShadingCosNode::operator= ( const spShadingCosNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingCosNode spShadingCosNode::SafeCast( spObject other ) { spShadingCosNode ret; if( other.NonNull() && other.IsA("IShadingCosNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingCosNode* spShadingCosNode::operator->() const { return this; }
	inline spShadingCosNode::spShadingCosNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingSinNode methods
	inline spShadingSinNode::spShadingSinNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingSinNode::spShadingSinNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingSinNode::spShadingSinNode( const spShadingSinNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingSinNode & spShadingSinNode::operator= ( const spShadingSinNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingSinNode spShadingSinNode::SafeCast( spObject other ) { spShadingSinNode ret; if( other.NonNull() && other.IsA("IShadingSinNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingSinNode* spShadingSinNode::operator->() const { return this; }
	inline spShadingSinNode::spShadingSinNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingGreaterThanNode methods
	inline spShadingGreaterThanNode::spShadingGreaterThanNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingGreaterThanNode::spShadingGreaterThanNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingGreaterThanNode::spShadingGreaterThanNode( const spShadingGreaterThanNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingGreaterThanNode & spShadingGreaterThanNode::operator= ( const spShadingGreaterThanNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingGreaterThanNode spShadingGreaterThanNode::SafeCast( spObject other ) { spShadingGreaterThanNode ret; if( other.NonNull() && other.IsA("IShadingGreaterThanNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingGreaterThanNode* spShadingGreaterThanNode::operator->() const { return this; }
	inline spShadingGreaterThanNode::spShadingGreaterThanNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingLessThanNode methods
	inline spShadingLessThanNode::spShadingLessThanNode() : spShadingFilterNode( nullptr , nullptr ) {}
	inline spShadingLessThanNode::spShadingLessThanNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingFilterNode( _sg , _intfptr ) {}
	inline spShadingLessThanNode::spShadingLessThanNode( const spShadingLessThanNode &p ) : spShadingFilterNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingLessThanNode & spShadingLessThanNode::operator= ( const spShadingLessThanNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingLessThanNode spShadingLessThanNode::SafeCast( spObject other ) { spShadingLessThanNode ret; if( other.NonNull() && other.IsA("IShadingLessThanNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingLessThanNode* spShadingLessThanNode::operator->() const { return this; }
	inline spShadingLessThanNode::spShadingLessThanNode( const _NilStruct & ) : spShadingFilterNode( nullptr , nullptr ) {}

	/// Implementations of spShadingGeometryFieldNode methods
	inline spShadingGeometryFieldNode::spShadingGeometryFieldNode() : spShadingNode( nullptr , nullptr ) {}
	inline spShadingGeometryFieldNode::spShadingGeometryFieldNode( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spShadingNode( _sg , _intfptr ) {}
	inline spShadingGeometryFieldNode::spShadingGeometryFieldNode( const spShadingGeometryFieldNode &p ) : spShadingNode( p._GetAPI() , p._GetHandle() ) {}
	inline spShadingGeometryFieldNode & spShadingGeometryFieldNode::operator= ( const spShadingGeometryFieldNode &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShadingGeometryFieldNode spShadingGeometryFieldNode::SafeCast( spObject other ) { spShadingGeometryFieldNode ret; if( other.NonNull() && other.IsA("IShadingGeometryFieldNode") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShadingGeometryFieldNode* spShadingGeometryFieldNode::operator->() const { return this; }
	inline spShadingGeometryFieldNode::spShadingGeometryFieldNode( const _NilStruct & ) : spShadingNode( nullptr , nullptr ) {}

	inline void spShadingGeometryFieldNode::SetFieldType( rid value ) const
	{
		this->_GetAPI()->fpShadingGeometryFieldNode_SetFieldType( this->_GetHandle() , value );
	}

	inline Simplygon::EGeometryDataFieldType spShadingGeometryFieldNode::GetFieldType(  ) const
	{
		return this->_GetAPI()->fpShadingGeometryFieldNode_GetFieldType( this->_GetHandle() );
	}

	inline void spShadingGeometryFieldNode::SetFieldIndex( rid value ) const
	{
		this->_GetAPI()->fpShadingGeometryFieldNode_SetFieldIndex( this->_GetHandle() , value );
	}

	inline rid spShadingGeometryFieldNode::GetFieldIndex(  ) const
	{
		return this->_GetAPI()->fpShadingGeometryFieldNode_GetFieldIndex( this->_GetHandle() );
	}

	inline void spShadingGeometryFieldNode::SetFieldName( const char * value ) const
	{
		this->_GetAPI()->fpShadingGeometryFieldNode_SetFieldName( this->_GetHandle() , value );
	}

	inline spString spShadingGeometryFieldNode::GetFieldName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShadingGeometryFieldNode_GetFieldName( this->_GetHandle() ));
	}

	/// Implementations of spShaderGenerator methods
	inline spShaderGenerator::spShaderGenerator() : spObject( nullptr , nullptr ) {}
	inline spShaderGenerator::spShaderGenerator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spShaderGenerator::spShaderGenerator( const spShaderGenerator &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spShaderGenerator & spShaderGenerator::operator= ( const spShaderGenerator &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spShaderGenerator spShaderGenerator::SafeCast( spObject other ) { spShaderGenerator ret; if( other.NonNull() && other.IsA("IShaderGenerator") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spShaderGenerator* spShaderGenerator::operator->() const { return this; }
	inline spShaderGenerator::spShaderGenerator( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spShaderGenerator::SetMaterial( const spMaterial & value ) const
	{
		this->_GetAPI()->fpShaderGenerator_SetMaterial( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spMaterial spShaderGenerator::GetMaterial(  ) const
	{
		spMaterial retobj = spMaterial( this->_GetAPI() , this->_GetAPI()->fpShaderGenerator_GetMaterial( this->_GetHandle() ));
		return retobj;
	}

	inline void spShaderGenerator::SetIdentifersPrefix( const char * value ) const
	{
		this->_GetAPI()->fpShaderGenerator_SetIdentifersPrefix( this->_GetHandle() , value );
	}

	inline spString spShaderGenerator::GetIdentifersPrefix(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShaderGenerator_GetIdentifersPrefix( this->_GetHandle() ));
	}

	inline void spShaderGenerator::SetGenerateFullShader( bool value ) const
	{
		this->_GetAPI()->fpShaderGenerator_SetGenerateFullShader( this->_GetHandle() , value );
	}

	inline bool spShaderGenerator::GetGenerateFullShader(  ) const
	{
		return this->_GetAPI()->fpShaderGenerator_GetGenerateFullShader( this->_GetHandle() );
	}

	inline void spShaderGenerator::SetGenerateTextureSamplerData( bool value ) const
	{
		this->_GetAPI()->fpShaderGenerator_SetGenerateTextureSamplerData( this->_GetHandle() , value );
	}

	inline bool spShaderGenerator::GetGenerateTextureSamplerData(  ) const
	{
		return this->_GetAPI()->fpShaderGenerator_GetGenerateTextureSamplerData( this->_GetHandle() );
	}

	inline bool spShaderGenerator::GenerateShaderData(  ) const
	{
		return this->_GetAPI()->fpShaderGenerator_GenerateShaderData( this->_GetHandle() );
	}

	inline spString spShaderGenerator::GetHLSLCode(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShaderGenerator_GetHLSLCode( this->_GetHandle() ));
	}

	inline spString spShaderGenerator::GetGLSLVertexCode(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShaderGenerator_GetGLSLVertexCode( this->_GetHandle() ));
	}

	inline spString spShaderGenerator::GetGLSLFragmentCode(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShaderGenerator_GetGLSLFragmentCode( this->_GetHandle() ));
	}

	inline unsigned int spShaderGenerator::GetShaderInputTexturePathsCount(  ) const
	{
		return this->_GetAPI()->fpShaderGenerator_GetShaderInputTexturePathsCount( this->_GetHandle() );
	}

	inline spString spShaderGenerator::GetShaderInputTexturePath( rid index ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShaderGenerator_GetShaderInputTexturePath( this->_GetHandle() , index ));
	}

	inline unsigned int spShaderGenerator::GetShaderInputUVSetsCount(  ) const
	{
		return this->_GetAPI()->fpShaderGenerator_GetShaderInputUVSetsCount( this->_GetHandle() );
	}

	inline spString spShaderGenerator::GetShaderInputUVSet( rid index ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShaderGenerator_GetShaderInputUVSet( this->_GetHandle() , index ));
	}

	inline rid spShaderGenerator::GetShaderInputUVIndex( const char * uvset ) const
	{
		return this->_GetAPI()->fpShaderGenerator_GetShaderInputUVIndex( this->_GetHandle() , uvset );
	}

	inline unsigned int spShaderGenerator::GetShaderInputVertexColorsCount(  ) const
	{
		return this->_GetAPI()->fpShaderGenerator_GetShaderInputVertexColorsCount( this->_GetHandle() );
	}

	inline spString spShaderGenerator::GetShaderInputVertexColor( rid index ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpShaderGenerator_GetShaderInputVertexColor( this->_GetHandle() , index ));
	}

	inline rid spShaderGenerator::GetShaderInputVertexColorsIndex( const char * colorset ) const
	{
		return this->_GetAPI()->fpShaderGenerator_GetShaderInputVertexColorsIndex( this->_GetHandle() , colorset );
	}

	inline void spShaderGenerator::UnloadData(  ) const
	{
		this->_GetAPI()->fpShaderGenerator_UnloadData( this->_GetHandle() );
	}

	/// Implementations of spAggregationProcessor methods
	inline spAggregationProcessor::spAggregationProcessor() : spProcessingObject( nullptr , nullptr ) {}
	inline spAggregationProcessor::spAggregationProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spProcessingObject( _sg , _intfptr ) {}
	inline spAggregationProcessor::spAggregationProcessor( const spAggregationProcessor &p ) : spProcessingObject( p._GetAPI() , p._GetHandle() ) {}
	inline spAggregationProcessor & spAggregationProcessor::operator= ( const spAggregationProcessor &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spAggregationProcessor spAggregationProcessor::SafeCast( spObject other ) { spAggregationProcessor ret; if( other.NonNull() && other.IsA("IAggregationProcessor") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spAggregationProcessor* spAggregationProcessor::operator->() const { return this; }
	inline spAggregationProcessor::spAggregationProcessor( const _NilStruct & ) : spProcessingObject( nullptr , nullptr ) {}

	inline void spAggregationProcessor::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpAggregationProcessor_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spAggregationProcessor::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpAggregationProcessor_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spAggregationProcessor::GetMappingImage(  ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpAggregationProcessor_GetMappingImage( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spAggregationProcessor::GetMappingImageForImageIndex( rid OutputMaterialId ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpAggregationProcessor_GetMappingImageForImageIndex( this->_GetHandle() , OutputMaterialId ));
		return retobj;
	}

	inline Simplygon::spAggregationSettings spAggregationProcessor::GetAggregationSettings(  ) const
	{
		spAggregationSettings retobj = spAggregationSettings( this->_GetAPI() , this->_GetAPI()->fpAggregationProcessor_GetAggregationSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImageSettings spAggregationProcessor::GetMappingImageSettings(  ) const
	{
		spMappingImageSettings retobj = spMappingImageSettings( this->_GetAPI() , this->_GetAPI()->fpAggregationProcessor_GetMappingImageSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVisibilitySettings spAggregationProcessor::GetVisibilitySettings(  ) const
	{
		spVisibilitySettings retobj = spVisibilitySettings( this->_GetAPI() , this->_GetAPI()->fpAggregationProcessor_GetVisibilitySettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spGeometryCullingSettings spAggregationProcessor::GetGeometryCullingSettings(  ) const
	{
		spGeometryCullingSettings retobj = spGeometryCullingSettings( this->_GetAPI() , this->_GetAPI()->fpAggregationProcessor_GetGeometryCullingSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVertexWeightSettings spAggregationProcessor::GetVertexWeightSettings(  ) const
	{
		spVertexWeightSettings retobj = spVertexWeightSettings( this->_GetAPI() , this->_GetAPI()->fpAggregationProcessor_GetVertexWeightSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spAggregationSettings methods
	inline spAggregationSettings::spAggregationSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spAggregationSettings::spAggregationSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spAggregationSettings::spAggregationSettings( const spAggregationSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spAggregationSettings & spAggregationSettings::operator= ( const spAggregationSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spAggregationSettings spAggregationSettings::SafeCast( spObject other ) { spAggregationSettings ret; if( other.NonNull() && other.IsA("IAggregationSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spAggregationSettings* spAggregationSettings::operator->() const { return this; }
	inline spAggregationSettings::spAggregationSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spAggregationSettings::SetProcessSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpAggregationSettings_SetProcessSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spAggregationSettings::GetProcessSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpAggregationSettings_GetProcessSelectionSetID( this->_GetHandle() );
	}

	inline void spAggregationSettings::SetProcessSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpAggregationSettings_SetProcessSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spAggregationSettings::GetProcessSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpAggregationSettings_GetProcessSelectionSetName( this->_GetHandle() ));
	}

	inline void spAggregationSettings::SetKeepUnprocessedSceneMeshes( bool value ) const
	{
		this->_GetAPI()->fpAggregationSettings_SetKeepUnprocessedSceneMeshes( this->_GetHandle() , value );
	}

	inline bool spAggregationSettings::GetKeepUnprocessedSceneMeshes(  ) const
	{
		return this->_GetAPI()->fpAggregationSettings_GetKeepUnprocessedSceneMeshes( this->_GetHandle() );
	}

	inline void spAggregationSettings::SetMergeGeometries( bool value ) const
	{
		this->_GetAPI()->fpAggregationSettings_SetMergeGeometries( this->_GetHandle() , value );
	}

	inline bool spAggregationSettings::GetMergeGeometries(  ) const
	{
		return this->_GetAPI()->fpAggregationSettings_GetMergeGeometries( this->_GetHandle() );
	}

	inline void spAggregationSettings::SetEnableGeometryCulling( bool value ) const
	{
		this->_GetAPI()->fpAggregationSettings_SetEnableGeometryCulling( this->_GetHandle() , value );
	}

	inline bool spAggregationSettings::GetEnableGeometryCulling(  ) const
	{
		return this->_GetAPI()->fpAggregationSettings_GetEnableGeometryCulling( this->_GetHandle() );
	}

	inline void spAggregationSettings::SetGeometryCullingPrecision( real value ) const
	{
		this->_GetAPI()->fpAggregationSettings_SetGeometryCullingPrecision( this->_GetHandle() , value );
	}

	inline real spAggregationSettings::GetGeometryCullingPrecision(  ) const
	{
		return this->_GetAPI()->fpAggregationSettings_GetGeometryCullingPrecision( this->_GetHandle() );
	}

	inline void spAggregationSettings::SetSubdivideGeometryBasedOnUVTiles( bool value ) const
	{
		this->_GetAPI()->fpAggregationSettings_SetSubdivideGeometryBasedOnUVTiles( this->_GetHandle() , value );
	}

	inline bool spAggregationSettings::GetSubdivideGeometryBasedOnUVTiles(  ) const
	{
		return this->_GetAPI()->fpAggregationSettings_GetSubdivideGeometryBasedOnUVTiles( this->_GetHandle() );
	}

	inline void spAggregationSettings::SetSubdivisionTileSize( unsigned int value ) const
	{
		this->_GetAPI()->fpAggregationSettings_SetSubdivisionTileSize( this->_GetHandle() , value );
	}

	inline unsigned int spAggregationSettings::GetSubdivisionTileSize(  ) const
	{
		return this->_GetAPI()->fpAggregationSettings_GetSubdivisionTileSize( this->_GetHandle() );
	}

	/// Implementations of spChartAggregator methods
	inline spChartAggregator::spChartAggregator() : spObject( nullptr , nullptr ) {}
	inline spChartAggregator::spChartAggregator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spChartAggregator::spChartAggregator( const spChartAggregator &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spChartAggregator & spChartAggregator::operator= ( const spChartAggregator &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spChartAggregator spChartAggregator::SafeCast( spObject other ) { spChartAggregator ret; if( other.NonNull() && other.IsA("IChartAggregator") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spChartAggregator* spChartAggregator::operator->() const { return this; }
	inline spChartAggregator::spChartAggregator( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline bool spChartAggregator::Parameterize( const spGeometryData & geom , const spRealArray & arr ) const
	{
		return this->_GetAPI()->fpChartAggregator_Parameterize( this->_GetHandle() , hIntf(geom) , hIntf(arr) );
	}

	inline void spChartAggregator::SetInputMaterialCount( unsigned int value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetInputMaterialCount( this->_GetHandle() , value );
	}

	inline unsigned int spChartAggregator::GetInputMaterialCount(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetInputMaterialCount( this->_GetHandle() );
	}

	inline void spChartAggregator::SetOutputMaterialCount( unsigned int value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetOutputMaterialCount( this->_GetHandle() , value );
	}

	inline unsigned int spChartAggregator::GetOutputMaterialCount(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetOutputMaterialCount( this->_GetHandle() );
	}

	inline void spChartAggregator::SetInputOutputMaterialMapping( unsigned int InMaterialId , int OutMaterialId ) const
	{
		this->_GetAPI()->fpChartAggregator_SetInputOutputMaterialMapping( this->_GetHandle() , InMaterialId , OutMaterialId );
	}

	inline int spChartAggregator::GetInputOutputMaterialMapping( unsigned int InMaterialId ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetInputOutputMaterialMapping( this->_GetHandle() , InMaterialId );
	}

	inline void spChartAggregator::SetTextureWidth( unsigned int value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetTextureWidth( this->_GetHandle() , value );
	}

	inline unsigned int spChartAggregator::GetTextureWidth(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetTextureWidth( this->_GetHandle() );
	}

	inline void spChartAggregator::SetTextureWidthForMaterialIndex( unsigned int id , unsigned int value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetTextureWidthForMaterialIndex( this->_GetHandle() , id , value );
	}

	inline unsigned int spChartAggregator::GetTextureWidthForMaterialIndex( unsigned int id ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetTextureWidthForMaterialIndex( this->_GetHandle() , id );
	}

	inline void spChartAggregator::SetTextureHeight( unsigned int value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetTextureHeight( this->_GetHandle() , value );
	}

	inline unsigned int spChartAggregator::GetTextureHeight(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetTextureHeight( this->_GetHandle() );
	}

	inline void spChartAggregator::SetTextureHeightForMaterialIndex( unsigned int id , unsigned int value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetTextureHeightForMaterialIndex( this->_GetHandle() , id , value );
	}

	inline unsigned int spChartAggregator::GetTextureHeightForMaterialIndex( unsigned int id ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetTextureHeightForMaterialIndex( this->_GetHandle() , id );
	}

	inline void spChartAggregator::SetGutterSpace( unsigned int value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetGutterSpace( this->_GetHandle() , value );
	}

	inline unsigned int spChartAggregator::GetGutterSpace(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetGutterSpace( this->_GetHandle() );
	}

	inline void spChartAggregator::SetGutterSpaceForMaterialIndex( unsigned int id , unsigned int value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetGutterSpaceForMaterialIndex( this->_GetHandle() , id , value );
	}

	inline unsigned int spChartAggregator::GetGutterSpaceForMaterialIndex( unsigned int id ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetGutterSpaceForMaterialIndex( this->_GetHandle() , id );
	}

	inline void spChartAggregator::SetUseAutomaticTextureSize( bool value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetUseAutomaticTextureSize( this->_GetHandle() , value );
	}

	inline bool spChartAggregator::GetUseAutomaticTextureSize(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetUseAutomaticTextureSize( this->_GetHandle() );
	}

	inline void spChartAggregator::SetAutomaticTextureSizeMultiplier( real value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetAutomaticTextureSizeMultiplier( this->_GetHandle() , value );
	}

	inline real spChartAggregator::GetAutomaticTextureSizeMultiplier(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetAutomaticTextureSizeMultiplier( this->_GetHandle() );
	}

	inline void spChartAggregator::SetForcePower2Texture( bool value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetForcePower2Texture( this->_GetHandle() , value );
	}

	inline bool spChartAggregator::GetForcePower2Texture(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetForcePower2Texture( this->_GetHandle() );
	}

	inline void spChartAggregator::SetTexCoordLevel( unsigned int value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetTexCoordLevel( this->_GetHandle() , value );
	}

	inline unsigned int spChartAggregator::GetTexCoordLevel(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetTexCoordLevel( this->_GetHandle() );
	}

	inline void spChartAggregator::SetTexCoordName( const char * value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetTexCoordName( this->_GetHandle() , value );
	}

	inline spString spChartAggregator::GetTexCoordName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpChartAggregator_GetTexCoordName( this->_GetHandle() ));
	}

	inline void spChartAggregator::SetChartAggregatorMode( Simplygon::EChartAggregatorMode value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetChartAggregatorMode( this->_GetHandle() , (EChartAggregatorMode)value );
	}

	inline Simplygon::EChartAggregatorMode spChartAggregator::GetChartAggregatorMode(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetChartAggregatorMode( this->_GetHandle() );
	}

	inline void spChartAggregator::SetSurfaceAreaScale( Simplygon::ESurfaceAreaScale value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetSurfaceAreaScale( this->_GetHandle() , (ESurfaceAreaScale)value );
	}

	inline Simplygon::ESurfaceAreaScale spChartAggregator::GetSurfaceAreaScale(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetSurfaceAreaScale( this->_GetHandle() );
	}

	inline void spChartAggregator::SetSeparateOverlappingCharts( bool value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetSeparateOverlappingCharts( this->_GetHandle() , value );
	}

	inline void spChartAggregator::SetMaterialTable( const spMaterialTable & value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetMaterialTable( this->_GetHandle() , hIntf(value) );
	}

	inline void spChartAggregator::SetTextureTable( const spTextureTable & value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetTextureTable( this->_GetHandle() , hIntf(value) );
	}

	inline unsigned int spChartAggregator::GetKeepOriginalChartSizesTextureWidth(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetKeepOriginalChartSizesTextureWidth( this->_GetHandle() );
	}

	inline unsigned int spChartAggregator::GetKeepOriginalChartSizesTextureWidthForMaterialIndex( unsigned int OutputID ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetKeepOriginalChartSizesTextureWidthForMaterialIndex( this->_GetHandle() , OutputID );
	}

	inline unsigned int spChartAggregator::GetKeepOriginalChartSizesTextureHeight(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetKeepOriginalChartSizesTextureHeight( this->_GetHandle() );
	}

	inline unsigned int spChartAggregator::GetKeepOriginalChartSizesTextureHeightForMaterialIndex( unsigned int OutputID ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetKeepOriginalChartSizesTextureHeightForMaterialIndex( this->_GetHandle() , OutputID );
	}

	inline void spChartAggregator::SetOriginalChartProportionsChannel( const char * value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetOriginalChartProportionsChannel( this->_GetHandle() , value );
	}

	inline spString spChartAggregator::GetOriginalChartProportionsChannel(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpChartAggregator_GetOriginalChartProportionsChannel( this->_GetHandle() ));
	}

	inline void spChartAggregator::SetUseVertexWeights( bool value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetUseVertexWeights( this->_GetHandle() , value );
	}

	inline bool spChartAggregator::GetUseVertexWeights(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetUseVertexWeights( this->_GetHandle() );
	}

	inline void spChartAggregator::SetLockUVRotation( bool value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetLockUVRotation( this->_GetHandle() , value );
	}

	inline bool spChartAggregator::GetLockUVRotation(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetLockUVRotation( this->_GetHandle() );
	}

	inline void spChartAggregator::SetExpandZeroAreaUVs( bool value ) const
	{
		this->_GetAPI()->fpChartAggregator_SetExpandZeroAreaUVs( this->_GetHandle() , value );
	}

	inline bool spChartAggregator::GetExpandZeroAreaUVs(  ) const
	{
		return this->_GetAPI()->fpChartAggregator_GetExpandZeroAreaUVs( this->_GetHandle() );
	}

	/// Implementations of spVertexColorCasterSettings methods
	inline spVertexColorCasterSettings::spVertexColorCasterSettings() : spMaterialCasterSettings( nullptr , nullptr ) {}
	inline spVertexColorCasterSettings::spVertexColorCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCasterSettings( _sg , _intfptr ) {}
	inline spVertexColorCasterSettings::spVertexColorCasterSettings( const spVertexColorCasterSettings &p ) : spMaterialCasterSettings( p._GetAPI() , p._GetHandle() ) {}
	inline spVertexColorCasterSettings & spVertexColorCasterSettings::operator= ( const spVertexColorCasterSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spVertexColorCasterSettings spVertexColorCasterSettings::SafeCast( spObject other ) { spVertexColorCasterSettings ret; if( other.NonNull() && other.IsA("IVertexColorCasterSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spVertexColorCasterSettings* spVertexColorCasterSettings::operator->() const { return this; }
	inline spVertexColorCasterSettings::spVertexColorCasterSettings( const _NilStruct & ) : spMaterialCasterSettings( nullptr , nullptr ) {}

	inline void spVertexColorCasterSettings::SetOutputColorLevel( rid value ) const
	{
		this->_GetAPI()->fpVertexColorCasterSettings_SetOutputColorLevel( this->_GetHandle() , value );
	}

	inline rid spVertexColorCasterSettings::GetOutputColorLevel(  ) const
	{
		return this->_GetAPI()->fpVertexColorCasterSettings_GetOutputColorLevel( this->_GetHandle() );
	}

	inline void spVertexColorCasterSettings::SetOutputColorName( const char * value ) const
	{
		this->_GetAPI()->fpVertexColorCasterSettings_SetOutputColorName( this->_GetHandle() , value );
	}

	inline spString spVertexColorCasterSettings::GetOutputColorName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpVertexColorCasterSettings_GetOutputColorName( this->_GetHandle() ));
	}

	inline void spVertexColorCasterSettings::SetColorSpaceEdgeThreshold( real value ) const
	{
		this->_GetAPI()->fpVertexColorCasterSettings_SetColorSpaceEdgeThreshold( this->_GetHandle() , value );
	}

	inline real spVertexColorCasterSettings::GetColorSpaceEdgeThreshold(  ) const
	{
		return this->_GetAPI()->fpVertexColorCasterSettings_GetColorSpaceEdgeThreshold( this->_GetHandle() );
	}

	/// Implementations of spVertexColorCaster methods
	inline spVertexColorCaster::spVertexColorCaster() : spMaterialCaster( nullptr , nullptr ) {}
	inline spVertexColorCaster::spVertexColorCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCaster( _sg , _intfptr ) {}
	inline spVertexColorCaster::spVertexColorCaster( const spVertexColorCaster &p ) : spMaterialCaster( p._GetAPI() , p._GetHandle() ) {}
	inline spVertexColorCaster & spVertexColorCaster::operator= ( const spVertexColorCaster &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spVertexColorCaster spVertexColorCaster::SafeCast( spObject other ) { spVertexColorCaster ret; if( other.NonNull() && other.IsA("IVertexColorCaster") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spVertexColorCaster* spVertexColorCaster::operator->() const { return this; }
	inline spVertexColorCaster::spVertexColorCaster( const _NilStruct & ) : spMaterialCaster( nullptr , nullptr ) {}

	inline void spVertexColorCaster::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpVertexColorCaster_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spVertexColorCasterSettings spVertexColorCaster::GetVertexColorCasterSettings(  ) const
	{
		spVertexColorCasterSettings retobj = spVertexColorCasterSettings( this->_GetAPI() , this->_GetAPI()->fpVertexColorCaster_GetVertexColorCasterSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spImageDataExporter methods
	inline spImageDataExporter::spImageDataExporter() : spObject( nullptr , nullptr ) {}
	inline spImageDataExporter::spImageDataExporter( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spImageDataExporter::spImageDataExporter( const spImageDataExporter &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spImageDataExporter & spImageDataExporter::operator= ( const spImageDataExporter &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spImageDataExporter spImageDataExporter::SafeCast( spObject other ) { spImageDataExporter ret; if( other.NonNull() && other.IsA("IImageDataExporter") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spImageDataExporter* spImageDataExporter::operator->() const { return this; }
	inline spImageDataExporter::spImageDataExporter( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spImageDataExporter::SetExportFilePath( const char * value ) const
	{
		this->_GetAPI()->fpImageDataExporter_SetExportFilePath( this->_GetHandle() , value );
	}

	inline spString spImageDataExporter::GetExportFilePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpImageDataExporter_GetExportFilePath( this->_GetHandle() ));
	}

	inline void spImageDataExporter::SetImage( const spImageData & value ) const
	{
		this->_GetAPI()->fpImageDataExporter_SetImage( this->_GetHandle() , hIntf(value) );
	}

	inline bool spImageDataExporter::RunExport(  ) const
	{
		return this->_GetAPI()->fpImageDataExporter_RunExport( this->_GetHandle() );
	}

	inline void spImageDataExporter::SetImageFileFormat( Simplygon::EImageOutputFormat value ) const
	{
		this->_GetAPI()->fpImageDataExporter_SetImageFileFormat( this->_GetHandle() , (EImageOutputFormat)value );
	}

	inline Simplygon::EImageOutputFormat spImageDataExporter::GetImageFileFormat(  ) const
	{
		return this->_GetAPI()->fpImageDataExporter_GetImageFileFormat( this->_GetHandle() );
	}

	inline void spImageDataExporter::SetDDSCompressionType( Simplygon::EDDSCompressionType value ) const
	{
		this->_GetAPI()->fpImageDataExporter_SetDDSCompressionType( this->_GetHandle() , (EDDSCompressionType)value );
	}

	inline Simplygon::EDDSCompressionType spImageDataExporter::GetDDSCompressionType(  ) const
	{
		return this->_GetAPI()->fpImageDataExporter_GetDDSCompressionType( this->_GetHandle() );
	}

	inline void spImageDataExporter::Clear(  ) const
	{
		this->_GetAPI()->fpImageDataExporter_Clear( this->_GetHandle() );
	}

	/// Implementations of spAmbientOcclusionCaster methods
	inline spAmbientOcclusionCaster::spAmbientOcclusionCaster() : spMaterialCaster( nullptr , nullptr ) {}
	inline spAmbientOcclusionCaster::spAmbientOcclusionCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCaster( _sg , _intfptr ) {}
	inline spAmbientOcclusionCaster::spAmbientOcclusionCaster( const spAmbientOcclusionCaster &p ) : spMaterialCaster( p._GetAPI() , p._GetHandle() ) {}
	inline spAmbientOcclusionCaster & spAmbientOcclusionCaster::operator= ( const spAmbientOcclusionCaster &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spAmbientOcclusionCaster spAmbientOcclusionCaster::SafeCast( spObject other ) { spAmbientOcclusionCaster ret; if( other.NonNull() && other.IsA("IAmbientOcclusionCaster") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spAmbientOcclusionCaster* spAmbientOcclusionCaster::operator->() const { return this; }
	inline spAmbientOcclusionCaster::spAmbientOcclusionCaster( const _NilStruct & ) : spMaterialCaster( nullptr , nullptr ) {}

	inline void spAmbientOcclusionCaster::SetAdditionalSourceScene( const spScene & value ) const
	{
		this->_GetAPI()->fpAmbientOcclusionCaster_SetAdditionalSourceScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spAmbientOcclusionCasterSettings spAmbientOcclusionCaster::GetAmbientOcclusionCasterSettings(  ) const
	{
		spAmbientOcclusionCasterSettings retobj = spAmbientOcclusionCasterSettings( this->_GetAPI() , this->_GetAPI()->fpAmbientOcclusionCaster_GetAmbientOcclusionCasterSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spAmbientOcclusionCasterSettings methods
	inline spAmbientOcclusionCasterSettings::spAmbientOcclusionCasterSettings() : spMaterialCasterSettings( nullptr , nullptr ) {}
	inline spAmbientOcclusionCasterSettings::spAmbientOcclusionCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCasterSettings( _sg , _intfptr ) {}
	inline spAmbientOcclusionCasterSettings::spAmbientOcclusionCasterSettings( const spAmbientOcclusionCasterSettings &p ) : spMaterialCasterSettings( p._GetAPI() , p._GetHandle() ) {}
	inline spAmbientOcclusionCasterSettings & spAmbientOcclusionCasterSettings::operator= ( const spAmbientOcclusionCasterSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spAmbientOcclusionCasterSettings spAmbientOcclusionCasterSettings::SafeCast( spObject other ) { spAmbientOcclusionCasterSettings ret; if( other.NonNull() && other.IsA("IAmbientOcclusionCasterSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spAmbientOcclusionCasterSettings* spAmbientOcclusionCasterSettings::operator->() const { return this; }
	inline spAmbientOcclusionCasterSettings::spAmbientOcclusionCasterSettings( const _NilStruct & ) : spMaterialCasterSettings( nullptr , nullptr ) {}

	inline void spAmbientOcclusionCasterSettings::SetRaysPerPixel( unsigned int value ) const
	{
		this->_GetAPI()->fpAmbientOcclusionCasterSettings_SetRaysPerPixel( this->_GetHandle() , value );
	}

	inline unsigned int spAmbientOcclusionCasterSettings::GetRaysPerPixel(  ) const
	{
		return this->_GetAPI()->fpAmbientOcclusionCasterSettings_GetRaysPerPixel( this->_GetHandle() );
	}

	inline void spAmbientOcclusionCasterSettings::SetOcclusionFalloff( real value ) const
	{
		this->_GetAPI()->fpAmbientOcclusionCasterSettings_SetOcclusionFalloff( this->_GetHandle() , value );
	}

	inline real spAmbientOcclusionCasterSettings::GetOcclusionFalloff(  ) const
	{
		return this->_GetAPI()->fpAmbientOcclusionCasterSettings_GetOcclusionFalloff( this->_GetHandle() );
	}

	inline void spAmbientOcclusionCasterSettings::SetOcclusionMultiplier( real value ) const
	{
		this->_GetAPI()->fpAmbientOcclusionCasterSettings_SetOcclusionMultiplier( this->_GetHandle() , value );
	}

	inline real spAmbientOcclusionCasterSettings::GetOcclusionMultiplier(  ) const
	{
		return this->_GetAPI()->fpAmbientOcclusionCasterSettings_GetOcclusionMultiplier( this->_GetHandle() );
	}

	inline void spAmbientOcclusionCasterSettings::SetUseSimpleOcclusionMode( bool value ) const
	{
		this->_GetAPI()->fpAmbientOcclusionCasterSettings_SetUseSimpleOcclusionMode( this->_GetHandle() , value );
	}

	inline bool spAmbientOcclusionCasterSettings::GetUseSimpleOcclusionMode(  ) const
	{
		return this->_GetAPI()->fpAmbientOcclusionCasterSettings_GetUseSimpleOcclusionMode( this->_GetHandle() );
	}

	/// Implementations of spImpostorProcessor methods
	inline spImpostorProcessor::spImpostorProcessor() : spProcessingObject( nullptr , nullptr ) {}
	inline spImpostorProcessor::spImpostorProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spProcessingObject( _sg , _intfptr ) {}
	inline spImpostorProcessor::spImpostorProcessor( const spImpostorProcessor &p ) : spProcessingObject( p._GetAPI() , p._GetHandle() ) {}
	inline spImpostorProcessor & spImpostorProcessor::operator= ( const spImpostorProcessor &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spImpostorProcessor spImpostorProcessor::SafeCast( spObject other ) { spImpostorProcessor ret; if( other.NonNull() && other.IsA("IImpostorProcessor") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spImpostorProcessor* spImpostorProcessor::operator->() const { return this; }
	inline spImpostorProcessor::spImpostorProcessor( const _NilStruct & ) : spProcessingObject( nullptr , nullptr ) {}

	inline void spImpostorProcessor::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpImpostorProcessor_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spImpostorProcessor::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpImpostorProcessor_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spImpostorSettings spImpostorProcessor::GetImpostorSettings(  ) const
	{
		spImpostorSettings retobj = spImpostorSettings( this->_GetAPI() , this->_GetAPI()->fpImpostorProcessor_GetImpostorSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImageSettings spImpostorProcessor::GetMappingImageSettings(  ) const
	{
		spMappingImageSettings retobj = spMappingImageSettings( this->_GetAPI() , this->_GetAPI()->fpImpostorProcessor_GetMappingImageSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spImpostorProcessor::GetMappingImage(  ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpImpostorProcessor_GetMappingImage( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spGeometryData spImpostorProcessor::GetImpostorGeometryFromSingleView(  ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpImpostorProcessor_GetImpostorGeometryFromSingleView( this->_GetHandle() ));
		return retobj;
	}

	inline real spImpostorProcessor::GetSingleViewAspectRatio(  ) const
	{
		return this->_GetAPI()->fpImpostorProcessor_GetSingleViewAspectRatio( this->_GetHandle() );
	}

	inline rid spImpostorProcessor::GetBillboardCloudMaterialId(  ) const
	{
		return this->_GetAPI()->fpImpostorProcessor_GetBillboardCloudMaterialId( this->_GetHandle() );
	}

	/// Implementations of spImpostorSettings methods
	inline spImpostorSettings::spImpostorSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spImpostorSettings::spImpostorSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spImpostorSettings::spImpostorSettings( const spImpostorSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spImpostorSettings & spImpostorSettings::operator= ( const spImpostorSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spImpostorSettings spImpostorSettings::SafeCast( spObject other ) { spImpostorSettings ret; if( other.NonNull() && other.IsA("IImpostorSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spImpostorSettings* spImpostorSettings::operator->() const { return this; }
	inline spImpostorSettings::spImpostorSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spImpostorSettings::SetImpostorType( Simplygon::EImpostorType value ) const
	{
		this->_GetAPI()->fpImpostorSettings_SetImpostorType( this->_GetHandle() , (EImpostorType)value );
	}

	inline Simplygon::EImpostorType spImpostorSettings::GetImpostorType(  ) const
	{
		return this->_GetAPI()->fpImpostorSettings_GetImpostorType( this->_GetHandle() );
	}

	inline void spImpostorSettings::SetProcessSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpImpostorSettings_SetProcessSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spImpostorSettings::GetProcessSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpImpostorSettings_GetProcessSelectionSetID( this->_GetHandle() );
	}

	inline void spImpostorSettings::SetProcessSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpImpostorSettings_SetProcessSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spImpostorSettings::GetProcessSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpImpostorSettings_GetProcessSelectionSetName( this->_GetHandle() ));
	}

	inline Simplygon::spBillboardCloudSettings spImpostorSettings::GetBillboardCloudSettings(  ) const
	{
		spBillboardCloudSettings retobj = spBillboardCloudSettings( this->_GetAPI() , this->_GetAPI()->fpImpostorSettings_GetBillboardCloudSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spFlipbookSettings spImpostorSettings::GetFlipbookSettings(  ) const
	{
		spFlipbookSettings retobj = spFlipbookSettings( this->_GetAPI() , this->_GetAPI()->fpImpostorSettings_GetFlipbookSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spImpostorFromSingleViewSettings spImpostorSettings::GetImpostorFromSingleViewSettings(  ) const
	{
		spImpostorFromSingleViewSettings retobj = spImpostorFromSingleViewSettings( this->_GetAPI() , this->_GetAPI()->fpImpostorSettings_GetImpostorFromSingleViewSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spSurfaceMapper methods
	inline spSurfaceMapper::spSurfaceMapper() : spObject( nullptr , nullptr ) {}
	inline spSurfaceMapper::spSurfaceMapper( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spSurfaceMapper::spSurfaceMapper( const spSurfaceMapper &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spSurfaceMapper & spSurfaceMapper::operator= ( const spSurfaceMapper &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spSurfaceMapper spSurfaceMapper::SafeCast( spObject other ) { spSurfaceMapper ret; if( other.NonNull() && other.IsA("ISurfaceMapper") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spSurfaceMapper* spSurfaceMapper::operator->() const { return this; }
	inline spSurfaceMapper::spSurfaceMapper( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spSurfaceMapper::SetSourceScene( const spScene & value ) const
	{
		this->_GetAPI()->fpSurfaceMapper_SetSourceScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spSurfaceMapper::GetSourceScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpSurfaceMapper_GetSourceScene( this->_GetHandle() ));
		return retobj;
	}

	inline void spSurfaceMapper::SetDestinationScene( const spScene & value ) const
	{
		this->_GetAPI()->fpSurfaceMapper_SetDestinationScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spSurfaceMapper::GetDestinationScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpSurfaceMapper_GetDestinationScene( this->_GetHandle() ));
		return retobj;
	}

	inline void spSurfaceMapper::SetSourceGeometry( const spGeometryData & value ) const
	{
		this->_GetAPI()->fpSurfaceMapper_SetSourceGeometry( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spGeometryData spSurfaceMapper::GetSourceGeometry(  ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpSurfaceMapper_GetSourceGeometry( this->_GetHandle() ));
		return retobj;
	}

	inline void spSurfaceMapper::SetDestinationGeometry( const spGeometryData & value ) const
	{
		this->_GetAPI()->fpSurfaceMapper_SetDestinationGeometry( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spGeometryData spSurfaceMapper::GetDestinationGeometry(  ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpSurfaceMapper_GetDestinationGeometry( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImageSettings spSurfaceMapper::GetMappingImageSettings(  ) const
	{
		spMappingImageSettings retobj = spMappingImageSettings( this->_GetAPI() , this->_GetAPI()->fpSurfaceMapper_GetMappingImageSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spSurfaceMapper::GetMappingImage(  ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpSurfaceMapper_GetMappingImage( this->_GetHandle() ));
		return retobj;
	}

	inline void spSurfaceMapper::SetRecalculateSearchDirection( bool value ) const
	{
		this->_GetAPI()->fpSurfaceMapper_SetRecalculateSearchDirection( this->_GetHandle() , value );
	}

	inline bool spSurfaceMapper::GetRecalculateSearchDirection(  ) const
	{
		return this->_GetAPI()->fpSurfaceMapper_GetRecalculateSearchDirection( this->_GetHandle() );
	}

	inline void spSurfaceMapper::SetSearchDirectionHardEdgeAngle( real value ) const
	{
		this->_GetAPI()->fpSurfaceMapper_SetSearchDirectionHardEdgeAngle( this->_GetHandle() , value );
	}

	inline real spSurfaceMapper::GetSearchDirectionHardEdgeAngle(  ) const
	{
		return this->_GetAPI()->fpSurfaceMapper_GetSearchDirectionHardEdgeAngle( this->_GetHandle() );
	}

	inline void spSurfaceMapper::SetSearchDistance( real value ) const
	{
		this->_GetAPI()->fpSurfaceMapper_SetSearchDistance( this->_GetHandle() , value );
	}

	inline real spSurfaceMapper::GetSearchDistance(  ) const
	{
		return this->_GetAPI()->fpSurfaceMapper_GetSearchDistance( this->_GetHandle() );
	}

	inline void spSurfaceMapper::SetSearchOffset( real value ) const
	{
		this->_GetAPI()->fpSurfaceMapper_SetSearchOffset( this->_GetHandle() , value );
	}

	inline real spSurfaceMapper::GetSearchOffset(  ) const
	{
		return this->_GetAPI()->fpSurfaceMapper_GetSearchOffset( this->_GetHandle() );
	}

	inline void spSurfaceMapper::RunSurfaceMapping(  ) const
	{
		this->_GetAPI()->fpSurfaceMapper_RunSurfaceMapping( this->_GetHandle() );
	}

	/// Implementations of spOcclusionMeshProcessor methods
	inline spOcclusionMeshProcessor::spOcclusionMeshProcessor() : spProcessingObject( nullptr , nullptr ) {}
	inline spOcclusionMeshProcessor::spOcclusionMeshProcessor( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spProcessingObject( _sg , _intfptr ) {}
	inline spOcclusionMeshProcessor::spOcclusionMeshProcessor( const spOcclusionMeshProcessor &p ) : spProcessingObject( p._GetAPI() , p._GetHandle() ) {}
	inline spOcclusionMeshProcessor & spOcclusionMeshProcessor::operator= ( const spOcclusionMeshProcessor &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spOcclusionMeshProcessor spOcclusionMeshProcessor::SafeCast( spObject other ) { spOcclusionMeshProcessor ret; if( other.NonNull() && other.IsA("IOcclusionMeshProcessor") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spOcclusionMeshProcessor* spOcclusionMeshProcessor::operator->() const { return this; }
	inline spOcclusionMeshProcessor::spOcclusionMeshProcessor( const _NilStruct & ) : spProcessingObject( nullptr , nullptr ) {}

	inline void spOcclusionMeshProcessor::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpOcclusionMeshProcessor_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spOcclusionMeshProcessor::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpOcclusionMeshProcessor_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spOcclusionMeshSettings spOcclusionMeshProcessor::GetOcclusionMeshSettings(  ) const
	{
		spOcclusionMeshSettings retobj = spOcclusionMeshSettings( this->_GetAPI() , this->_GetAPI()->fpOcclusionMeshProcessor_GetOcclusionMeshSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spOcclusionMeshSettings methods
	inline spOcclusionMeshSettings::spOcclusionMeshSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spOcclusionMeshSettings::spOcclusionMeshSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spOcclusionMeshSettings::spOcclusionMeshSettings( const spOcclusionMeshSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spOcclusionMeshSettings & spOcclusionMeshSettings::operator= ( const spOcclusionMeshSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spOcclusionMeshSettings spOcclusionMeshSettings::SafeCast( spObject other ) { spOcclusionMeshSettings ret; if( other.NonNull() && other.IsA("IOcclusionMeshSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spOcclusionMeshSettings* spOcclusionMeshSettings::operator->() const { return this; }
	inline spOcclusionMeshSettings::spOcclusionMeshSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spOcclusionMeshSettings::SetOnScreenSize( unsigned int value ) const
	{
		this->_GetAPI()->fpOcclusionMeshSettings_SetOnScreenSize( this->_GetHandle() , value );
	}

	inline unsigned int spOcclusionMeshSettings::GetOnScreenSize(  ) const
	{
		return this->_GetAPI()->fpOcclusionMeshSettings_GetOnScreenSize( this->_GetHandle() );
	}

	inline void spOcclusionMeshSettings::SetOnScreenErrorTolerance( unsigned int value ) const
	{
		this->_GetAPI()->fpOcclusionMeshSettings_SetOnScreenErrorTolerance( this->_GetHandle() , value );
	}

	inline unsigned int spOcclusionMeshSettings::GetOnScreenErrorTolerance(  ) const
	{
		return this->_GetAPI()->fpOcclusionMeshSettings_GetOnScreenErrorTolerance( this->_GetHandle() );
	}

	inline void spOcclusionMeshSettings::SetInvertOutputMesh( bool value ) const
	{
		this->_GetAPI()->fpOcclusionMeshSettings_SetInvertOutputMesh( this->_GetHandle() , value );
	}

	inline bool spOcclusionMeshSettings::GetInvertOutputMesh(  ) const
	{
		return this->_GetAPI()->fpOcclusionMeshSettings_GetInvertOutputMesh( this->_GetHandle() );
	}

	inline void spOcclusionMeshSettings::SetTransferSkinning( bool value ) const
	{
		this->_GetAPI()->fpOcclusionMeshSettings_SetTransferSkinning( this->_GetHandle() , value );
	}

	inline bool spOcclusionMeshSettings::GetTransferSkinning(  ) const
	{
		return this->_GetAPI()->fpOcclusionMeshSettings_GetTransferSkinning( this->_GetHandle() );
	}

	inline void spOcclusionMeshSettings::SetUseCameras( bool value ) const
	{
		this->_GetAPI()->fpOcclusionMeshSettings_SetUseCameras( this->_GetHandle() , value );
	}

	inline bool spOcclusionMeshSettings::GetUseCameras(  ) const
	{
		return this->_GetAPI()->fpOcclusionMeshSettings_GetUseCameras( this->_GetHandle() );
	}

	inline void spOcclusionMeshSettings::SetCameraSelectionSetId( int value ) const
	{
		this->_GetAPI()->fpOcclusionMeshSettings_SetCameraSelectionSetId( this->_GetHandle() , value );
	}

	inline int spOcclusionMeshSettings::GetCameraSelectionSetId(  ) const
	{
		return this->_GetAPI()->fpOcclusionMeshSettings_GetCameraSelectionSetId( this->_GetHandle() );
	}

	inline void spOcclusionMeshSettings::SetCameraSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpOcclusionMeshSettings_SetCameraSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spOcclusionMeshSettings::GetCameraSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpOcclusionMeshSettings_GetCameraSelectionSetName( this->_GetHandle() ));
	}

	inline void spOcclusionMeshSettings::SetOcclusionMode( Simplygon::EOcclusionMode value ) const
	{
		this->_GetAPI()->fpOcclusionMeshSettings_SetOcclusionMode( this->_GetHandle() , (EOcclusionMode)value );
	}

	inline Simplygon::EOcclusionMode spOcclusionMeshSettings::GetOcclusionMode(  ) const
	{
		return this->_GetAPI()->fpOcclusionMeshSettings_GetOcclusionMode( this->_GetHandle() );
	}

	/// Implementations of spImageComparer methods
	inline spImageComparer::spImageComparer() : spObject( nullptr , nullptr ) {}
	inline spImageComparer::spImageComparer( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spImageComparer::spImageComparer( const spImageComparer &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spImageComparer & spImageComparer::operator= ( const spImageComparer &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spImageComparer spImageComparer::SafeCast( spObject other ) { spImageComparer ret; if( other.NonNull() && other.IsA("IImageComparer") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spImageComparer* spImageComparer::operator->() const { return this; }
	inline spImageComparer::spImageComparer( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spImageComparer::SetImages( const spImageData & beforeImg , const spImageData & afterImg ) const
	{
		this->_GetAPI()->fpImageComparer_SetImages( this->_GetHandle() , hIntf(beforeImg) , hIntf(afterImg) );
	}

	inline void spImageComparer::SetImageMasks( const spBoolArray & beforeImgMask , const spBoolArray & afterImgMask ) const
	{
		this->_GetAPI()->fpImageComparer_SetImageMasks( this->_GetHandle() , hIntf(beforeImgMask) , hIntf(afterImgMask) );
	}

	inline int spImageComparer::CompareImages(  ) const
	{
		return this->_GetAPI()->fpImageComparer_CompareImages( this->_GetHandle() );
	}

	inline void spImageComparer::SetImagePathBeforeImg( const char * value ) const
	{
		this->_GetAPI()->fpImageComparer_SetImagePathBeforeImg( this->_GetHandle() , value );
	}

	inline void spImageComparer::SetImagePathAfterImg( const char * value ) const
	{
		this->_GetAPI()->fpImageComparer_SetImagePathAfterImg( this->_GetHandle() , value );
	}

	inline void spImageComparer::SetImageDiffExportPath( const char * value ) const
	{
		this->_GetAPI()->fpImageComparer_SetImageDiffExportPath( this->_GetHandle() , value );
	}

	inline void spImageComparer::SetDiffHighlightsExportPath( const char * value ) const
	{
		this->_GetAPI()->fpImageComparer_SetDiffHighlightsExportPath( this->_GetHandle() , value );
	}

	inline Simplygon::spImageData spImageComparer::GetImageDiff(  ) const
	{
		spImageData retobj = spImageData( this->_GetAPI() , this->_GetAPI()->fpImageComparer_GetImageDiff( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spImageData spImageComparer::GetDiffHighlights(  ) const
	{
		spImageData retobj = spImageData( this->_GetAPI() , this->_GetAPI()->fpImageComparer_GetDiffHighlights( this->_GetHandle() ));
		return retobj;
	}

	inline unsigned int spImageComparer::GetTotalMaskCoverage(  ) const
	{
		return this->_GetAPI()->fpImageComparer_GetTotalMaskCoverage( this->_GetHandle() );
	}

	inline float spImageComparer::GetMaxPixelError(  ) const
	{
		return this->_GetAPI()->fpImageComparer_GetMaxPixelError( this->_GetHandle() );
	}

	inline float spImageComparer::GetTotalPixelError(  ) const
	{
		return this->_GetAPI()->fpImageComparer_GetTotalPixelError( this->_GetHandle() );
	}

	inline unsigned int spImageComparer::GetHighlightAreaCoverage(  ) const
	{
		return this->_GetAPI()->fpImageComparer_GetHighlightAreaCoverage( this->_GetHandle() );
	}

	inline void spImageComparer::SetSilhouetteDifferenceError( float value ) const
	{
		this->_GetAPI()->fpImageComparer_SetSilhouetteDifferenceError( this->_GetHandle() , value );
	}

	/// Implementations of spRecommendedTextureSizeCalculator methods
	inline spRecommendedTextureSizeCalculator::spRecommendedTextureSizeCalculator() : spObject( nullptr , nullptr ) {}
	inline spRecommendedTextureSizeCalculator::spRecommendedTextureSizeCalculator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spRecommendedTextureSizeCalculator::spRecommendedTextureSizeCalculator( const spRecommendedTextureSizeCalculator &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spRecommendedTextureSizeCalculator & spRecommendedTextureSizeCalculator::operator= ( const spRecommendedTextureSizeCalculator &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spRecommendedTextureSizeCalculator spRecommendedTextureSizeCalculator::SafeCast( spObject other ) { spRecommendedTextureSizeCalculator ret; if( other.NonNull() && other.IsA("IRecommendedTextureSizeCalculator") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spRecommendedTextureSizeCalculator* spRecommendedTextureSizeCalculator::operator->() const { return this; }
	inline spRecommendedTextureSizeCalculator::spRecommendedTextureSizeCalculator( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spRecommendedTextureSizeCalculator::SetForcePower2Texture( bool value ) const
	{
		this->_GetAPI()->fpRecommendedTextureSizeCalculator_SetForcePower2Texture( this->_GetHandle() , value );
	}

	inline bool spRecommendedTextureSizeCalculator::GetForcePower2Texture(  ) const
	{
		return this->_GetAPI()->fpRecommendedTextureSizeCalculator_GetForcePower2Texture( this->_GetHandle() );
	}

	inline void spRecommendedTextureSizeCalculator::SetRecommendedTextureSizeMultiplier( real value ) const
	{
		this->_GetAPI()->fpRecommendedTextureSizeCalculator_SetRecommendedTextureSizeMultiplier( this->_GetHandle() , value );
	}

	inline real spRecommendedTextureSizeCalculator::GetRecommendedTextureSizeMultiplier(  ) const
	{
		return this->_GetAPI()->fpRecommendedTextureSizeCalculator_GetRecommendedTextureSizeMultiplier( this->_GetHandle() );
	}

	inline unsigned int spRecommendedTextureSizeCalculator::GetRecommendedWidth(  ) const
	{
		return this->_GetAPI()->fpRecommendedTextureSizeCalculator_GetRecommendedWidth( this->_GetHandle() );
	}

	inline unsigned int spRecommendedTextureSizeCalculator::GetRecommendedHeight(  ) const
	{
		return this->_GetAPI()->fpRecommendedTextureSizeCalculator_GetRecommendedHeight( this->_GetHandle() );
	}

	inline void spRecommendedTextureSizeCalculator::CalculateBasedOnDeviation( const spGeometryData & geom , real deviation ) const
	{
		this->_GetAPI()->fpRecommendedTextureSizeCalculator_CalculateBasedOnDeviation( this->_GetHandle() , hIntf(geom) , deviation );
	}

	inline void spRecommendedTextureSizeCalculator::CalculateBasedOnOnScreenSize( const spGeometryData & geom , unsigned int onScreenSize ) const
	{
		this->_GetAPI()->fpRecommendedTextureSizeCalculator_CalculateBasedOnOnScreenSize( this->_GetHandle() , hIntf(geom) , onScreenSize );
	}

	/// Implementations of spPartRemover methods
	inline spPartRemover::spPartRemover() : spObject( nullptr , nullptr ) {}
	inline spPartRemover::spPartRemover( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spPartRemover::spPartRemover( const spPartRemover &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spPartRemover & spPartRemover::operator= ( const spPartRemover &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spPartRemover spPartRemover::SafeCast( spObject other ) { spPartRemover ret; if( other.NonNull() && other.IsA("IPartRemover") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spPartRemover* spPartRemover::operator->() const { return this; }
	inline spPartRemover::spPartRemover( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spPartRemover::RunPartRemoval(  ) const
	{
		this->_GetAPI()->fpPartRemover_RunPartRemoval( this->_GetHandle() );
	}

	inline void spPartRemover::SetGeometry( const spGeometryData & value ) const
	{
		this->_GetAPI()->fpPartRemover_SetGeometry( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spGeometryData spPartRemover::GetGeometry(  ) const
	{
		spGeometryData retobj = spGeometryData( this->_GetAPI() , this->_GetAPI()->fpPartRemover_GetGeometry( this->_GetHandle() ));
		return retobj;
	}

	inline void spPartRemover::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpPartRemover_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spPartRemover::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpPartRemover_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline void spPartRemover::SetSizeThreshold( real value ) const
	{
		this->_GetAPI()->fpPartRemover_SetSizeThreshold( this->_GetHandle() , value );
	}

	inline real spPartRemover::GetSizeThreshold(  ) const
	{
		return this->_GetAPI()->fpPartRemover_GetSizeThreshold( this->_GetHandle() );
	}

	inline void spPartRemover::SetUsePerMaterialSizeThresholds( bool value ) const
	{
		this->_GetAPI()->fpPartRemover_SetUsePerMaterialSizeThresholds( this->_GetHandle() , value );
	}

	inline bool spPartRemover::GetUsePerMaterialSizeThresholds(  ) const
	{
		return this->_GetAPI()->fpPartRemover_GetUsePerMaterialSizeThresholds( this->_GetHandle() );
	}

	inline Simplygon::spRealArray spPartRemover::GetPerMaterialSizeThresholds(  ) const
	{
		spRealArray retobj = spRealArray( this->_GetAPI() , this->_GetAPI()->fpPartRemover_GetPerMaterialSizeThresholds( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spWelder methods
	inline spWelder::spWelder() : spProcessingObject( nullptr , nullptr ) {}
	inline spWelder::spWelder( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spProcessingObject( _sg , _intfptr ) {}
	inline spWelder::spWelder( const spWelder &p ) : spProcessingObject( p._GetAPI() , p._GetHandle() ) {}
	inline spWelder & spWelder::operator= ( const spWelder &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spWelder spWelder::SafeCast( spObject other ) { spWelder ret; if( other.NonNull() && other.IsA("IWelder") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spWelder* spWelder::operator->() const { return this; }
	inline spWelder::spWelder( const _NilStruct & ) : spProcessingObject( nullptr , nullptr ) {}

	inline void spWelder::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpWelder_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spWelder::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpWelder_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline void spWelder::SetProcessSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpWelder_SetProcessSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spWelder::GetProcessSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpWelder_GetProcessSelectionSetID( this->_GetHandle() );
	}

	inline void spWelder::SetProcessSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpWelder_SetProcessSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spWelder::GetProcessSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpWelder_GetProcessSelectionSetName( this->_GetHandle() ));
	}

	inline void spWelder::SetWeldDist( real value ) const
	{
		this->_GetAPI()->fpWelder_SetWeldDist( this->_GetHandle() , value );
	}

	inline real spWelder::GetWeldDist(  ) const
	{
		return this->_GetAPI()->fpWelder_GetWeldDist( this->_GetHandle() );
	}

	inline void spWelder::WeldGeometry( const spGeometryData & geom ) const
	{
		this->_GetAPI()->fpWelder_WeldGeometry( this->_GetHandle() , hIntf(geom) );
	}

	inline void spWelder::SetUpdateExtents( bool value ) const
	{
		this->_GetAPI()->fpWelder_SetUpdateExtents( this->_GetHandle() , value );
	}

	inline bool spWelder::GetUpdateExtents(  ) const
	{
		return this->_GetAPI()->fpWelder_GetUpdateExtents( this->_GetHandle() );
	}

	inline void spWelder::SetProgressivePasses( unsigned int value ) const
	{
		this->_GetAPI()->fpWelder_SetProgressivePasses( this->_GetHandle() , value );
	}

	inline unsigned int spWelder::GetProgressivePasses(  ) const
	{
		return this->_GetAPI()->fpWelder_GetProgressivePasses( this->_GetHandle() );
	}

	inline void spWelder::SetIgnoreVertexLocks( bool value ) const
	{
		this->_GetAPI()->fpWelder_SetIgnoreVertexLocks( this->_GetHandle() , value );
	}

	inline bool spWelder::GetIgnoreVertexLocks(  ) const
	{
		return this->_GetAPI()->fpWelder_GetIgnoreVertexLocks( this->_GetHandle() );
	}

	inline void spWelder::SetCompactMesh( bool value ) const
	{
		this->_GetAPI()->fpWelder_SetCompactMesh( this->_GetHandle() , value );
	}

	inline bool spWelder::GetCompactMesh(  ) const
	{
		return this->_GetAPI()->fpWelder_GetCompactMesh( this->_GetHandle() );
	}

	inline void spWelder::SetOnlyBorders( bool value ) const
	{
		this->_GetAPI()->fpWelder_SetOnlyBorders( this->_GetHandle() , value );
	}

	inline bool spWelder::GetOnlyBorders(  ) const
	{
		return this->_GetAPI()->fpWelder_GetOnlyBorders( this->_GetHandle() );
	}

	inline void spWelder::SetOnlyWithinMaterial( bool value ) const
	{
		this->_GetAPI()->fpWelder_SetOnlyWithinMaterial( this->_GetHandle() , value );
	}

	inline bool spWelder::GetOnlyWithinMaterial(  ) const
	{
		return this->_GetAPI()->fpWelder_GetOnlyWithinMaterial( this->_GetHandle() );
	}

	inline void spWelder::SetOnlyWithinSceneNode( bool value ) const
	{
		this->_GetAPI()->fpWelder_SetOnlyWithinSceneNode( this->_GetHandle() , value );
	}

	inline bool spWelder::GetOnlyWithinSceneNode(  ) const
	{
		return this->_GetAPI()->fpWelder_GetOnlyWithinSceneNode( this->_GetHandle() );
	}

	inline void spWelder::SetOnlyBetweenSceneNodes( bool value ) const
	{
		this->_GetAPI()->fpWelder_SetOnlyBetweenSceneNodes( this->_GetHandle() , value );
	}

	inline bool spWelder::GetOnlyBetweenSceneNodes(  ) const
	{
		return this->_GetAPI()->fpWelder_GetOnlyBetweenSceneNodes( this->_GetHandle() );
	}

	/// Implementations of spTJunctionEliminator methods
	inline spTJunctionEliminator::spTJunctionEliminator() : spObject( nullptr , nullptr ) {}
	inline spTJunctionEliminator::spTJunctionEliminator( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spTJunctionEliminator::spTJunctionEliminator( const spTJunctionEliminator &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spTJunctionEliminator & spTJunctionEliminator::operator= ( const spTJunctionEliminator &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spTJunctionEliminator spTJunctionEliminator::SafeCast( spObject other ) { spTJunctionEliminator ret; if( other.NonNull() && other.IsA("ITJunctionEliminator") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spTJunctionEliminator* spTJunctionEliminator::operator->() const { return this; }
	inline spTJunctionEliminator::spTJunctionEliminator( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spTJunctionEliminator::SetScene( const spScene & value ) const
	{
		this->_GetAPI()->fpTJunctionEliminator_SetScene( this->_GetHandle() , hIntf(value) );
	}

	inline Simplygon::spScene spTJunctionEliminator::GetScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpTJunctionEliminator_GetScene( this->_GetHandle() ));
		return retobj;
	}

	inline void spTJunctionEliminator::RemoveTJunctionsInGeometry( const spGeometryData & geom ) const
	{
		this->_GetAPI()->fpTJunctionEliminator_RemoveTJunctionsInGeometry( this->_GetHandle() , hIntf(geom) );
	}

	inline void spTJunctionEliminator::RemoveTJunctions(  ) const
	{
		this->_GetAPI()->fpTJunctionEliminator_RemoveTJunctions( this->_GetHandle() );
	}

	inline void spTJunctionEliminator::SetWeldDist( real value ) const
	{
		this->_GetAPI()->fpTJunctionEliminator_SetWeldDist( this->_GetHandle() , value );
	}

	inline real spTJunctionEliminator::GetWeldDist(  ) const
	{
		return this->_GetAPI()->fpTJunctionEliminator_GetWeldDist( this->_GetHandle() );
	}

	inline void spTJunctionEliminator::SetOnlyObjectBoundaryFlag( bool value ) const
	{
		this->_GetAPI()->fpTJunctionEliminator_SetOnlyObjectBoundaryFlag( this->_GetHandle() , value );
	}

	inline bool spTJunctionEliminator::GetOnlyObjectBoundaryFlag(  ) const
	{
		return this->_GetAPI()->fpTJunctionEliminator_GetOnlyObjectBoundaryFlag( this->_GetHandle() );
	}

	inline void spTJunctionEliminator::SetProcessSelectionSetID( rid value ) const
	{
		this->_GetAPI()->fpTJunctionEliminator_SetProcessSelectionSetID( this->_GetHandle() , value );
	}

	inline rid spTJunctionEliminator::GetProcessSelectionSetID(  ) const
	{
		return this->_GetAPI()->fpTJunctionEliminator_GetProcessSelectionSetID( this->_GetHandle() );
	}

	inline void spTJunctionEliminator::SetProcessSelectionSetName( const char * value ) const
	{
		this->_GetAPI()->fpTJunctionEliminator_SetProcessSelectionSetName( this->_GetHandle() , value );
	}

	inline spString spTJunctionEliminator::GetProcessSelectionSetName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpTJunctionEliminator_GetProcessSelectionSetName( this->_GetHandle() ));
	}

	inline void spTJunctionEliminator::SetOnlyWithinMaterialFlag( bool value ) const
	{
		this->_GetAPI()->fpTJunctionEliminator_SetOnlyWithinMaterialFlag( this->_GetHandle() , value );
	}

	inline bool spTJunctionEliminator::GetOnlyWithinMaterialFlag(  ) const
	{
		return this->_GetAPI()->fpTJunctionEliminator_GetOnlyWithinMaterialFlag( this->_GetHandle() );
	}

	inline void spTJunctionEliminator::SetOnlyWithinSceneNode( bool value ) const
	{
		this->_GetAPI()->fpTJunctionEliminator_SetOnlyWithinSceneNode( this->_GetHandle() , value );
	}

	inline bool spTJunctionEliminator::GetOnlyWithinSceneNode(  ) const
	{
		return this->_GetAPI()->fpTJunctionEliminator_GetOnlyWithinSceneNode( this->_GetHandle() );
	}

	/// Implementations of spPipeline methods
	inline spPipeline::spPipeline() : spObject( nullptr , nullptr ) {}
	inline spPipeline::spPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spPipeline::spPipeline( const spPipeline &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spPipeline & spPipeline::operator= ( const spPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spPipeline spPipeline::SafeCast( spObject other ) { spPipeline ret; if( other.NonNull() && other.IsA("IPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spPipeline* spPipeline::operator->() const { return this; }
	inline spPipeline::spPipeline( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::EProcessStatus spPipeline::RunSceneFromFile( const char * input_scene , const char * output_scene , Simplygon::EPipelineRunMode run_mode ) const
	{
		return this->_GetAPI()->fpPipeline_RunSceneFromFile( this->_GetHandle() , input_scene , output_scene , (EPipelineRunMode)run_mode );
	}

	inline Simplygon::EProcessStatus spPipeline::RunScene( const spScene & scene , Simplygon::EPipelineRunMode run_mode ) const
	{
		return this->_GetAPI()->fpPipeline_RunScene( this->_GetHandle() , hIntf(scene) , (EPipelineRunMode)run_mode );
	}

	inline void spPipeline::AddMaterialCaster( const spMaterialCaster & MaterialCaster , unsigned int MaterialIndex ) const
	{
		this->_GetAPI()->fpPipeline_AddMaterialCaster( this->_GetHandle() , hIntf(MaterialCaster) , MaterialIndex );
	}

	inline Simplygon::spMaterialCaster spPipeline::AddMaterialCasterByType( const char * CasterType , unsigned int MaterialIndex ) const
	{
		spMaterialCaster retobj = spMaterialCaster( this->_GetAPI() , this->_GetAPI()->fpPipeline_AddMaterialCasterByType( this->_GetHandle() , CasterType , MaterialIndex ));
		return retobj;
	}

	inline Simplygon::spObjectCollection spPipeline::GetMaterialCasters(  ) const
	{
		spObjectCollection retobj = spObjectCollection( this->_GetAPI() , this->_GetAPI()->fpPipeline_GetMaterialCasters( this->_GetHandle() ));
		return retobj;
	}

	inline unsigned int spPipeline::GetMaterialCasterCount(  ) const
	{
		return this->_GetAPI()->fpPipeline_GetMaterialCasterCount( this->_GetHandle() );
	}

	inline Simplygon::spMaterialCaster spPipeline::GetMaterialCasterByIndex( unsigned int index ) const
	{
		spMaterialCaster retobj = spMaterialCaster( this->_GetAPI() , this->_GetAPI()->fpPipeline_GetMaterialCasterByIndex( this->_GetHandle() , index ));
		return retobj;
	}

	inline Simplygon::spPipelineSettings spPipeline::GetPipelineSettings(  ) const
	{
		spPipelineSettings retobj = spPipelineSettings( this->_GetAPI() , this->_GetAPI()->fpPipeline_GetPipelineSettings( this->_GetHandle() ));
		return retobj;
	}

	inline bool spPipeline::SetBoolParameter( const char * name , bool value ) const
	{
		return this->_GetAPI()->fpPipeline_SetBoolParameter( this->_GetHandle() , name , value );
	}

	inline bool spPipeline::SetIntParameter( const char * name , int value ) const
	{
		return this->_GetAPI()->fpPipeline_SetIntParameter( this->_GetHandle() , name , value );
	}

	inline bool spPipeline::SetUIntParameter( const char * name , unsigned int value ) const
	{
		return this->_GetAPI()->fpPipeline_SetUIntParameter( this->_GetHandle() , name , value );
	}

	inline bool spPipeline::SetDoubleParameter( const char * name , double value ) const
	{
		return this->_GetAPI()->fpPipeline_SetDoubleParameter( this->_GetHandle() , name , value );
	}

	inline bool spPipeline::SetStringParameter( const char * name , const char * value ) const
	{
		return this->_GetAPI()->fpPipeline_SetStringParameter( this->_GetHandle() , name , value );
	}

	inline bool spPipeline::SetEnumParameter( const char * name , int value , Simplygon::ESettingValueType valueEnumType ) const
	{
		return this->_GetAPI()->fpPipeline_SetEnumParameter( this->_GetHandle() , name , value , (ESettingValueType)valueEnumType );
	}

	inline bool spPipeline::SetParameterFromString( const char * name , const char * value ) const
	{
		return this->_GetAPI()->fpPipeline_SetParameterFromString( this->_GetHandle() , name , value );
	}

	inline bool spPipeline::GetBoolParameter( const char * name ) const
	{
		return this->_GetAPI()->fpPipeline_GetBoolParameter( this->_GetHandle() , name );
	}

	inline int spPipeline::GetIntParameter( const char * name ) const
	{
		return this->_GetAPI()->fpPipeline_GetIntParameter( this->_GetHandle() , name );
	}

	inline unsigned int spPipeline::GetUIntParameter( const char * name ) const
	{
		return this->_GetAPI()->fpPipeline_GetUIntParameter( this->_GetHandle() , name );
	}

	inline double spPipeline::GetDoubleParameter( const char * name ) const
	{
		return this->_GetAPI()->fpPipeline_GetDoubleParameter( this->_GetHandle() , name );
	}

	inline spString spPipeline::GetStringParameter( const char * name ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpPipeline_GetStringParameter( this->_GetHandle() , name ));
	}

	inline int spPipeline::GetEnumParameter( const char * name ) const
	{
		return this->_GetAPI()->fpPipeline_GetEnumParameter( this->_GetHandle() , name );
	}

	inline Simplygon::ESettingValueType spPipeline::GetParameterType( const char * name ) const
	{
		return this->_GetAPI()->fpPipeline_GetParameterType( this->_GetHandle() , name );
	}

	inline Simplygon::spMappingImageSettings spPipeline::GetMappingImageSettings(  ) const
	{
		spMappingImageSettings retobj = spMappingImageSettings( this->_GetAPI() , this->_GetAPI()->fpPipeline_GetMappingImageSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spMappingImage spPipeline::GetMappingImage( unsigned int materialIndex ) const
	{
		spMappingImage retobj = spMappingImage( this->_GetAPI() , this->_GetAPI()->fpPipeline_GetMappingImage( this->_GetHandle() , materialIndex ));
		return retobj;
	}

	inline Simplygon::spPipeline spPipeline::GetCascadedPipelineByIndex( unsigned int index ) const
	{
		spPipeline retobj = spPipeline( this->_GetAPI() , this->_GetAPI()->fpPipeline_GetCascadedPipelineByIndex( this->_GetHandle() , index ));
		return retobj;
	}

	inline void spPipeline::AddCascadedPipeline( const spPipeline & pipeline ) const
	{
		this->_GetAPI()->fpPipeline_AddCascadedPipeline( this->_GetHandle() , hIntf(pipeline) );
	}

	inline void spPipeline::RemoveCascadedPipeline( const spPipeline & pipeline ) const
	{
		this->_GetAPI()->fpPipeline_RemoveCascadedPipeline( this->_GetHandle() , hIntf(pipeline) );
	}

	inline unsigned int spPipeline::GetCascadedPipelineCount(  ) const
	{
		return this->_GetAPI()->fpPipeline_GetCascadedPipelineCount( this->_GetHandle() );
	}

	inline Simplygon::spScene spPipeline::GetProcessedScene(  ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpPipeline_GetProcessedScene( this->_GetHandle() ));
		return retobj;
	}

	inline real spPipeline::GetPercentDone(  ) const
	{
		return this->_GetAPI()->fpPipeline_GetPercentDone( this->_GetHandle() );
	}

	inline void spPipeline::GetActiveSelectionSets( const spStringArray & sets ) const
	{
		this->_GetAPI()->fpPipeline_GetActiveSelectionSets( this->_GetHandle() , hIntf(sets) );
	}

	inline Simplygon::spPipeline spPipeline::NewCopy(  ) const
	{
		spPipeline retobj = spPipeline( this->_GetAPI() , this->_GetAPI()->fpPipeline_NewCopy( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spPipelineBatch methods
	inline spPipelineBatch::spPipelineBatch() : spObject( nullptr , nullptr ) {}
	inline spPipelineBatch::spPipelineBatch( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spPipelineBatch::spPipelineBatch( const spPipelineBatch &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spPipelineBatch & spPipelineBatch::operator= ( const spPipelineBatch &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spPipelineBatch spPipelineBatch::SafeCast( spObject other ) { spPipelineBatch ret; if( other.NonNull() && other.IsA("IPipelineBatch") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spPipelineBatch* spPipelineBatch::operator->() const { return this; }
	inline spPipelineBatch::spPipelineBatch( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline void spPipelineBatch::SetStoragePath( const char * path ) const
	{
		this->_GetAPI()->fpPipelineBatch_SetStoragePath( this->_GetHandle() , path );
	}

	inline spString spPipelineBatch::GetStoragePath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpPipelineBatch_GetStoragePath( this->_GetHandle() ));
	}

	inline unsigned int spPipelineBatch::Queue( const spPipeline & pipeline , const spScene & scene ) const
	{
		return this->_GetAPI()->fpPipelineBatch_Queue( this->_GetHandle() , hIntf(pipeline) , hIntf(scene) );
	}

	inline unsigned int spPipelineBatch::QueueFile( const char * pipeline , const char * scene ) const
	{
		return this->_GetAPI()->fpPipelineBatch_QueueFile( this->_GetHandle() , pipeline , scene );
	}

	inline Simplygon::EProcessStatus spPipelineBatch::Run( Simplygon::EPipelineRunMode runMode ) const
	{
		return this->_GetAPI()->fpPipelineBatch_Run( this->_GetHandle() , (EPipelineRunMode)runMode );
	}

	inline Simplygon::spScene spPipelineBatch::LoadProcessedScene( unsigned int handle ) const
	{
		spScene retobj = spScene( this->_GetAPI() , this->_GetAPI()->fpPipelineBatch_LoadProcessedScene( this->_GetHandle() , handle ));
		return retobj;
	}

	inline unsigned int spPipelineBatch::GetBatchCount(  ) const
	{
		return this->_GetAPI()->fpPipelineBatch_GetBatchCount( this->_GetHandle() );
	}

	inline spString spPipelineBatch::GetPipelinePath( unsigned int index ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpPipelineBatch_GetPipelinePath( this->_GetHandle() , index ));
	}

	inline spString spPipelineBatch::GetScenePath( unsigned int index ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpPipelineBatch_GetScenePath( this->_GetHandle() , index ));
	}

	inline spString spPipelineBatch::GetOutputPath( unsigned int index ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpPipelineBatch_GetOutputPath( this->_GetHandle() , index ));
	}

	inline void spPipelineBatch::Clear(  ) const
	{
		this->_GetAPI()->fpPipelineBatch_Clear( this->_GetHandle() );
	}

	inline void spPipelineBatch::SetCascadedRunMode( Simplygon::EPipelineRunMode mode ) const
	{
		this->_GetAPI()->fpPipelineBatch_SetCascadedRunMode( this->_GetHandle() , (EPipelineRunMode)mode );
	}

	inline Simplygon::EPipelineRunMode spPipelineBatch::GetCascadedRunMode(  ) const
	{
		return this->_GetAPI()->fpPipelineBatch_GetCascadedRunMode( this->_GetHandle() );
	}

	inline void spPipelineBatch::SetSimplygonBatchPath( const char * value ) const
	{
		this->_GetAPI()->fpPipelineBatch_SetSimplygonBatchPath( this->_GetHandle() , value );
	}

	inline spString spPipelineBatch::GetSimplygonBatchPath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpPipelineBatch_GetSimplygonBatchPath( this->_GetHandle() ));
	}

	/// Implementations of spPipelineSerializer methods
	inline spPipelineSerializer::spPipelineSerializer() : spObject( nullptr , nullptr ) {}
	inline spPipelineSerializer::spPipelineSerializer( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spObject( _sg , _intfptr ) {}
	inline spPipelineSerializer::spPipelineSerializer( const spPipelineSerializer &p ) : spObject( p._GetAPI() , p._GetHandle() ) {}
	inline spPipelineSerializer & spPipelineSerializer::operator= ( const spPipelineSerializer &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spPipelineSerializer spPipelineSerializer::SafeCast( spObject other ) { spPipelineSerializer ret; if( other.NonNull() && other.IsA("IPipelineSerializer") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spPipelineSerializer* spPipelineSerializer::operator->() const { return this; }
	inline spPipelineSerializer::spPipelineSerializer( const _NilStruct & ) : spObject( nullptr , nullptr ) {}

	inline Simplygon::spPipeline spPipelineSerializer::LoadPipelineFromFile( const char * path ) const
	{
		spPipeline retobj = spPipeline( this->_GetAPI() , this->_GetAPI()->fpPipelineSerializer_LoadPipelineFromFile( this->_GetHandle() , path ));
		return retobj;
	}

	inline void spPipelineSerializer::SavePipelineToFile( const char * path , const spPipeline & pipeline ) const
	{
		this->_GetAPI()->fpPipelineSerializer_SavePipelineToFile( this->_GetHandle() , path , hIntf(pipeline) );
	}

	inline Simplygon::spPipelineBatch spPipelineSerializer::LoadPipelineBatchFromFile( const char * path ) const
	{
		spPipelineBatch retobj = spPipelineBatch( this->_GetAPI() , this->_GetAPI()->fpPipelineSerializer_LoadPipelineBatchFromFile( this->_GetHandle() , path ));
		return retobj;
	}

	inline void spPipelineSerializer::SavePipelineBatchToFile( const char * path , const spPipelineBatch & batch ) const
	{
		this->_GetAPI()->fpPipelineSerializer_SavePipelineBatchToFile( this->_GetHandle() , path , hIntf(batch) );
	}

	/// Implementations of spReductionPipeline methods
	inline spReductionPipeline::spReductionPipeline() : spPipeline( nullptr , nullptr ) {}
	inline spReductionPipeline::spReductionPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spPipeline( _sg , _intfptr ) {}
	inline spReductionPipeline::spReductionPipeline( const spReductionPipeline &p ) : spPipeline( p._GetAPI() , p._GetHandle() ) {}
	inline spReductionPipeline & spReductionPipeline::operator= ( const spReductionPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spReductionPipeline spReductionPipeline::SafeCast( spObject other ) { spReductionPipeline ret; if( other.NonNull() && other.IsA("IReductionPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spReductionPipeline* spReductionPipeline::operator->() const { return this; }
	inline spReductionPipeline::spReductionPipeline( const _NilStruct & ) : spPipeline( nullptr , nullptr ) {}

	inline Simplygon::spReductionSettings spReductionPipeline::GetReductionSettings(  ) const
	{
		spReductionSettings retobj = spReductionSettings( this->_GetAPI() , this->_GetAPI()->fpReductionPipeline_GetReductionSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spRepairSettings spReductionPipeline::GetRepairSettings(  ) const
	{
		spRepairSettings retobj = spRepairSettings( this->_GetAPI() , this->_GetAPI()->fpReductionPipeline_GetRepairSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spNormalCalculationSettings spReductionPipeline::GetNormalCalculationSettings(  ) const
	{
		spNormalCalculationSettings retobj = spNormalCalculationSettings( this->_GetAPI() , this->_GetAPI()->fpReductionPipeline_GetNormalCalculationSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVisibilitySettings spReductionPipeline::GetVisibilitySettings(  ) const
	{
		spVisibilitySettings retobj = spVisibilitySettings( this->_GetAPI() , this->_GetAPI()->fpReductionPipeline_GetVisibilitySettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spBoneSettings spReductionPipeline::GetBoneSettings(  ) const
	{
		spBoneSettings retobj = spBoneSettings( this->_GetAPI() , this->_GetAPI()->fpReductionPipeline_GetBoneSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVertexWeightSettings spReductionPipeline::GetVertexWeightSettings(  ) const
	{
		spVertexWeightSettings retobj = spVertexWeightSettings( this->_GetAPI() , this->_GetAPI()->fpReductionPipeline_GetVertexWeightSettings( this->_GetHandle() ));
		return retobj;
	}

	inline real spReductionPipeline::GetResultDeviation(  ) const
	{
		return this->_GetAPI()->fpReductionPipeline_GetResultDeviation( this->_GetHandle() );
	}

	/// Implementations of spRemeshingLegacyPipeline methods
	inline spRemeshingLegacyPipeline::spRemeshingLegacyPipeline() : spPipeline( nullptr , nullptr ) {}
	inline spRemeshingLegacyPipeline::spRemeshingLegacyPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spPipeline( _sg , _intfptr ) {}
	inline spRemeshingLegacyPipeline::spRemeshingLegacyPipeline( const spRemeshingLegacyPipeline &p ) : spPipeline( p._GetAPI() , p._GetHandle() ) {}
	inline spRemeshingLegacyPipeline & spRemeshingLegacyPipeline::operator= ( const spRemeshingLegacyPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spRemeshingLegacyPipeline spRemeshingLegacyPipeline::SafeCast( spObject other ) { spRemeshingLegacyPipeline ret; if( other.NonNull() && other.IsA("IRemeshingLegacyPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spRemeshingLegacyPipeline* spRemeshingLegacyPipeline::operator->() const { return this; }
	inline spRemeshingLegacyPipeline::spRemeshingLegacyPipeline( const _NilStruct & ) : spPipeline( nullptr , nullptr ) {}

	inline Simplygon::spRemeshingLegacySettings spRemeshingLegacyPipeline::GetRemeshingLegacySettings(  ) const
	{
		spRemeshingLegacySettings retobj = spRemeshingLegacySettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacyPipeline_GetRemeshingLegacySettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVisibilitySettings spRemeshingLegacyPipeline::GetVisibilitySettings(  ) const
	{
		spVisibilitySettings retobj = spVisibilitySettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacyPipeline_GetVisibilitySettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spBoneSettings spRemeshingLegacyPipeline::GetBoneSettings(  ) const
	{
		spBoneSettings retobj = spBoneSettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingLegacyPipeline_GetBoneSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spAggregationPipeline methods
	inline spAggregationPipeline::spAggregationPipeline() : spPipeline( nullptr , nullptr ) {}
	inline spAggregationPipeline::spAggregationPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spPipeline( _sg , _intfptr ) {}
	inline spAggregationPipeline::spAggregationPipeline( const spAggregationPipeline &p ) : spPipeline( p._GetAPI() , p._GetHandle() ) {}
	inline spAggregationPipeline & spAggregationPipeline::operator= ( const spAggregationPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spAggregationPipeline spAggregationPipeline::SafeCast( spObject other ) { spAggregationPipeline ret; if( other.NonNull() && other.IsA("IAggregationPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spAggregationPipeline* spAggregationPipeline::operator->() const { return this; }
	inline spAggregationPipeline::spAggregationPipeline( const _NilStruct & ) : spPipeline( nullptr , nullptr ) {}

	inline Simplygon::spAggregationSettings spAggregationPipeline::GetAggregationSettings(  ) const
	{
		spAggregationSettings retobj = spAggregationSettings( this->_GetAPI() , this->_GetAPI()->fpAggregationPipeline_GetAggregationSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVisibilitySettings spAggregationPipeline::GetVisibilitySettings(  ) const
	{
		spVisibilitySettings retobj = spVisibilitySettings( this->_GetAPI() , this->_GetAPI()->fpAggregationPipeline_GetVisibilitySettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spGeometryCullingSettings spAggregationPipeline::GetGeometryCullingSettings(  ) const
	{
		spGeometryCullingSettings retobj = spGeometryCullingSettings( this->_GetAPI() , this->_GetAPI()->fpAggregationPipeline_GetGeometryCullingSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVertexWeightSettings spAggregationPipeline::GetVertexWeightSettings(  ) const
	{
		spVertexWeightSettings retobj = spVertexWeightSettings( this->_GetAPI() , this->_GetAPI()->fpAggregationPipeline_GetVertexWeightSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spGenerateLightmapTexCoordSettings spAggregationPipeline::GetGenerateLightmapTexCoordSettings(  ) const
	{
		spGenerateLightmapTexCoordSettings retobj = spGenerateLightmapTexCoordSettings( this->_GetAPI() , this->_GetAPI()->fpAggregationPipeline_GetGenerateLightmapTexCoordSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spPipelineSettings methods
	inline spPipelineSettings::spPipelineSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spPipelineSettings::spPipelineSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spPipelineSettings::spPipelineSettings( const spPipelineSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spPipelineSettings & spPipelineSettings::operator= ( const spPipelineSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spPipelineSettings spPipelineSettings::SafeCast( spObject other ) { spPipelineSettings ret; if( other.NonNull() && other.IsA("IPipelineSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spPipelineSettings* spPipelineSettings::operator->() const { return this; }
	inline spPipelineSettings::spPipelineSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spPipelineSettings::SetTextureOutputPath( const char * value ) const
	{
		this->_GetAPI()->fpPipelineSettings_SetTextureOutputPath( this->_GetHandle() , value );
	}

	inline spString spPipelineSettings::GetTextureOutputPath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpPipelineSettings_GetTextureOutputPath( this->_GetHandle() ));
	}

	inline void spPipelineSettings::SetSimplygonBatchPath( const char * value ) const
	{
		this->_GetAPI()->fpPipelineSettings_SetSimplygonBatchPath( this->_GetHandle() , value );
	}

	inline spString spPipelineSettings::GetSimplygonBatchPath(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpPipelineSettings_GetSimplygonBatchPath( this->_GetHandle() ));
	}

	inline void spPipelineSettings::SetOutputMaterialName( const char * value ) const
	{
		this->_GetAPI()->fpPipelineSettings_SetOutputMaterialName( this->_GetHandle() , value );
	}

	inline spString spPipelineSettings::GetOutputMaterialName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpPipelineSettings_GetOutputMaterialName( this->_GetHandle() ));
	}

	inline void spPipelineSettings::SetOutputUniqueMaterialNames( bool value ) const
	{
		this->_GetAPI()->fpPipelineSettings_SetOutputUniqueMaterialNames( this->_GetHandle() , value );
	}

	inline bool spPipelineSettings::GetOutputUniqueMaterialNames(  ) const
	{
		return this->_GetAPI()->fpPipelineSettings_GetOutputUniqueMaterialNames( this->_GetHandle() );
	}

	inline void spPipelineSettings::SetEmbedReferences( bool value ) const
	{
		this->_GetAPI()->fpPipelineSettings_SetEmbedReferences( this->_GetHandle() , value );
	}

	inline bool spPipelineSettings::GetEmbedReferences(  ) const
	{
		return this->_GetAPI()->fpPipelineSettings_GetEmbedReferences( this->_GetHandle() );
	}

	inline void spPipelineSettings::SetIntermediateStep( bool value ) const
	{
		this->_GetAPI()->fpPipelineSettings_SetIntermediateStep( this->_GetHandle() , value );
	}

	inline bool spPipelineSettings::GetIntermediateStep(  ) const
	{
		return this->_GetAPI()->fpPipelineSettings_GetIntermediateStep( this->_GetHandle() );
	}

	inline void spPipelineSettings::SetCascadedRunMode( Simplygon::EPipelineRunMode value ) const
	{
		this->_GetAPI()->fpPipelineSettings_SetCascadedRunMode( this->_GetHandle() , (EPipelineRunMode)value );
	}

	inline Simplygon::EPipelineRunMode spPipelineSettings::GetCascadedRunMode(  ) const
	{
		return this->_GetAPI()->fpPipelineSettings_GetCascadedRunMode( this->_GetHandle() );
	}

	/// Implementations of spRemeshingPipeline methods
	inline spRemeshingPipeline::spRemeshingPipeline() : spPipeline( nullptr , nullptr ) {}
	inline spRemeshingPipeline::spRemeshingPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spPipeline( _sg , _intfptr ) {}
	inline spRemeshingPipeline::spRemeshingPipeline( const spRemeshingPipeline &p ) : spPipeline( p._GetAPI() , p._GetHandle() ) {}
	inline spRemeshingPipeline & spRemeshingPipeline::operator= ( const spRemeshingPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spRemeshingPipeline spRemeshingPipeline::SafeCast( spObject other ) { spRemeshingPipeline ret; if( other.NonNull() && other.IsA("IRemeshingPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spRemeshingPipeline* spRemeshingPipeline::operator->() const { return this; }
	inline spRemeshingPipeline::spRemeshingPipeline( const _NilStruct & ) : spPipeline( nullptr , nullptr ) {}

	inline Simplygon::spRemeshingSettings spRemeshingPipeline::GetRemeshingSettings(  ) const
	{
		spRemeshingSettings retobj = spRemeshingSettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingPipeline_GetRemeshingSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spBoneSettings spRemeshingPipeline::GetBoneSettings(  ) const
	{
		spBoneSettings retobj = spBoneSettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingPipeline_GetBoneSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spGeometryCullingSettings spRemeshingPipeline::GetGeometryCullingSettings(  ) const
	{
		spGeometryCullingSettings retobj = spGeometryCullingSettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingPipeline_GetGeometryCullingSettings( this->_GetHandle() ));
		return retobj;
	}

	inline Simplygon::spVisibilitySettings spRemeshingPipeline::GetVisibilitySettings(  ) const
	{
		spVisibilitySettings retobj = spVisibilitySettings( this->_GetAPI() , this->_GetAPI()->fpRemeshingPipeline_GetVisibilitySettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spPassthroughPipeline methods
	inline spPassthroughPipeline::spPassthroughPipeline() : spPipeline( nullptr , nullptr ) {}
	inline spPassthroughPipeline::spPassthroughPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spPipeline( _sg , _intfptr ) {}
	inline spPassthroughPipeline::spPassthroughPipeline( const spPassthroughPipeline &p ) : spPipeline( p._GetAPI() , p._GetHandle() ) {}
	inline spPassthroughPipeline & spPassthroughPipeline::operator= ( const spPassthroughPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spPassthroughPipeline spPassthroughPipeline::SafeCast( spObject other ) { spPassthroughPipeline ret; if( other.NonNull() && other.IsA("IPassthroughPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spPassthroughPipeline* spPassthroughPipeline::operator->() const { return this; }
	inline spPassthroughPipeline::spPassthroughPipeline( const _NilStruct & ) : spPipeline( nullptr , nullptr ) {}

	/// Implementations of spGeometryDataCaster methods
	inline spGeometryDataCaster::spGeometryDataCaster() : spMaterialCaster( nullptr , nullptr ) {}
	inline spGeometryDataCaster::spGeometryDataCaster( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCaster( _sg , _intfptr ) {}
	inline spGeometryDataCaster::spGeometryDataCaster( const spGeometryDataCaster &p ) : spMaterialCaster( p._GetAPI() , p._GetHandle() ) {}
	inline spGeometryDataCaster & spGeometryDataCaster::operator= ( const spGeometryDataCaster &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGeometryDataCaster spGeometryDataCaster::SafeCast( spObject other ) { spGeometryDataCaster ret; if( other.NonNull() && other.IsA("IGeometryDataCaster") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGeometryDataCaster* spGeometryDataCaster::operator->() const { return this; }
	inline spGeometryDataCaster::spGeometryDataCaster( const _NilStruct & ) : spMaterialCaster( nullptr , nullptr ) {}

	inline Simplygon::spGeometryDataCasterSettings spGeometryDataCaster::GetGeometryDataCasterSettings(  ) const
	{
		spGeometryDataCasterSettings retobj = spGeometryDataCasterSettings( this->_GetAPI() , this->_GetAPI()->fpGeometryDataCaster_GetGeometryDataCasterSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spGeometryDataCasterSettings methods
	inline spGeometryDataCasterSettings::spGeometryDataCasterSettings() : spMaterialCasterSettings( nullptr , nullptr ) {}
	inline spGeometryDataCasterSettings::spGeometryDataCasterSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spMaterialCasterSettings( _sg , _intfptr ) {}
	inline spGeometryDataCasterSettings::spGeometryDataCasterSettings( const spGeometryDataCasterSettings &p ) : spMaterialCasterSettings( p._GetAPI() , p._GetHandle() ) {}
	inline spGeometryDataCasterSettings & spGeometryDataCasterSettings::operator= ( const spGeometryDataCasterSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGeometryDataCasterSettings spGeometryDataCasterSettings::SafeCast( spObject other ) { spGeometryDataCasterSettings ret; if( other.NonNull() && other.IsA("IGeometryDataCasterSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGeometryDataCasterSettings* spGeometryDataCasterSettings::operator->() const { return this; }
	inline spGeometryDataCasterSettings::spGeometryDataCasterSettings( const _NilStruct & ) : spMaterialCasterSettings( nullptr , nullptr ) {}

	inline void spGeometryDataCasterSettings::SetGeometryDataFieldType( Simplygon::EGeometryDataFieldType FieldType ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetGeometryDataFieldType( this->_GetHandle() , (EGeometryDataFieldType)FieldType );
	}

	inline Simplygon::EGeometryDataFieldType spGeometryDataCasterSettings::GetGeometryDataFieldType(  ) const
	{
		return this->_GetAPI()->fpGeometryDataCasterSettings_GetGeometryDataFieldType( this->_GetHandle() );
	}

	inline void spGeometryDataCasterSettings::SetGeometryDataFieldIndex( unsigned int FieldIndex ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetGeometryDataFieldIndex( this->_GetHandle() , FieldIndex );
	}

	inline unsigned int spGeometryDataCasterSettings::GetGeometryDataFieldIndex(  ) const
	{
		return this->_GetAPI()->fpGeometryDataCasterSettings_GetGeometryDataFieldIndex( this->_GetHandle() );
	}

	inline void spGeometryDataCasterSettings::SetMappingInfR( real value ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetMappingInfR( this->_GetHandle() , value );
	}

	inline real spGeometryDataCasterSettings::GetMappingInfR(  ) const
	{
		return this->_GetAPI()->fpGeometryDataCasterSettings_GetMappingInfR( this->_GetHandle() );
	}

	inline void spGeometryDataCasterSettings::SetMappingSupR( real value ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetMappingSupR( this->_GetHandle() , value );
	}

	inline real spGeometryDataCasterSettings::GetMappingSupR(  ) const
	{
		return this->_GetAPI()->fpGeometryDataCasterSettings_GetMappingSupR( this->_GetHandle() );
	}

	inline void spGeometryDataCasterSettings::SetMappingInfG( real value ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetMappingInfG( this->_GetHandle() , value );
	}

	inline real spGeometryDataCasterSettings::GetMappingInfG(  ) const
	{
		return this->_GetAPI()->fpGeometryDataCasterSettings_GetMappingInfG( this->_GetHandle() );
	}

	inline void spGeometryDataCasterSettings::SetMappingSupG( real value ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetMappingSupG( this->_GetHandle() , value );
	}

	inline real spGeometryDataCasterSettings::GetMappingSupG(  ) const
	{
		return this->_GetAPI()->fpGeometryDataCasterSettings_GetMappingSupG( this->_GetHandle() );
	}

	inline void spGeometryDataCasterSettings::SetMappingInfB( real value ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetMappingInfB( this->_GetHandle() , value );
	}

	inline real spGeometryDataCasterSettings::GetMappingInfB(  ) const
	{
		return this->_GetAPI()->fpGeometryDataCasterSettings_GetMappingInfB( this->_GetHandle() );
	}

	inline void spGeometryDataCasterSettings::SetMappingSupB( real value ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetMappingSupB( this->_GetHandle() , value );
	}

	inline real spGeometryDataCasterSettings::GetMappingSupB(  ) const
	{
		return this->_GetAPI()->fpGeometryDataCasterSettings_GetMappingSupB( this->_GetHandle() );
	}

	inline void spGeometryDataCasterSettings::SetMappingInfA( real value ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetMappingInfA( this->_GetHandle() , value );
	}

	inline real spGeometryDataCasterSettings::GetMappingInfA(  ) const
	{
		return this->_GetAPI()->fpGeometryDataCasterSettings_GetMappingInfA( this->_GetHandle() );
	}

	inline void spGeometryDataCasterSettings::SetMappingSupA( real value ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetMappingSupA( this->_GetHandle() , value );
	}

	inline real spGeometryDataCasterSettings::GetMappingSupA(  ) const
	{
		return this->_GetAPI()->fpGeometryDataCasterSettings_GetMappingSupA( this->_GetHandle() );
	}

	inline void spGeometryDataCasterSettings::SetMappingInf( const real *vec ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetMappingInf( this->_GetHandle() , vec );
	}

	inline spRealData spGeometryDataCasterSettings::GetMappingInf(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpGeometryDataCasterSettings_GetMappingInf( this->_GetHandle() ));
	}

	inline void spGeometryDataCasterSettings::SetMappingSup( const real *vec ) const
	{
		this->_GetAPI()->fpGeometryDataCasterSettings_SetMappingSup( this->_GetHandle() , vec );
	}

	inline spRealData spGeometryDataCasterSettings::GetMappingSup(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpGeometryDataCasterSettings_GetMappingSup( this->_GetHandle() ));
	}

	/// Implementations of spVertexWeightSettings methods
	inline spVertexWeightSettings::spVertexWeightSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spVertexWeightSettings::spVertexWeightSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spVertexWeightSettings::spVertexWeightSettings( const spVertexWeightSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spVertexWeightSettings & spVertexWeightSettings::operator= ( const spVertexWeightSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spVertexWeightSettings spVertexWeightSettings::SafeCast( spObject other ) { spVertexWeightSettings ret; if( other.NonNull() && other.IsA("IVertexWeightSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spVertexWeightSettings* spVertexWeightSettings::operator->() const { return this; }
	inline spVertexWeightSettings::spVertexWeightSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spVertexWeightSettings::SetUseVertexWeightsInReducer( bool value ) const
	{
		this->_GetAPI()->fpVertexWeightSettings_SetUseVertexWeightsInReducer( this->_GetHandle() , value );
	}

	inline bool spVertexWeightSettings::GetUseVertexWeightsInReducer(  ) const
	{
		return this->_GetAPI()->fpVertexWeightSettings_GetUseVertexWeightsInReducer( this->_GetHandle() );
	}

	inline void spVertexWeightSettings::SetUseVertexWeightsInTexcoordGenerator( bool value ) const
	{
		this->_GetAPI()->fpVertexWeightSettings_SetUseVertexWeightsInTexcoordGenerator( this->_GetHandle() , value );
	}

	inline bool spVertexWeightSettings::GetUseVertexWeightsInTexcoordGenerator(  ) const
	{
		return this->_GetAPI()->fpVertexWeightSettings_GetUseVertexWeightsInTexcoordGenerator( this->_GetHandle() );
	}

	inline void spVertexWeightSettings::SetWeightsFromColorName( const char * value ) const
	{
		this->_GetAPI()->fpVertexWeightSettings_SetWeightsFromColorName( this->_GetHandle() , value );
	}

	inline spString spVertexWeightSettings::GetWeightsFromColorName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpVertexWeightSettings_GetWeightsFromColorName( this->_GetHandle() ));
	}

	inline void spVertexWeightSettings::SetWeightsFromColorLevel( rid value ) const
	{
		this->_GetAPI()->fpVertexWeightSettings_SetWeightsFromColorLevel( this->_GetHandle() , value );
	}

	inline rid spVertexWeightSettings::GetWeightsFromColorLevel(  ) const
	{
		return this->_GetAPI()->fpVertexWeightSettings_GetWeightsFromColorLevel( this->_GetHandle() );
	}

	inline void spVertexWeightSettings::SetWeightsFromColorComponent( Simplygon::EColorComponent value ) const
	{
		this->_GetAPI()->fpVertexWeightSettings_SetWeightsFromColorComponent( this->_GetHandle() , (EColorComponent)value );
	}

	inline Simplygon::EColorComponent spVertexWeightSettings::GetWeightsFromColorComponent(  ) const
	{
		return this->_GetAPI()->fpVertexWeightSettings_GetWeightsFromColorComponent( this->_GetHandle() );
	}

	inline void spVertexWeightSettings::SetWeightsFromColorMultiplier( real value ) const
	{
		this->_GetAPI()->fpVertexWeightSettings_SetWeightsFromColorMultiplier( this->_GetHandle() , value );
	}

	inline real spVertexWeightSettings::GetWeightsFromColorMultiplier(  ) const
	{
		return this->_GetAPI()->fpVertexWeightSettings_GetWeightsFromColorMultiplier( this->_GetHandle() );
	}

	inline void spVertexWeightSettings::SetWeightsFromColorMode( Simplygon::EWeightsFromColorMode value ) const
	{
		this->_GetAPI()->fpVertexWeightSettings_SetWeightsFromColorMode( this->_GetHandle() , (EWeightsFromColorMode)value );
	}

	inline Simplygon::EWeightsFromColorMode spVertexWeightSettings::GetWeightsFromColorMode(  ) const
	{
		return this->_GetAPI()->fpVertexWeightSettings_GetWeightsFromColorMode( this->_GetHandle() );
	}

	/// Implementations of spGenerateLightmapTexCoordSettings methods
	inline spGenerateLightmapTexCoordSettings::spGenerateLightmapTexCoordSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spGenerateLightmapTexCoordSettings::spGenerateLightmapTexCoordSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spGenerateLightmapTexCoordSettings::spGenerateLightmapTexCoordSettings( const spGenerateLightmapTexCoordSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spGenerateLightmapTexCoordSettings & spGenerateLightmapTexCoordSettings::operator= ( const spGenerateLightmapTexCoordSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spGenerateLightmapTexCoordSettings spGenerateLightmapTexCoordSettings::SafeCast( spObject other ) { spGenerateLightmapTexCoordSettings ret; if( other.NonNull() && other.IsA("IGenerateLightmapTexCoordSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spGenerateLightmapTexCoordSettings* spGenerateLightmapTexCoordSettings::operator->() const { return this; }
	inline spGenerateLightmapTexCoordSettings::spGenerateLightmapTexCoordSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spGenerateLightmapTexCoordSettings::SetGenerateLightmapTexCoord( bool value ) const
	{
		this->_GetAPI()->fpGenerateLightmapTexCoordSettings_SetGenerateLightmapTexCoord( this->_GetHandle() , value );
	}

	inline bool spGenerateLightmapTexCoordSettings::GetGenerateLightmapTexCoord(  ) const
	{
		return this->_GetAPI()->fpGenerateLightmapTexCoordSettings_GetGenerateLightmapTexCoord( this->_GetHandle() );
	}

	inline void spGenerateLightmapTexCoordSettings::SetLightmapTexCoordLevel( rid value ) const
	{
		this->_GetAPI()->fpGenerateLightmapTexCoordSettings_SetLightmapTexCoordLevel( this->_GetHandle() , value );
	}

	inline rid spGenerateLightmapTexCoordSettings::GetLightmapTexCoordLevel(  ) const
	{
		return this->_GetAPI()->fpGenerateLightmapTexCoordSettings_GetLightmapTexCoordLevel( this->_GetHandle() );
	}

	inline void spGenerateLightmapTexCoordSettings::SetLightmapTexCoordName( const char * value ) const
	{
		this->_GetAPI()->fpGenerateLightmapTexCoordSettings_SetLightmapTexCoordName( this->_GetHandle() , value );
	}

	inline spString spGenerateLightmapTexCoordSettings::GetLightmapTexCoordName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpGenerateLightmapTexCoordSettings_GetLightmapTexCoordName( this->_GetHandle() ));
	}

	inline void spGenerateLightmapTexCoordSettings::SetChartAggregatorMode( Simplygon::EChartAggregatorMode value ) const
	{
		this->_GetAPI()->fpGenerateLightmapTexCoordSettings_SetChartAggregatorMode( this->_GetHandle() , (EChartAggregatorMode)value );
	}

	inline Simplygon::EChartAggregatorMode spGenerateLightmapTexCoordSettings::GetChartAggregatorMode(  ) const
	{
		return this->_GetAPI()->fpGenerateLightmapTexCoordSettings_GetChartAggregatorMode( this->_GetHandle() );
	}

	inline void spGenerateLightmapTexCoordSettings::SetTextureWidth( unsigned int value ) const
	{
		this->_GetAPI()->fpGenerateLightmapTexCoordSettings_SetTextureWidth( this->_GetHandle() , value );
	}

	inline unsigned int spGenerateLightmapTexCoordSettings::GetTextureWidth(  ) const
	{
		return this->_GetAPI()->fpGenerateLightmapTexCoordSettings_GetTextureWidth( this->_GetHandle() );
	}

	inline void spGenerateLightmapTexCoordSettings::SetTextureHeight( unsigned int value ) const
	{
		this->_GetAPI()->fpGenerateLightmapTexCoordSettings_SetTextureHeight( this->_GetHandle() , value );
	}

	inline unsigned int spGenerateLightmapTexCoordSettings::GetTextureHeight(  ) const
	{
		return this->_GetAPI()->fpGenerateLightmapTexCoordSettings_GetTextureHeight( this->_GetHandle() );
	}

	inline void spGenerateLightmapTexCoordSettings::SetGutterSpace( unsigned int value ) const
	{
		this->_GetAPI()->fpGenerateLightmapTexCoordSettings_SetGutterSpace( this->_GetHandle() , value );
	}

	inline unsigned int spGenerateLightmapTexCoordSettings::GetGutterSpace(  ) const
	{
		return this->_GetAPI()->fpGenerateLightmapTexCoordSettings_GetGutterSpace( this->_GetHandle() );
	}

	/// Implementations of spChartAggregatorSettings methods
	inline spChartAggregatorSettings::spChartAggregatorSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spChartAggregatorSettings::spChartAggregatorSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spChartAggregatorSettings::spChartAggregatorSettings( const spChartAggregatorSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spChartAggregatorSettings & spChartAggregatorSettings::operator= ( const spChartAggregatorSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spChartAggregatorSettings spChartAggregatorSettings::SafeCast( spObject other ) { spChartAggregatorSettings ret; if( other.NonNull() && other.IsA("IChartAggregatorSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spChartAggregatorSettings* spChartAggregatorSettings::operator->() const { return this; }
	inline spChartAggregatorSettings::spChartAggregatorSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spChartAggregatorSettings::SetChartAggregatorMode( Simplygon::EChartAggregatorMode value ) const
	{
		this->_GetAPI()->fpChartAggregatorSettings_SetChartAggregatorMode( this->_GetHandle() , (EChartAggregatorMode)value );
	}

	inline Simplygon::EChartAggregatorMode spChartAggregatorSettings::GetChartAggregatorMode(  ) const
	{
		return this->_GetAPI()->fpChartAggregatorSettings_GetChartAggregatorMode( this->_GetHandle() );
	}

	inline void spChartAggregatorSettings::SetSurfaceAreaScale( Simplygon::ESurfaceAreaScale value ) const
	{
		this->_GetAPI()->fpChartAggregatorSettings_SetSurfaceAreaScale( this->_GetHandle() , (ESurfaceAreaScale)value );
	}

	inline Simplygon::ESurfaceAreaScale spChartAggregatorSettings::GetSurfaceAreaScale(  ) const
	{
		return this->_GetAPI()->fpChartAggregatorSettings_GetSurfaceAreaScale( this->_GetHandle() );
	}

	inline void spChartAggregatorSettings::SetOriginalTexCoordLevel( rid value ) const
	{
		this->_GetAPI()->fpChartAggregatorSettings_SetOriginalTexCoordLevel( this->_GetHandle() , value );
	}

	inline rid spChartAggregatorSettings::GetOriginalTexCoordLevel(  ) const
	{
		return this->_GetAPI()->fpChartAggregatorSettings_GetOriginalTexCoordLevel( this->_GetHandle() );
	}

	inline void spChartAggregatorSettings::SetOriginalTexCoordName( const char * value ) const
	{
		this->_GetAPI()->fpChartAggregatorSettings_SetOriginalTexCoordName( this->_GetHandle() , value );
	}

	inline spString spChartAggregatorSettings::GetOriginalTexCoordName(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpChartAggregatorSettings_GetOriginalTexCoordName( this->_GetHandle() ));
	}

	inline void spChartAggregatorSettings::SetSeparateOverlappingCharts( bool value ) const
	{
		this->_GetAPI()->fpChartAggregatorSettings_SetSeparateOverlappingCharts( this->_GetHandle() , value );
	}

	inline bool spChartAggregatorSettings::GetSeparateOverlappingCharts(  ) const
	{
		return this->_GetAPI()->fpChartAggregatorSettings_GetSeparateOverlappingCharts( this->_GetHandle() );
	}

	inline void spChartAggregatorSettings::SetOriginalChartProportionsChannel( const char * value ) const
	{
		this->_GetAPI()->fpChartAggregatorSettings_SetOriginalChartProportionsChannel( this->_GetHandle() , value );
	}

	inline spString spChartAggregatorSettings::GetOriginalChartProportionsChannel(  ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpChartAggregatorSettings_GetOriginalChartProportionsChannel( this->_GetHandle() ));
	}

	inline void spChartAggregatorSettings::SetLockUVRotation( bool value ) const
	{
		this->_GetAPI()->fpChartAggregatorSettings_SetLockUVRotation( this->_GetHandle() , value );
	}

	inline bool spChartAggregatorSettings::GetLockUVRotation(  ) const
	{
		return this->_GetAPI()->fpChartAggregatorSettings_GetLockUVRotation( this->_GetHandle() );
	}

	/// Implementations of spParameterizerSettings methods
	inline spParameterizerSettings::spParameterizerSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spParameterizerSettings::spParameterizerSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spParameterizerSettings::spParameterizerSettings( const spParameterizerSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spParameterizerSettings & spParameterizerSettings::operator= ( const spParameterizerSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spParameterizerSettings spParameterizerSettings::SafeCast( spObject other ) { spParameterizerSettings ret; if( other.NonNull() && other.IsA("IParameterizerSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spParameterizerSettings* spParameterizerSettings::operator->() const { return this; }
	inline spParameterizerSettings::spParameterizerSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spParameterizerSettings::SetMaxStretch( real value ) const
	{
		this->_GetAPI()->fpParameterizerSettings_SetMaxStretch( this->_GetHandle() , value );
	}

	inline real spParameterizerSettings::GetMaxStretch(  ) const
	{
		return this->_GetAPI()->fpParameterizerSettings_GetMaxStretch( this->_GetHandle() );
	}

	inline void spParameterizerSettings::SetLargeChartsImportance( real value ) const
	{
		this->_GetAPI()->fpParameterizerSettings_SetLargeChartsImportance( this->_GetHandle() , value );
	}

	inline real spParameterizerSettings::GetLargeChartsImportance(  ) const
	{
		return this->_GetAPI()->fpParameterizerSettings_GetLargeChartsImportance( this->_GetHandle() );
	}

	/// Implementations of spBillboardCloudSettings methods
	inline spBillboardCloudSettings::spBillboardCloudSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spBillboardCloudSettings::spBillboardCloudSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spBillboardCloudSettings::spBillboardCloudSettings( const spBillboardCloudSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spBillboardCloudSettings & spBillboardCloudSettings::operator= ( const spBillboardCloudSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spBillboardCloudSettings spBillboardCloudSettings::SafeCast( spObject other ) { spBillboardCloudSettings ret; if( other.NonNull() && other.IsA("IBillboardCloudSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spBillboardCloudSettings* spBillboardCloudSettings::operator->() const { return this; }
	inline spBillboardCloudSettings::spBillboardCloudSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spBillboardCloudSettings::SetBillboardMode( Simplygon::EBillboardMode value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetBillboardMode( this->_GetHandle() , (EBillboardMode)value );
	}

	inline Simplygon::EBillboardMode spBillboardCloudSettings::GetBillboardMode(  ) const
	{
		return this->_GetAPI()->fpBillboardCloudSettings_GetBillboardMode( this->_GetHandle() );
	}

	inline void spBillboardCloudSettings::SetFavorVerticalPlanes( bool value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetFavorVerticalPlanes( this->_GetHandle() , value );
	}

	inline bool spBillboardCloudSettings::GetFavorVerticalPlanes(  ) const
	{
		return this->_GetAPI()->fpBillboardCloudSettings_GetFavorVerticalPlanes( this->_GetHandle() );
	}

	inline void spBillboardCloudSettings::SetTwoSided( bool value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetTwoSided( this->_GetHandle() , value );
	}

	inline bool spBillboardCloudSettings::GetTwoSided(  ) const
	{
		return this->_GetAPI()->fpBillboardCloudSettings_GetTwoSided( this->_GetHandle() );
	}

	inline void spBillboardCloudSettings::SetUseVisibilityWeights( bool value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetUseVisibilityWeights( this->_GetHandle() , value );
	}

	inline bool spBillboardCloudSettings::GetUseVisibilityWeights(  ) const
	{
		return this->_GetAPI()->fpBillboardCloudSettings_GetUseVisibilityWeights( this->_GetHandle() );
	}

	inline void spBillboardCloudSettings::SetBillboardDensity( real value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetBillboardDensity( this->_GetHandle() , value );
	}

	inline real spBillboardCloudSettings::GetBillboardDensity(  ) const
	{
		return this->_GetAPI()->fpBillboardCloudSettings_GetBillboardDensity( this->_GetHandle() );
	}

	inline void spBillboardCloudSettings::SetMaxPlaneCount( unsigned int value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetMaxPlaneCount( this->_GetHandle() , value );
	}

	inline unsigned int spBillboardCloudSettings::GetMaxPlaneCount(  ) const
	{
		return this->_GetAPI()->fpBillboardCloudSettings_GetMaxPlaneCount( this->_GetHandle() );
	}

	inline void spBillboardCloudSettings::SetGeometricComplexity( real value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetGeometricComplexity( this->_GetHandle() , value );
	}

	inline real spBillboardCloudSettings::GetGeometricComplexity(  ) const
	{
		return this->_GetAPI()->fpBillboardCloudSettings_GetGeometricComplexity( this->_GetHandle() );
	}

	inline void spBillboardCloudSettings::SetUpVector( const real *value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetUpVector( this->_GetHandle() , value );
	}

	inline spRealData spBillboardCloudSettings::GetUpVector(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpBillboardCloudSettings_GetUpVector( this->_GetHandle() ));
	}

	inline void spBillboardCloudSettings::SetUpVectorX( real value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetUpVectorX( this->_GetHandle() , value );
	}

	inline real spBillboardCloudSettings::GetUpVectorX(  ) const
	{
		return this->_GetAPI()->fpBillboardCloudSettings_GetUpVectorX( this->_GetHandle() );
	}

	inline void spBillboardCloudSettings::SetUpVectorY( real value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetUpVectorY( this->_GetHandle() , value );
	}

	inline real spBillboardCloudSettings::GetUpVectorY(  ) const
	{
		return this->_GetAPI()->fpBillboardCloudSettings_GetUpVectorY( this->_GetHandle() );
	}

	inline void spBillboardCloudSettings::SetUpVectorZ( real value ) const
	{
		this->_GetAPI()->fpBillboardCloudSettings_SetUpVectorZ( this->_GetHandle() , value );
	}

	inline real spBillboardCloudSettings::GetUpVectorZ(  ) const
	{
		return this->_GetAPI()->fpBillboardCloudSettings_GetUpVectorZ( this->_GetHandle() );
	}

	inline Simplygon::spFoliageSettings spBillboardCloudSettings::GetFoliageSettings(  ) const
	{
		spFoliageSettings retobj = spFoliageSettings( this->_GetAPI() , this->_GetAPI()->fpBillboardCloudSettings_GetFoliageSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spFlipbookSettings methods
	inline spFlipbookSettings::spFlipbookSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spFlipbookSettings::spFlipbookSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spFlipbookSettings::spFlipbookSettings( const spFlipbookSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spFlipbookSettings & spFlipbookSettings::operator= ( const spFlipbookSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spFlipbookSettings spFlipbookSettings::SafeCast( spObject other ) { spFlipbookSettings ret; if( other.NonNull() && other.IsA("IFlipbookSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spFlipbookSettings* spFlipbookSettings::operator->() const { return this; }
	inline spFlipbookSettings::spFlipbookSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spFlipbookSettings::SetNumberOfViews( unsigned int value ) const
	{
		this->_GetAPI()->fpFlipbookSettings_SetNumberOfViews( this->_GetHandle() , value );
	}

	inline unsigned int spFlipbookSettings::GetNumberOfViews(  ) const
	{
		return this->_GetAPI()->fpFlipbookSettings_GetNumberOfViews( this->_GetHandle() );
	}

	inline void spFlipbookSettings::SetViewDirection( const real *value ) const
	{
		this->_GetAPI()->fpFlipbookSettings_SetViewDirection( this->_GetHandle() , value );
	}

	inline spRealData spFlipbookSettings::GetViewDirection(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpFlipbookSettings_GetViewDirection( this->_GetHandle() ));
	}

	inline void spFlipbookSettings::SetViewDirectionX( real value ) const
	{
		this->_GetAPI()->fpFlipbookSettings_SetViewDirectionX( this->_GetHandle() , value );
	}

	inline real spFlipbookSettings::GetViewDirectionX(  ) const
	{
		return this->_GetAPI()->fpFlipbookSettings_GetViewDirectionX( this->_GetHandle() );
	}

	inline void spFlipbookSettings::SetViewDirectionY( real value ) const
	{
		this->_GetAPI()->fpFlipbookSettings_SetViewDirectionY( this->_GetHandle() , value );
	}

	inline real spFlipbookSettings::GetViewDirectionY(  ) const
	{
		return this->_GetAPI()->fpFlipbookSettings_GetViewDirectionY( this->_GetHandle() );
	}

	inline void spFlipbookSettings::SetViewDirectionZ( real value ) const
	{
		this->_GetAPI()->fpFlipbookSettings_SetViewDirectionZ( this->_GetHandle() , value );
	}

	inline real spFlipbookSettings::GetViewDirectionZ(  ) const
	{
		return this->_GetAPI()->fpFlipbookSettings_GetViewDirectionZ( this->_GetHandle() );
	}

	inline void spFlipbookSettings::SetUpVector( const real *value ) const
	{
		this->_GetAPI()->fpFlipbookSettings_SetUpVector( this->_GetHandle() , value );
	}

	inline spRealData spFlipbookSettings::GetUpVector(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpFlipbookSettings_GetUpVector( this->_GetHandle() ));
	}

	inline void spFlipbookSettings::SetUpVectorX( real value ) const
	{
		this->_GetAPI()->fpFlipbookSettings_SetUpVectorX( this->_GetHandle() , value );
	}

	inline real spFlipbookSettings::GetUpVectorX(  ) const
	{
		return this->_GetAPI()->fpFlipbookSettings_GetUpVectorX( this->_GetHandle() );
	}

	inline void spFlipbookSettings::SetUpVectorY( real value ) const
	{
		this->_GetAPI()->fpFlipbookSettings_SetUpVectorY( this->_GetHandle() , value );
	}

	inline real spFlipbookSettings::GetUpVectorY(  ) const
	{
		return this->_GetAPI()->fpFlipbookSettings_GetUpVectorY( this->_GetHandle() );
	}

	inline void spFlipbookSettings::SetUpVectorZ( real value ) const
	{
		this->_GetAPI()->fpFlipbookSettings_SetUpVectorZ( this->_GetHandle() , value );
	}

	inline real spFlipbookSettings::GetUpVectorZ(  ) const
	{
		return this->_GetAPI()->fpFlipbookSettings_GetUpVectorZ( this->_GetHandle() );
	}

	inline void spFlipbookSettings::SetVerticalAngle( real value ) const
	{
		this->_GetAPI()->fpFlipbookSettings_SetVerticalAngle( this->_GetHandle() , value );
	}

	inline real spFlipbookSettings::GetVerticalAngle(  ) const
	{
		return this->_GetAPI()->fpFlipbookSettings_GetVerticalAngle( this->_GetHandle() );
	}

	/// Implementations of spImpostorFromSingleViewSettings methods
	inline spImpostorFromSingleViewSettings::spImpostorFromSingleViewSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spImpostorFromSingleViewSettings::spImpostorFromSingleViewSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spImpostorFromSingleViewSettings::spImpostorFromSingleViewSettings( const spImpostorFromSingleViewSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spImpostorFromSingleViewSettings & spImpostorFromSingleViewSettings::operator= ( const spImpostorFromSingleViewSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spImpostorFromSingleViewSettings spImpostorFromSingleViewSettings::SafeCast( spObject other ) { spImpostorFromSingleViewSettings ret; if( other.NonNull() && other.IsA("IImpostorFromSingleViewSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spImpostorFromSingleViewSettings* spImpostorFromSingleViewSettings::operator->() const { return this; }
	inline spImpostorFromSingleViewSettings::spImpostorFromSingleViewSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spImpostorFromSingleViewSettings::SetUseTightFitting( bool value ) const
	{
		this->_GetAPI()->fpImpostorFromSingleViewSettings_SetUseTightFitting( this->_GetHandle() , value );
	}

	inline bool spImpostorFromSingleViewSettings::GetUseTightFitting(  ) const
	{
		return this->_GetAPI()->fpImpostorFromSingleViewSettings_GetUseTightFitting( this->_GetHandle() );
	}

	inline void spImpostorFromSingleViewSettings::SetTightFittingDepthOffset( real value ) const
	{
		this->_GetAPI()->fpImpostorFromSingleViewSettings_SetTightFittingDepthOffset( this->_GetHandle() , value );
	}

	inline real spImpostorFromSingleViewSettings::GetTightFittingDepthOffset(  ) const
	{
		return this->_GetAPI()->fpImpostorFromSingleViewSettings_GetTightFittingDepthOffset( this->_GetHandle() );
	}

	inline void spImpostorFromSingleViewSettings::SetTwoSided( bool value ) const
	{
		this->_GetAPI()->fpImpostorFromSingleViewSettings_SetTwoSided( this->_GetHandle() , value );
	}

	inline bool spImpostorFromSingleViewSettings::GetTwoSided(  ) const
	{
		return this->_GetAPI()->fpImpostorFromSingleViewSettings_GetTwoSided( this->_GetHandle() );
	}

	inline void spImpostorFromSingleViewSettings::SetViewDirection( const real *value ) const
	{
		this->_GetAPI()->fpImpostorFromSingleViewSettings_SetViewDirection( this->_GetHandle() , value );
	}

	inline spRealData spImpostorFromSingleViewSettings::GetViewDirection(  ) const
	{
		return spRealData( this->_GetAPI() , this->_GetAPI()->fpImpostorFromSingleViewSettings_GetViewDirection( this->_GetHandle() ));
	}

	inline void spImpostorFromSingleViewSettings::SetViewDirectionX( real value ) const
	{
		this->_GetAPI()->fpImpostorFromSingleViewSettings_SetViewDirectionX( this->_GetHandle() , value );
	}

	inline real spImpostorFromSingleViewSettings::GetViewDirectionX(  ) const
	{
		return this->_GetAPI()->fpImpostorFromSingleViewSettings_GetViewDirectionX( this->_GetHandle() );
	}

	inline void spImpostorFromSingleViewSettings::SetViewDirectionY( real value ) const
	{
		this->_GetAPI()->fpImpostorFromSingleViewSettings_SetViewDirectionY( this->_GetHandle() , value );
	}

	inline real spImpostorFromSingleViewSettings::GetViewDirectionY(  ) const
	{
		return this->_GetAPI()->fpImpostorFromSingleViewSettings_GetViewDirectionY( this->_GetHandle() );
	}

	inline void spImpostorFromSingleViewSettings::SetViewDirectionZ( real value ) const
	{
		this->_GetAPI()->fpImpostorFromSingleViewSettings_SetViewDirectionZ( this->_GetHandle() , value );
	}

	inline real spImpostorFromSingleViewSettings::GetViewDirectionZ(  ) const
	{
		return this->_GetAPI()->fpImpostorFromSingleViewSettings_GetViewDirectionZ( this->_GetHandle() );
	}

	inline void spImpostorFromSingleViewSettings::SetTexCoordPadding( real value ) const
	{
		this->_GetAPI()->fpImpostorFromSingleViewSettings_SetTexCoordPadding( this->_GetHandle() , value );
	}

	inline real spImpostorFromSingleViewSettings::GetTexCoordPadding(  ) const
	{
		return this->_GetAPI()->fpImpostorFromSingleViewSettings_GetTexCoordPadding( this->_GetHandle() );
	}

	/// Implementations of spImpostorFromSingleViewPipeline methods
	inline spImpostorFromSingleViewPipeline::spImpostorFromSingleViewPipeline() : spPipeline( nullptr , nullptr ) {}
	inline spImpostorFromSingleViewPipeline::spImpostorFromSingleViewPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spPipeline( _sg , _intfptr ) {}
	inline spImpostorFromSingleViewPipeline::spImpostorFromSingleViewPipeline( const spImpostorFromSingleViewPipeline &p ) : spPipeline( p._GetAPI() , p._GetHandle() ) {}
	inline spImpostorFromSingleViewPipeline & spImpostorFromSingleViewPipeline::operator= ( const spImpostorFromSingleViewPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spImpostorFromSingleViewPipeline spImpostorFromSingleViewPipeline::SafeCast( spObject other ) { spImpostorFromSingleViewPipeline ret; if( other.NonNull() && other.IsA("IImpostorFromSingleViewPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spImpostorFromSingleViewPipeline* spImpostorFromSingleViewPipeline::operator->() const { return this; }
	inline spImpostorFromSingleViewPipeline::spImpostorFromSingleViewPipeline( const _NilStruct & ) : spPipeline( nullptr , nullptr ) {}

	inline Simplygon::spImpostorFromSingleViewSettings spImpostorFromSingleViewPipeline::GetImpostorFromSingleViewSettings(  ) const
	{
		spImpostorFromSingleViewSettings retobj = spImpostorFromSingleViewSettings( this->_GetAPI() , this->_GetAPI()->fpImpostorFromSingleViewPipeline_GetImpostorFromSingleViewSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spBillboardCloudPipeline methods
	inline spBillboardCloudPipeline::spBillboardCloudPipeline() : spPipeline( nullptr , nullptr ) {}
	inline spBillboardCloudPipeline::spBillboardCloudPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spPipeline( _sg , _intfptr ) {}
	inline spBillboardCloudPipeline::spBillboardCloudPipeline( const spBillboardCloudPipeline &p ) : spPipeline( p._GetAPI() , p._GetHandle() ) {}
	inline spBillboardCloudPipeline & spBillboardCloudPipeline::operator= ( const spBillboardCloudPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spBillboardCloudPipeline spBillboardCloudPipeline::SafeCast( spObject other ) { spBillboardCloudPipeline ret; if( other.NonNull() && other.IsA("IBillboardCloudPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spBillboardCloudPipeline* spBillboardCloudPipeline::operator->() const { return this; }
	inline spBillboardCloudPipeline::spBillboardCloudPipeline( const _NilStruct & ) : spPipeline( nullptr , nullptr ) {}

	inline Simplygon::spBillboardCloudSettings spBillboardCloudPipeline::GetBillboardCloudSettings(  ) const
	{
		spBillboardCloudSettings retobj = spBillboardCloudSettings( this->_GetAPI() , this->_GetAPI()->fpBillboardCloudPipeline_GetBillboardCloudSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spBillboardCloudVegetationPipeline methods
	inline spBillboardCloudVegetationPipeline::spBillboardCloudVegetationPipeline() : spPipeline( nullptr , nullptr ) {}
	inline spBillboardCloudVegetationPipeline::spBillboardCloudVegetationPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spPipeline( _sg , _intfptr ) {}
	inline spBillboardCloudVegetationPipeline::spBillboardCloudVegetationPipeline( const spBillboardCloudVegetationPipeline &p ) : spPipeline( p._GetAPI() , p._GetHandle() ) {}
	inline spBillboardCloudVegetationPipeline & spBillboardCloudVegetationPipeline::operator= ( const spBillboardCloudVegetationPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spBillboardCloudVegetationPipeline spBillboardCloudVegetationPipeline::SafeCast( spObject other ) { spBillboardCloudVegetationPipeline ret; if( other.NonNull() && other.IsA("IBillboardCloudVegetationPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spBillboardCloudVegetationPipeline* spBillboardCloudVegetationPipeline::operator->() const { return this; }
	inline spBillboardCloudVegetationPipeline::spBillboardCloudVegetationPipeline( const _NilStruct & ) : spPipeline( nullptr , nullptr ) {}

	inline Simplygon::spBillboardCloudSettings spBillboardCloudVegetationPipeline::GetBillboardCloudSettings(  ) const
	{
		spBillboardCloudSettings retobj = spBillboardCloudSettings( this->_GetAPI() , this->_GetAPI()->fpBillboardCloudVegetationPipeline_GetBillboardCloudSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spFlipbookPipeline methods
	inline spFlipbookPipeline::spFlipbookPipeline() : spPipeline( nullptr , nullptr ) {}
	inline spFlipbookPipeline::spFlipbookPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spPipeline( _sg , _intfptr ) {}
	inline spFlipbookPipeline::spFlipbookPipeline( const spFlipbookPipeline &p ) : spPipeline( p._GetAPI() , p._GetHandle() ) {}
	inline spFlipbookPipeline & spFlipbookPipeline::operator= ( const spFlipbookPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spFlipbookPipeline spFlipbookPipeline::SafeCast( spObject other ) { spFlipbookPipeline ret; if( other.NonNull() && other.IsA("IFlipbookPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spFlipbookPipeline* spFlipbookPipeline::operator->() const { return this; }
	inline spFlipbookPipeline::spFlipbookPipeline( const _NilStruct & ) : spPipeline( nullptr , nullptr ) {}

	inline Simplygon::spFlipbookSettings spFlipbookPipeline::GetFlipbookSettings(  ) const
	{
		spFlipbookSettings retobj = spFlipbookSettings( this->_GetAPI() , this->_GetAPI()->fpFlipbookPipeline_GetFlipbookSettings( this->_GetHandle() ));
		return retobj;
	}

	/// Implementations of spFoliageSettings methods
	inline spFoliageSettings::spFoliageSettings() : spSettingsObject( nullptr , nullptr ) {}
	inline spFoliageSettings::spFoliageSettings( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spSettingsObject( _sg , _intfptr ) {}
	inline spFoliageSettings::spFoliageSettings( const spFoliageSettings &p ) : spSettingsObject( p._GetAPI() , p._GetHandle() ) {}
	inline spFoliageSettings & spFoliageSettings::operator= ( const spFoliageSettings &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spFoliageSettings spFoliageSettings::SafeCast( spObject other ) { spFoliageSettings ret; if( other.NonNull() && other.IsA("IFoliageSettings") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spFoliageSettings* spFoliageSettings::operator->() const { return this; }
	inline spFoliageSettings::spFoliageSettings( const _NilStruct & ) : spSettingsObject( nullptr , nullptr ) {}

	inline void spFoliageSettings::SetSeparateTrunkAndFoliage( bool value ) const
	{
		this->_GetAPI()->fpFoliageSettings_SetSeparateTrunkAndFoliage( this->_GetHandle() , value );
	}

	inline bool spFoliageSettings::GetSeparateTrunkAndFoliage(  ) const
	{
		return this->_GetAPI()->fpFoliageSettings_GetSeparateTrunkAndFoliage( this->_GetHandle() );
	}

	inline void spFoliageSettings::SetSeparateFoliageTriangleRatio( real value ) const
	{
		this->_GetAPI()->fpFoliageSettings_SetSeparateFoliageTriangleRatio( this->_GetHandle() , value );
	}

	inline real spFoliageSettings::GetSeparateFoliageTriangleRatio(  ) const
	{
		return this->_GetAPI()->fpFoliageSettings_GetSeparateFoliageTriangleRatio( this->_GetHandle() );
	}

	inline void spFoliageSettings::SetSeparateFoliageTriangleThreshold( unsigned int value ) const
	{
		this->_GetAPI()->fpFoliageSettings_SetSeparateFoliageTriangleThreshold( this->_GetHandle() , value );
	}

	inline unsigned int spFoliageSettings::GetSeparateFoliageTriangleThreshold(  ) const
	{
		return this->_GetAPI()->fpFoliageSettings_GetSeparateFoliageTriangleThreshold( this->_GetHandle() );
	}

	inline void spFoliageSettings::SetSeparateFoliageAreaThreshold( real value ) const
	{
		this->_GetAPI()->fpFoliageSettings_SetSeparateFoliageAreaThreshold( this->_GetHandle() , value );
	}

	inline real spFoliageSettings::GetSeparateFoliageAreaThreshold(  ) const
	{
		return this->_GetAPI()->fpFoliageSettings_GetSeparateFoliageAreaThreshold( this->_GetHandle() );
	}

	inline void spFoliageSettings::SetSeparateFoliageSizeThreshold( real value ) const
	{
		this->_GetAPI()->fpFoliageSettings_SetSeparateFoliageSizeThreshold( this->_GetHandle() , value );
	}

	inline real spFoliageSettings::GetSeparateFoliageSizeThreshold(  ) const
	{
		return this->_GetAPI()->fpFoliageSettings_GetSeparateFoliageSizeThreshold( this->_GetHandle() );
	}

	inline void spFoliageSettings::SetTrunkReductionRatio( real value ) const
	{
		this->_GetAPI()->fpFoliageSettings_SetTrunkReductionRatio( this->_GetHandle() , value );
	}

	inline real spFoliageSettings::GetTrunkReductionRatio(  ) const
	{
		return this->_GetAPI()->fpFoliageSettings_GetTrunkReductionRatio( this->_GetHandle() );
	}

	/// Implementations of spStringArray methods
	inline spStringArray::spStringArray() : spValueArray( nullptr , nullptr ) {}
	inline spStringArray::spStringArray( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spValueArray( _sg , _intfptr ) {}
	inline spStringArray::spStringArray( const spStringArray &p ) : spValueArray( p._GetAPI() , p._GetHandle() ) {}
	inline spStringArray & spStringArray::operator= ( const spStringArray &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spStringArray spStringArray::SafeCast( spObject other ) { spStringArray ret; if( other.NonNull() && other.IsA("IStringArray") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spStringArray* spStringArray::operator->() const { return this; }
	inline spStringArray::spStringArray( const _NilStruct & ) : spValueArray( nullptr , nullptr ) {}

	inline void spStringArray::AddItem( const char * value ) const
	{
		this->_GetAPI()->fpStringArray_AddItem( this->_GetHandle() , value );
	}

	inline void spStringArray::SetItem( rid id , const char * value ) const
	{
		this->_GetAPI()->fpStringArray_SetItem( this->_GetHandle() , id , value );
	}

	inline spString spStringArray::GetItem( rid id ) const
	{
		return spString( this->_GetAPI() , this->_GetAPI()->fpStringArray_GetItem( this->_GetHandle() , id ));
	}

	/// Implementations of spOcclusionMeshPipeline methods
	inline spOcclusionMeshPipeline::spOcclusionMeshPipeline() : spPipeline( nullptr , nullptr ) {}
	inline spOcclusionMeshPipeline::spOcclusionMeshPipeline( const Simplygon::APIInterfacePtrs* _sg, Simplygon::hIntf _intfptr ) : spPipeline( _sg , _intfptr ) {}
	inline spOcclusionMeshPipeline::spOcclusionMeshPipeline( const spOcclusionMeshPipeline &p ) : spPipeline( p._GetAPI() , p._GetHandle() ) {}
	inline spOcclusionMeshPipeline & spOcclusionMeshPipeline::operator= ( const spOcclusionMeshPipeline &p ) { this->replace_ptr( p._GetAPI() , p._GetHandle() ); return *this; }
	inline spOcclusionMeshPipeline spOcclusionMeshPipeline::SafeCast( spObject other ) { spOcclusionMeshPipeline ret; if( other.NonNull() && other.IsA("IOcclusionMeshPipeline") ) { ret.replace_ptr(other._GetAPI() , other._GetHandle()); } return ret; }
	inline const spOcclusionMeshPipeline* spOcclusionMeshPipeline::operator->() const { return this; }
	inline spOcclusionMeshPipeline::spOcclusionMeshPipeline( const _NilStruct & ) : spPipeline( nullptr , nullptr ) {}

	inline Simplygon::spOcclusionMeshSettings spOcclusionMeshPipeline::GetOcclusionMeshSettings(  ) const
	{
		spOcclusionMeshSettings retobj = spOcclusionMeshSettings( this->_GetAPI() , this->_GetAPI()->fpOcclusionMeshPipeline_GetOcclusionMeshSettings( this->_GetHandle() ));
		return retobj;
	}

	inline bool APIInterfacePtrs::LoadAPIPtrs( void *hLib )
	{
		bool all_successfully_loaded = true;
		all_successfully_loaded &= LoadFunctionPointer<FP_ReturnData_AddRef>( hLib , "CAPI_ReturnData_AddRef", this->fpReturnData_AddRef);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReturnData_Release>( hLib , "CAPI_ReturnData_Release", this->fpReturnData_Release);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReturnData_GetByteSize>( hLib , "CAPI_ReturnData_GetByteSize", this->fpReturnData_GetByteSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReturnData_GetRawPointer>( hLib , "CAPI_ReturnData_GetRawPointer", this->fpReturnData_GetRawPointer);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_GetClass>( hLib , "CAPI_Object_GetClass", this->fpObject_GetClass);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_IsA>( hLib , "CAPI_Object_IsA", this->fpObject_IsA);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_PrintInfo>( hLib , "CAPI_Object_PrintInfo", this->fpObject_PrintInfo);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_AddRef>( hLib , "CAPI_Object_AddRef", this->fpObject_AddRef);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_Release>( hLib , "CAPI_Object_Release", this->fpObject_Release);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_SetName>( hLib , "CAPI_Object_SetName", this->fpObject_SetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_GetName>( hLib , "CAPI_Object_GetName", this->fpObject_GetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_AddObserver>( hLib , "CAPI_Object_AddObserver", this->fpObject_AddObserver);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_RemoveObserver>( hLib , "CAPI_Object_RemoveObserver", this->fpObject_RemoveObserver);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_GetUserComponentArea>( hLib , "CAPI_Object_GetUserComponentArea", this->fpObject_GetUserComponentArea);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_SetUserData>( hLib , "CAPI_Object_SetUserData", this->fpObject_SetUserData);
		all_successfully_loaded &= LoadFunctionPointer<FP_Object_GetUserData>( hLib , "CAPI_Object_GetUserData", this->fpObject_GetUserData);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_RegisterAccessor>( hLib , "CAPI_Simplygon_RegisterAccessor", this->fpSimplygon_RegisterAccessor);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_UnregisterAccessor>( hLib , "CAPI_Simplygon_UnregisterAccessor", this->fpSimplygon_UnregisterAccessor);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_NewCopy>( hLib , "CAPI_Array_NewCopy_358A7608", this->fpArray_NewCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_NewPackedCopy>( hLib , "CAPI_Array_NewPackedCopy_E7D28A20", this->fpArray_NewPackedCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_DeepCopy>( hLib , "CAPI_Array_DeepCopy_738A6D2B", this->fpArray_DeepCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_IndexedCopy>( hLib , "CAPI_Array_IndexedCopy_27AF70D2", this->fpArray_IndexedCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_SetTupleSize>( hLib , "CAPI_Array_SetTupleSize_E4EBF20A", this->fpArray_SetTupleSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_GetTupleSize>( hLib , "CAPI_Array_GetTupleSize_85E4C5D5", this->fpArray_GetTupleSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_SetItemCount>( hLib , "CAPI_Array_SetItemCount_E4EBF20A", this->fpArray_SetItemCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_GetItemCount>( hLib , "CAPI_Array_GetItemCount_85E4C5D5", this->fpArray_GetItemCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_GetMaxItemId>( hLib , "CAPI_Array_GetMaxItemId_CDBA2BD0", this->fpArray_GetMaxItemId);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_Clear>( hLib , "CAPI_Array_Clear_69A03065", this->fpArray_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_IsEmpty>( hLib , "CAPI_Array_IsEmpty_C92E1C4A", this->fpArray_IsEmpty);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_SetTupleCount>( hLib , "CAPI_Array_SetTupleCount_E4EBF20A", this->fpArray_SetTupleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_GetTupleCount>( hLib , "CAPI_Array_GetTupleCount_85E4C5D5", this->fpArray_GetTupleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_GetMaxTupleId>( hLib , "CAPI_Array_GetMaxTupleId_CDBA2BD0", this->fpArray_GetMaxTupleId);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_GetBaseType>( hLib , "CAPI_Array_GetBaseType_B4C094D2", this->fpArray_GetBaseType);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_AppendArray>( hLib , "CAPI_Array_AppendArray_738A6D2B", this->fpArray_AppendArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_ExtractTuples>( hLib , "CAPI_Array_ExtractTuples_35B33DC6", this->fpArray_ExtractTuples);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_CopyTuple>( hLib , "CAPI_Array_CopyTuple_9C3B2F1F", this->fpArray_CopyTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_CompareTuples>( hLib , "CAPI_Array_CompareTuples_F70DC98F", this->fpArray_CompareTuples);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_CopyRange>( hLib , "CAPI_Array_CopyRange_3C0A32FD", this->fpArray_CopyRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_SetAlternativeName>( hLib , "CAPI_Array_SetAlternativeName_DFAFD8F8", this->fpArray_SetAlternativeName);
		all_successfully_loaded &= LoadFunctionPointer<FP_Array_GetAlternativeName>( hLib , "CAPI_Array_GetAlternativeName_CCBB74AB", this->fpArray_GetAlternativeName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ValueArray_SetRealItem>( hLib , "CAPI_ValueArray_SetRealItem_90362842", this->fpValueArray_SetRealItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_ValueArray_GetRealItem>( hLib , "CAPI_ValueArray_GetRealItem_5D91432D", this->fpValueArray_GetRealItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateBoolArray>( hLib , "CAPI_CreateBoolArray", this->fpCreateBoolArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_AddItem>( hLib , "CAPI_BoolArray_AddItem_8E8FF636", this->fpBoolArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_SetItem>( hLib , "CAPI_BoolArray_SetItem_22D38489", this->fpBoolArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_GetItem>( hLib , "CAPI_BoolArray_GetItem_E8D7601F", this->fpBoolArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_AddTuple>( hLib , "CAPI_BoolArray_AddTuple_23680109", this->fpBoolArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_SetTuple>( hLib , "CAPI_BoolArray_SetTuple_FBAD8C48", this->fpBoolArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_GetTuple>( hLib , "CAPI_BoolArray_GetTuple_E8D7601F", this->fpBoolArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_GetData>( hLib , "CAPI_BoolArray_GetData_C92E1C4A", this->fpBoolArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_GetDataRange>( hLib , "CAPI_BoolArray_GetDataRange_C1751F17", this->fpBoolArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_SetData>( hLib , "CAPI_BoolArray_SetData_EC26427E", this->fpBoolArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_SetDataRange>( hLib , "CAPI_BoolArray_SetDataRange_F295E330", this->fpBoolArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoolArray_SetDataFromMemoryPtr>( hLib , "CAPI_BoolArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpBoolArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateCharArray>( hLib , "CAPI_CreateCharArray", this->fpCreateCharArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_AddItem>( hLib , "CAPI_CharArray_AddItem_277DA55F", this->fpCharArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_SetItem>( hLib , "CAPI_CharArray_SetItem_D00E0000", this->fpCharArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_GetItem>( hLib , "CAPI_CharArray_GetItem_8901FD4F", this->fpCharArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_AddTuple>( hLib , "CAPI_CharArray_AddTuple_4F665FEA", this->fpCharArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_SetTuple>( hLib , "CAPI_CharArray_SetTuple_76CE91BE", this->fpCharArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_GetTuple>( hLib , "CAPI_CharArray_GetTuple_8901FD4F", this->fpCharArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_GetData>( hLib , "CAPI_CharArray_GetData_460F502D", this->fpCharArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_GetDataRange>( hLib , "CAPI_CharArray_GetDataRange_42386C9E", this->fpCharArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_SetData>( hLib , "CAPI_CharArray_SetData_35315DCC", this->fpCharArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_SetDataRange>( hLib , "CAPI_CharArray_SetDataRange_D9BCD937", this->fpCharArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_CharArray_SetDataFromMemoryPtr>( hLib , "CAPI_CharArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpCharArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateDoubleArray>( hLib , "CAPI_CreateDoubleArray", this->fpCreateDoubleArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_AddItem>( hLib , "CAPI_DoubleArray_AddItem_9EBBCD4A", this->fpDoubleArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_SetItem>( hLib , "CAPI_DoubleArray_SetItem_EBD4C5BE", this->fpDoubleArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_GetItem>( hLib , "CAPI_DoubleArray_GetItem_6DAF035C", this->fpDoubleArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_AddTuple>( hLib , "CAPI_DoubleArray_AddTuple_81AE12C6", this->fpDoubleArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_SetTuple>( hLib , "CAPI_DoubleArray_SetTuple_4DD59EF7", this->fpDoubleArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_GetTuple>( hLib , "CAPI_DoubleArray_GetTuple_6DAF035C", this->fpDoubleArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_GetData>( hLib , "CAPI_DoubleArray_GetData_998CEC8F", this->fpDoubleArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_GetDataRange>( hLib , "CAPI_DoubleArray_GetDataRange_1E3D4830", this->fpDoubleArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_SetData>( hLib , "CAPI_DoubleArray_SetData_64A9764E", this->fpDoubleArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_SetDataRange>( hLib , "CAPI_DoubleArray_SetDataRange_7E32A55C", this->fpDoubleArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_DoubleArray_SetDataFromMemoryPtr>( hLib , "CAPI_DoubleArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpDoubleArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateFloatArray>( hLib , "CAPI_CreateFloatArray", this->fpCreateFloatArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_AddItem>( hLib , "CAPI_FloatArray_AddItem_5912A79D", this->fpFloatArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_SetItem>( hLib , "CAPI_FloatArray_SetItem_F05F34FC", this->fpFloatArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_GetItem>( hLib , "CAPI_FloatArray_GetItem_8C41B546", this->fpFloatArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_AddTuple>( hLib , "CAPI_FloatArray_AddTuple_B6B24CA5", this->fpFloatArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_SetTuple>( hLib , "CAPI_FloatArray_SetTuple_FBFAEDEA", this->fpFloatArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_GetTuple>( hLib , "CAPI_FloatArray_GetTuple_8C41B546", this->fpFloatArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_GetData>( hLib , "CAPI_FloatArray_GetData_19162B56", this->fpFloatArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_GetDataRange>( hLib , "CAPI_FloatArray_GetDataRange_E005FB17", this->fpFloatArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_SetData>( hLib , "CAPI_FloatArray_SetData_786425F2", this->fpFloatArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_SetDataRange>( hLib , "CAPI_FloatArray_SetDataRange_B9252FEC", this->fpFloatArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_FloatArray_SetDataFromMemoryPtr>( hLib , "CAPI_FloatArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpFloatArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateIntArray>( hLib , "CAPI_CreateIntArray", this->fpCreateIntArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_AddItem>( hLib , "CAPI_IntArray_AddItem_EAB11672", this->fpIntArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_SetItem>( hLib , "CAPI_IntArray_SetItem_EB23B7C0", this->fpIntArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_GetItem>( hLib , "CAPI_IntArray_GetItem_8BECCF03", this->fpIntArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_AddTuple>( hLib , "CAPI_IntArray_AddTuple_7B617C3F", this->fpIntArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_SetTuple>( hLib , "CAPI_IntArray_SetTuple_F6680CEF", this->fpIntArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_GetTuple>( hLib , "CAPI_IntArray_GetTuple_8BECCF03", this->fpIntArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_GetData>( hLib , "CAPI_IntArray_GetData_A8209622", this->fpIntArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_GetDataRange>( hLib , "CAPI_IntArray_GetDataRange_C7187409", this->fpIntArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_SetData>( hLib , "CAPI_IntArray_SetData_0ED02EC7", this->fpIntArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_SetDataRange>( hLib , "CAPI_IntArray_SetDataRange_CF1635A5", this->fpIntArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_IntArray_SetDataFromMemoryPtr>( hLib , "CAPI_IntArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpIntArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateLongArray>( hLib , "CAPI_CreateLongArray", this->fpCreateLongArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_AddItem>( hLib , "CAPI_LongArray_AddItem_53ED0A9D", this->fpLongArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_SetItem>( hLib , "CAPI_LongArray_SetItem_E184FE90", this->fpLongArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_GetItem>( hLib , "CAPI_LongArray_GetItem_8289EF9F", this->fpLongArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_AddTuple>( hLib , "CAPI_LongArray_AddTuple_E5B2E07A", this->fpLongArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_SetTuple>( hLib , "CAPI_LongArray_SetTuple_9869855C", this->fpLongArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_GetTuple>( hLib , "CAPI_LongArray_GetTuple_8289EF9F", this->fpLongArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_GetData>( hLib , "CAPI_LongArray_GetData_3FDEB65A", this->fpLongArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_GetDataRange>( hLib , "CAPI_LongArray_GetDataRange_B14A98A2", this->fpLongArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_SetData>( hLib , "CAPI_LongArray_SetData_6A04A05C", this->fpLongArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_SetDataRange>( hLib , "CAPI_LongArray_SetDataRange_6986EB61", this->fpLongArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_LongArray_SetDataFromMemoryPtr>( hLib , "CAPI_LongArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpLongArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateRealArray>( hLib , "CAPI_CreateRealArray", this->fpCreateRealArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_AddItem>( hLib , "CAPI_RealArray_AddItem_74B7D40A", this->fpRealArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_SetItem>( hLib , "CAPI_RealArray_SetItem_90362842", this->fpRealArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_GetItem>( hLib , "CAPI_RealArray_GetItem_5D91432D", this->fpRealArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_AddTuple>( hLib , "CAPI_RealArray_AddTuple_1ED03D45", this->fpRealArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_SetTuple>( hLib , "CAPI_RealArray_SetTuple_D3EBA9CE", this->fpRealArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_GetTuple>( hLib , "CAPI_RealArray_GetTuple_5D91432D", this->fpRealArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_GetData>( hLib , "CAPI_RealArray_GetData_D67B6715", this->fpRealArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_GetDataRange>( hLib , "CAPI_RealArray_GetDataRange_DC324CD5", this->fpRealArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_SetData>( hLib , "CAPI_RealArray_SetData_68A2C4EA", this->fpRealArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_SetDataRange>( hLib , "CAPI_RealArray_SetDataRange_F1BB824C", this->fpRealArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_RealArray_SetDataFromMemoryPtr>( hLib , "CAPI_RealArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpRealArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateRidArray>( hLib , "CAPI_CreateRidArray", this->fpCreateRidArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_AddItem>( hLib , "CAPI_RidArray_AddItem_8272B53C", this->fpRidArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_SetItem>( hLib , "CAPI_RidArray_SetItem_E03BC66F", this->fpRidArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_GetItem>( hLib , "CAPI_RidArray_GetItem_72AAA9DE", this->fpRidArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_AddTuple>( hLib , "CAPI_RidArray_AddTuple_D60998E6", this->fpRidArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_SetTuple>( hLib , "CAPI_RidArray_SetTuple_50EE001B", this->fpRidArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_GetTuple>( hLib , "CAPI_RidArray_GetTuple_72AAA9DE", this->fpRidArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_GetData>( hLib , "CAPI_RidArray_GetData_CDBA2BD0", this->fpRidArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_GetDataRange>( hLib , "CAPI_RidArray_GetDataRange_0F347CA6", this->fpRidArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_SetData>( hLib , "CAPI_RidArray_SetData_7A65FF5B", this->fpRidArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_SetDataRange>( hLib , "CAPI_RidArray_SetDataRange_222635C5", this->fpRidArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_RidArray_SetDataFromMemoryPtr>( hLib , "CAPI_RidArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpRidArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShortArray>( hLib , "CAPI_CreateShortArray", this->fpCreateShortArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_AddItem>( hLib , "CAPI_ShortArray_AddItem_337CDD82", this->fpShortArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_SetItem>( hLib , "CAPI_ShortArray_SetItem_A8DBF40B", this->fpShortArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_GetItem>( hLib , "CAPI_ShortArray_GetItem_705CC2D7", this->fpShortArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_AddTuple>( hLib , "CAPI_ShortArray_AddTuple_54E92164", this->fpShortArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_SetTuple>( hLib , "CAPI_ShortArray_SetTuple_9C13A1AF", this->fpShortArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_GetTuple>( hLib , "CAPI_ShortArray_GetTuple_705CC2D7", this->fpShortArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_GetData>( hLib , "CAPI_ShortArray_GetData_EFB3F349", this->fpShortArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_GetDataRange>( hLib , "CAPI_ShortArray_GetDataRange_6153D87E", this->fpShortArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_SetData>( hLib , "CAPI_ShortArray_SetData_7C4B32E5", this->fpShortArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_SetDataRange>( hLib , "CAPI_ShortArray_SetDataRange_32901334", this->fpShortArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShortArray_SetDataFromMemoryPtr>( hLib , "CAPI_ShortArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpShortArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateUnsignedCharArray>( hLib , "CAPI_CreateUnsignedCharArray", this->fpCreateUnsignedCharArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_AddItem>( hLib , "CAPI_UnsignedCharArray_AddItem_58C89FBF", this->fpUnsignedCharArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_SetItem>( hLib , "CAPI_UnsignedCharArray_SetItem_5BC31C1F", this->fpUnsignedCharArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_GetItem>( hLib , "CAPI_UnsignedCharArray_GetItem_1A5A67B4", this->fpUnsignedCharArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_AddTuple>( hLib , "CAPI_UnsignedCharArray_AddTuple_6F31AFA5", this->fpUnsignedCharArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_SetTuple>( hLib , "CAPI_UnsignedCharArray_SetTuple_94B6B68B", this->fpUnsignedCharArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_GetTuple>( hLib , "CAPI_UnsignedCharArray_GetTuple_1A5A67B4", this->fpUnsignedCharArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_GetData>( hLib , "CAPI_UnsignedCharArray_GetData_0E4EB272", this->fpUnsignedCharArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_GetDataRange>( hLib , "CAPI_UnsignedCharArray_GetDataRange_536D1B67", this->fpUnsignedCharArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_SetData>( hLib , "CAPI_UnsignedCharArray_SetData_C7629E79", this->fpUnsignedCharArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_SetDataRange>( hLib , "CAPI_UnsignedCharArray_SetDataRange_3F389787", this->fpUnsignedCharArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedCharArray_SetDataFromMemoryPtr>( hLib , "CAPI_UnsignedCharArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpUnsignedCharArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateUnsignedIntArray>( hLib , "CAPI_CreateUnsignedIntArray", this->fpCreateUnsignedIntArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_AddItem>( hLib , "CAPI_UnsignedIntArray_AddItem_E4EBF20A", this->fpUnsignedIntArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_SetItem>( hLib , "CAPI_UnsignedIntArray_SetItem_94274208", this->fpUnsignedIntArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_GetItem>( hLib , "CAPI_UnsignedIntArray_GetItem_2A196211", this->fpUnsignedIntArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_AddTuple>( hLib , "CAPI_UnsignedIntArray_AddTuple_C78B237E", this->fpUnsignedIntArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_SetTuple>( hLib , "CAPI_UnsignedIntArray_SetTuple_7F3A1F5F", this->fpUnsignedIntArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_GetTuple>( hLib , "CAPI_UnsignedIntArray_GetTuple_2A196211", this->fpUnsignedIntArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_GetData>( hLib , "CAPI_UnsignedIntArray_GetData_85E4C5D5", this->fpUnsignedIntArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_GetDataRange>( hLib , "CAPI_UnsignedIntArray_GetDataRange_1C01B226", this->fpUnsignedIntArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_SetData>( hLib , "CAPI_UnsignedIntArray_SetData_B8DA6D03", this->fpUnsignedIntArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_SetDataRange>( hLib , "CAPI_UnsignedIntArray_SetDataRange_D7CA6D99", this->fpUnsignedIntArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedIntArray_SetDataFromMemoryPtr>( hLib , "CAPI_UnsignedIntArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpUnsignedIntArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateUnsignedLongArray>( hLib , "CAPI_CreateUnsignedLongArray", this->fpCreateUnsignedLongArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_AddItem>( hLib , "CAPI_UnsignedLongArray_AddItem_E242FC8D", this->fpUnsignedLongArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_SetItem>( hLib , "CAPI_UnsignedLongArray_SetItem_E6D0E986", this->fpUnsignedLongArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_GetItem>( hLib , "CAPI_UnsignedLongArray_GetItem_5E12AAE1", this->fpUnsignedLongArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_AddTuple>( hLib , "CAPI_UnsignedLongArray_AddTuple_C498912B", this->fpUnsignedLongArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_SetTuple>( hLib , "CAPI_UnsignedLongArray_SetTuple_00717E8B", this->fpUnsignedLongArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_GetTuple>( hLib , "CAPI_UnsignedLongArray_GetTuple_5E12AAE1", this->fpUnsignedLongArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_GetData>( hLib , "CAPI_UnsignedLongArray_GetData_D8E78D8B", this->fpUnsignedLongArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_GetDataRange>( hLib , "CAPI_UnsignedLongArray_GetDataRange_FE3C848D", this->fpUnsignedLongArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_SetData>( hLib , "CAPI_UnsignedLongArray_SetData_9AA1ABBB", this->fpUnsignedLongArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_SetDataRange>( hLib , "CAPI_UnsignedLongArray_SetDataRange_DE3FB0F9", this->fpUnsignedLongArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedLongArray_SetDataFromMemoryPtr>( hLib , "CAPI_UnsignedLongArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpUnsignedLongArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateUnsignedShortArray>( hLib , "CAPI_CreateUnsignedShortArray", this->fpCreateUnsignedShortArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_AddItem>( hLib , "CAPI_UnsignedShortArray_AddItem_EB3094CA", this->fpUnsignedShortArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_SetItem>( hLib , "CAPI_UnsignedShortArray_SetItem_F69F1639", this->fpUnsignedShortArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_GetItem>( hLib , "CAPI_UnsignedShortArray_GetItem_A1AD8F04", this->fpUnsignedShortArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_AddTuple>( hLib , "CAPI_UnsignedShortArray_AddTuple_B26F9604", this->fpUnsignedShortArray_AddTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_SetTuple>( hLib , "CAPI_UnsignedShortArray_SetTuple_454D3DBE", this->fpUnsignedShortArray_SetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_GetTuple>( hLib , "CAPI_UnsignedShortArray_GetTuple_A1AD8F04", this->fpUnsignedShortArray_GetTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_GetData>( hLib , "CAPI_UnsignedShortArray_GetData_0C1BE248", this->fpUnsignedShortArray_GetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_GetDataRange>( hLib , "CAPI_UnsignedShortArray_GetDataRange_CD1525B4", this->fpUnsignedShortArray_GetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_SetData>( hLib , "CAPI_UnsignedShortArray_SetData_78D540A8", this->fpUnsignedShortArray_SetData);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_SetDataRange>( hLib , "CAPI_UnsignedShortArray_SetDataRange_18F5EFCB", this->fpUnsignedShortArray_SetDataRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_UnsignedShortArray_SetDataFromMemoryPtr>( hLib , "CAPI_UnsignedShortArray_SetDataFromMemoryPtr_6FA6F4EF", this->fpUnsignedShortArray_SetDataFromMemoryPtr);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_NewCopy>( hLib , "CAPI_ChunkedImageData_NewCopy_A0073BB5", this->fpChunkedImageData_NewCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_DeepCopy>( hLib , "CAPI_ChunkedImageData_DeepCopy_71AB60F7", this->fpChunkedImageData_DeepCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_SetTemplateImage>( hLib , "CAPI_ChunkedImageData_SetTemplateImage_738A6D2B", this->fpChunkedImageData_SetTemplateImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_GetTemplateXSize>( hLib , "CAPI_ChunkedImageData_GetTemplateXSize_85E4C5D5", this->fpChunkedImageData_GetTemplateXSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_GetTemplateYSize>( hLib , "CAPI_ChunkedImageData_GetTemplateYSize_85E4C5D5", this->fpChunkedImageData_GetTemplateYSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_GetTemplateZSize>( hLib , "CAPI_ChunkedImageData_GetTemplateZSize_85E4C5D5", this->fpChunkedImageData_GetTemplateZSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_GetXSize>( hLib , "CAPI_ChunkedImageData_GetXSize_85E4C5D5", this->fpChunkedImageData_GetXSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_GetYSize>( hLib , "CAPI_ChunkedImageData_GetYSize_85E4C5D5", this->fpChunkedImageData_GetYSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_GetZSize>( hLib , "CAPI_ChunkedImageData_GetZSize_85E4C5D5", this->fpChunkedImageData_GetZSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_Set1DSize>( hLib , "CAPI_ChunkedImageData_Set1DSize_E4EBF20A", this->fpChunkedImageData_Set1DSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_Set2DSize>( hLib , "CAPI_ChunkedImageData_Set2DSize_DA3B08AB", this->fpChunkedImageData_Set2DSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_Set3DSize>( hLib , "CAPI_ChunkedImageData_Set3DSize_B1BE7571", this->fpChunkedImageData_Set3DSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_GetTotalXSize>( hLib , "CAPI_ChunkedImageData_GetTotalXSize_85E4C5D5", this->fpChunkedImageData_GetTotalXSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_GetTotalYSize>( hLib , "CAPI_ChunkedImageData_GetTotalYSize_85E4C5D5", this->fpChunkedImageData_GetTotalYSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_GetTotalZSize>( hLib , "CAPI_ChunkedImageData_GetTotalZSize_85E4C5D5", this->fpChunkedImageData_GetTotalZSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_Reset>( hLib , "CAPI_ChunkedImageData_Reset_69A03065", this->fpChunkedImageData_Reset);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_LockChunk1D>( hLib , "CAPI_ChunkedImageData_LockChunk1D_A507144B", this->fpChunkedImageData_LockChunk1D);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_LockChunk2D>( hLib , "CAPI_ChunkedImageData_LockChunk2D_45A1401D", this->fpChunkedImageData_LockChunk2D);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_LockChunk3D>( hLib , "CAPI_ChunkedImageData_LockChunk3D_403C740C", this->fpChunkedImageData_LockChunk3D);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_IsChunkLocked1D>( hLib , "CAPI_ChunkedImageData_IsChunkLocked1D_E8D7601F", this->fpChunkedImageData_IsChunkLocked1D);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_IsChunkLocked2D>( hLib , "CAPI_ChunkedImageData_IsChunkLocked2D_A3173CB1", this->fpChunkedImageData_IsChunkLocked2D);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_IsChunkLocked3D>( hLib , "CAPI_ChunkedImageData_IsChunkLocked3D_46E40310", this->fpChunkedImageData_IsChunkLocked3D);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_UnlockChunk1D>( hLib , "CAPI_ChunkedImageData_UnlockChunk1D_8272B53C", this->fpChunkedImageData_UnlockChunk1D);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_UnlockChunk2D>( hLib , "CAPI_ChunkedImageData_UnlockChunk2D_E03BC66F", this->fpChunkedImageData_UnlockChunk2D);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChunkedImageData_UnlockChunk3D>( hLib , "CAPI_ChunkedImageData_UnlockChunk3D_0BDE6EC1", this->fpChunkedImageData_UnlockChunk3D);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateDirectXRenderer>( hLib , "CAPI_CreateDirectXRenderer", this->fpCreateDirectXRenderer);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_CreatePreviewer>( hLib , "CAPI_DirectXRenderer_CreatePreviewer_782F1458", this->fpDirectXRenderer_CreatePreviewer);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_RenderAlongCameraPathAndStorePics>( hLib , "CAPI_DirectXRenderer_RenderAlongCameraPathAndStorePics_EBBC865A", this->fpDirectXRenderer_RenderAlongCameraPathAndStorePics);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_SetRenderWireFrameMode>( hLib , "CAPI_DirectXRenderer_SetRenderWireFrameMode_8E8FF636", this->fpDirectXRenderer_SetRenderWireFrameMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_SetBackgroundColor>( hLib , "CAPI_DirectXRenderer_SetBackgroundColor_8C824797", this->fpDirectXRenderer_SetBackgroundColor);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_GetBackgroundColor>( hLib , "CAPI_DirectXRenderer_GetBackgroundColor_D67B6715", this->fpDirectXRenderer_GetBackgroundColor);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_SetUseInMemoryShaderGeneration>( hLib , "CAPI_DirectXRenderer_SetUseInMemoryShaderGeneration_8E8FF636", this->fpDirectXRenderer_SetUseInMemoryShaderGeneration);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_GetUseInMemoryShaderGeneration>( hLib , "CAPI_DirectXRenderer_GetUseInMemoryShaderGeneration_C92E1C4A", this->fpDirectXRenderer_GetUseInMemoryShaderGeneration);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_LoadGeometryData>( hLib , "CAPI_DirectXRenderer_LoadGeometryData_F0E04A10", this->fpDirectXRenderer_LoadGeometryData);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_LoadGeometryDataWithMaterialShadingNetwork>( hLib , "CAPI_DirectXRenderer_LoadGeometryDataWithMaterialShadingNetwork_492DF2A4", this->fpDirectXRenderer_LoadGeometryDataWithMaterialShadingNetwork);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_SetScene>( hLib , "CAPI_DirectXRenderer_SetScene_738A6D2B", this->fpDirectXRenderer_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_DirectXRenderer_InitializeSceneRenderData>( hLib , "CAPI_DirectXRenderer_InitializeSceneRenderData_C92E1C4A", this->fpDirectXRenderer_InitializeSceneRenderData);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_NewCopy>( hLib , "CAPI_FieldData_NewCopy_166D799A", this->fpFieldData_NewCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_NewPackedCopy>( hLib , "CAPI_FieldData_NewPackedCopy_56578DE9", this->fpFieldData_NewPackedCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_DeepCopy>( hLib , "CAPI_FieldData_DeepCopy_71AB60F7", this->fpFieldData_DeepCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_IsSetupIdenticalTo>( hLib , "CAPI_FieldData_IsSetupIdenticalTo_492DF2A4", this->fpFieldData_IsSetupIdenticalTo);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_IndexedCopy>( hLib , "CAPI_FieldData_IndexedCopy_27AF70D2", this->fpFieldData_IndexedCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_IndexedCombine>( hLib , "CAPI_FieldData_IndexedCombine_945FFA6C", this->fpFieldData_IndexedCombine);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_IndexedCombine3>( hLib , "CAPI_FieldData_IndexedCombine3_945FFA6C", this->fpFieldData_IndexedCombine3);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_Clear>( hLib , "CAPI_FieldData_Clear_69A03065", this->fpFieldData_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_RemoveAllFields>( hLib , "CAPI_FieldData_RemoveAllFields_69A03065", this->fpFieldData_RemoveAllFields);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_IsEmpty>( hLib , "CAPI_FieldData_IsEmpty_A8209622", this->fpFieldData_IsEmpty);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_AppendTuples>( hLib , "CAPI_FieldData_AppendTuples_71AB60F7", this->fpFieldData_AppendTuples);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_ExtractTuples>( hLib , "CAPI_FieldData_ExtractTuples_35B33DC6", this->fpFieldData_ExtractTuples);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_AddField>( hLib , "CAPI_FieldData_AddField_738A6D2B", this->fpFieldData_AddField);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_AddBaseTypeField>( hLib , "CAPI_FieldData_AddBaseTypeField_EB97FDA6", this->fpFieldData_AddBaseTypeField);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_GetField>( hLib , "CAPI_FieldData_GetField_2F85F754", this->fpFieldData_GetField);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_GetFieldWithId>( hLib , "CAPI_FieldData_GetFieldWithId_BC3565C4", this->fpFieldData_GetFieldWithId);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_RemoveField>( hLib , "CAPI_FieldData_RemoveField_DFAFD8F8", this->fpFieldData_RemoveField);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_SafeRemoveField>( hLib , "CAPI_FieldData_SafeRemoveField_DFAFD8F8", this->fpFieldData_SafeRemoveField);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_GetFieldCount>( hLib , "CAPI_FieldData_GetFieldCount_85E4C5D5", this->fpFieldData_GetFieldCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_GetMaxFieldId>( hLib , "CAPI_FieldData_GetMaxFieldId_CDBA2BD0", this->fpFieldData_GetMaxFieldId);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_GetFirstFieldHandle>( hLib , "CAPI_FieldData_GetFirstFieldHandle_4FB6181A", this->fpFieldData_GetFirstFieldHandle);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_GetNextFieldHandle>( hLib , "CAPI_FieldData_GetNextFieldHandle_866931D2", this->fpFieldData_GetNextFieldHandle);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_GetFieldWithHandle>( hLib , "CAPI_FieldData_GetFieldWithHandle_70F4F895", this->fpFieldData_GetFieldWithHandle);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_SetTupleCount>( hLib , "CAPI_FieldData_SetTupleCount_E4EBF20A", this->fpFieldData_SetTupleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_GetTupleCount>( hLib , "CAPI_FieldData_GetTupleCount_85E4C5D5", this->fpFieldData_GetTupleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_AddTupleCount>( hLib , "CAPI_FieldData_AddTupleCount_E4EBF20A", this->fpFieldData_AddTupleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_GetMaxTupleId>( hLib , "CAPI_FieldData_GetMaxTupleId_CDBA2BD0", this->fpFieldData_GetMaxTupleId);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_CopyTuple>( hLib , "CAPI_FieldData_CopyTuple_9C3B2F1F", this->fpFieldData_CopyTuple);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_CopyCombineTuples>( hLib , "CAPI_FieldData_CopyCombineTuples_44F9E616", this->fpFieldData_CopyCombineTuples);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_CopyCombine3Tuples>( hLib , "CAPI_FieldData_CopyCombine3Tuples_1AABAFCE", this->fpFieldData_CopyCombine3Tuples);
		all_successfully_loaded &= LoadFunctionPointer<FP_FieldData_CopyRange>( hLib , "CAPI_FieldData_CopyRange_3C0A32FD", this->fpFieldData_CopyRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateGeometryData>( hLib , "CAPI_CreateGeometryData", this->fpCreateGeometryData);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_NewCopy>( hLib , "CAPI_GeometryData_NewCopy_40790827", this->fpGeometryData_NewCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_NewPackedCopy>( hLib , "CAPI_GeometryData_NewPackedCopy_249D90EE", this->fpGeometryData_NewPackedCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_DeepCopy>( hLib , "CAPI_GeometryData_DeepCopy_71AB60F7", this->fpGeometryData_DeepCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_SetVertexCount>( hLib , "CAPI_GeometryData_SetVertexCount_E4EBF20A", this->fpGeometryData_SetVertexCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetVertexCount>( hLib , "CAPI_GeometryData_GetVertexCount_85E4C5D5", this->fpGeometryData_GetVertexCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddVertices>( hLib , "CAPI_GeometryData_AddVertices_E4EBF20A", this->fpGeometryData_AddVertices);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_SetTriangleCount>( hLib , "CAPI_GeometryData_SetTriangleCount_E4EBF20A", this->fpGeometryData_SetTriangleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetTriangleCount>( hLib , "CAPI_GeometryData_GetTriangleCount_85E4C5D5", this->fpGeometryData_GetTriangleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddTriangles>( hLib , "CAPI_GeometryData_AddTriangles_E4EBF20A", this->fpGeometryData_AddTriangles);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_FindEdgeIdsFromVertexPairs>( hLib , "CAPI_GeometryData_FindEdgeIdsFromVertexPairs_21583BDE", this->fpGeometryData_FindEdgeIdsFromVertexPairs);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetCoords>( hLib , "CAPI_GeometryData_GetCoords_692A1E94", this->fpGeometryData_GetCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddVertexLocks>( hLib , "CAPI_GeometryData_AddVertexLocks_69A03065", this->fpGeometryData_AddVertexLocks);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveVertexLocks>( hLib , "CAPI_GeometryData_RemoveVertexLocks_69A03065", this->fpGeometryData_RemoveVertexLocks);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetVertexLocks>( hLib , "CAPI_GeometryData_GetVertexLocks_471658F2", this->fpGeometryData_GetVertexLocks);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddBoneWeights>( hLib , "CAPI_GeometryData_AddBoneWeights_E4EBF20A", this->fpGeometryData_AddBoneWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveBoneWeights>( hLib , "CAPI_GeometryData_RemoveBoneWeights_69A03065", this->fpGeometryData_RemoveBoneWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetBoneWeights>( hLib , "CAPI_GeometryData_GetBoneWeights_692A1E94", this->fpGeometryData_GetBoneWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetBoneIds>( hLib , "CAPI_GeometryData_GetBoneIds_CD352DDB", this->fpGeometryData_GetBoneIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddVertexWeights>( hLib , "CAPI_GeometryData_AddVertexWeights_69A03065", this->fpGeometryData_AddVertexWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveVertexWeights>( hLib , "CAPI_GeometryData_RemoveVertexWeights_69A03065", this->fpGeometryData_RemoveVertexWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetVertexWeights>( hLib , "CAPI_GeometryData_GetVertexWeights_692A1E94", this->fpGeometryData_GetVertexWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddUserVertexField>( hLib , "CAPI_GeometryData_AddUserVertexField_738A6D2B", this->fpGeometryData_AddUserVertexField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveUserVertexField>( hLib , "CAPI_GeometryData_RemoveUserVertexField_DFAFD8F8", this->fpGeometryData_RemoveUserVertexField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetUserVertexField>( hLib , "CAPI_GeometryData_GetUserVertexField_2F85F754", this->fpGeometryData_GetUserVertexField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddBaseTypeUserVertexField>( hLib , "CAPI_GeometryData_AddBaseTypeUserVertexField_28207052", this->fpGeometryData_AddBaseTypeUserVertexField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CopyVertex>( hLib , "CAPI_GeometryData_CopyVertex_9C3B2F1F", this->fpGeometryData_CopyVertex);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CopyCombineVertices>( hLib , "CAPI_GeometryData_CopyCombineVertices_44F9E616", this->fpGeometryData_CopyCombineVertices);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CopyCombine3Vertices>( hLib , "CAPI_GeometryData_CopyCombine3Vertices_1AABAFCE", this->fpGeometryData_CopyCombine3Vertices);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetVertices>( hLib , "CAPI_GeometryData_GetVertices_EF249DF7", this->fpGeometryData_GetVertices);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetVertexIds>( hLib , "CAPI_GeometryData_GetVertexIds_CD352DDB", this->fpGeometryData_GetVertexIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddTexCoords>( hLib , "CAPI_GeometryData_AddTexCoords_8272B53C", this->fpGeometryData_AddTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddNamedTexCoords>( hLib , "CAPI_GeometryData_AddNamedTexCoords_9B49F2EF", this->fpGeometryData_AddNamedTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveTexCoords>( hLib , "CAPI_GeometryData_RemoveTexCoords_8272B53C", this->fpGeometryData_RemoveTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveNamedTexCoords>( hLib , "CAPI_GeometryData_RemoveNamedTexCoords_5F793399", this->fpGeometryData_RemoveNamedTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetTexCoords>( hLib , "CAPI_GeometryData_GetTexCoords_F6F65D16", this->fpGeometryData_GetTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetNamedTexCoords>( hLib , "CAPI_GeometryData_GetNamedTexCoords_C1C943D5", this->fpGeometryData_GetNamedTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddTangents>( hLib , "CAPI_GeometryData_AddTangents_8272B53C", this->fpGeometryData_AddTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveTangents>( hLib , "CAPI_GeometryData_RemoveTangents_8272B53C", this->fpGeometryData_RemoveTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetTangents>( hLib , "CAPI_GeometryData_GetTangents_F6F65D16", this->fpGeometryData_GetTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetBitangents>( hLib , "CAPI_GeometryData_GetBitangents_F6F65D16", this->fpGeometryData_GetBitangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddNormals>( hLib , "CAPI_GeometryData_AddNormals_69A03065", this->fpGeometryData_AddNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveNormals>( hLib , "CAPI_GeometryData_RemoveNormals_69A03065", this->fpGeometryData_RemoveNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetNormals>( hLib , "CAPI_GeometryData_GetNormals_692A1E94", this->fpGeometryData_GetNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddColors>( hLib , "CAPI_GeometryData_AddColors_8272B53C", this->fpGeometryData_AddColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddNamedColors>( hLib , "CAPI_GeometryData_AddNamedColors_9B49F2EF", this->fpGeometryData_AddNamedColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveColors>( hLib , "CAPI_GeometryData_RemoveColors_8272B53C", this->fpGeometryData_RemoveColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveNamedColors>( hLib , "CAPI_GeometryData_RemoveNamedColors_5F793399", this->fpGeometryData_RemoveNamedColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetColors>( hLib , "CAPI_GeometryData_GetColors_F6F65D16", this->fpGeometryData_GetColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetNamedColors>( hLib , "CAPI_GeometryData_GetNamedColors_C1C943D5", this->fpGeometryData_GetNamedColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddUserCornerField>( hLib , "CAPI_GeometryData_AddUserCornerField_738A6D2B", this->fpGeometryData_AddUserCornerField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveUserCornerField>( hLib , "CAPI_GeometryData_RemoveUserCornerField_DFAFD8F8", this->fpGeometryData_RemoveUserCornerField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetUserCornerField>( hLib , "CAPI_GeometryData_GetUserCornerField_2F85F754", this->fpGeometryData_GetUserCornerField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddBaseTypeUserCornerField>( hLib , "CAPI_GeometryData_AddBaseTypeUserCornerField_28207052", this->fpGeometryData_AddBaseTypeUserCornerField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CopyCorner>( hLib , "CAPI_GeometryData_CopyCorner_9C3B2F1F", this->fpGeometryData_CopyCorner);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CopyCombineCorners>( hLib , "CAPI_GeometryData_CopyCombineCorners_44F9E616", this->fpGeometryData_CopyCombineCorners);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CopyCombine3Corners>( hLib , "CAPI_GeometryData_CopyCombine3Corners_1AABAFCE", this->fpGeometryData_CopyCombine3Corners);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetCorners>( hLib , "CAPI_GeometryData_GetCorners_EF249DF7", this->fpGeometryData_GetCorners);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddMaterialIds>( hLib , "CAPI_GeometryData_AddMaterialIds_69A03065", this->fpGeometryData_AddMaterialIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveMaterialIds>( hLib , "CAPI_GeometryData_RemoveMaterialIds_69A03065", this->fpGeometryData_RemoveMaterialIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetMaterialIds>( hLib , "CAPI_GeometryData_GetMaterialIds_CD352DDB", this->fpGeometryData_GetMaterialIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddGroupIds>( hLib , "CAPI_GeometryData_AddGroupIds_69A03065", this->fpGeometryData_AddGroupIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveGroupIds>( hLib , "CAPI_GeometryData_RemoveGroupIds_69A03065", this->fpGeometryData_RemoveGroupIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetGroupIds>( hLib , "CAPI_GeometryData_GetGroupIds_CD352DDB", this->fpGeometryData_GetGroupIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddUserTriangleField>( hLib , "CAPI_GeometryData_AddUserTriangleField_738A6D2B", this->fpGeometryData_AddUserTriangleField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveUserTriangleField>( hLib , "CAPI_GeometryData_RemoveUserTriangleField_DFAFD8F8", this->fpGeometryData_RemoveUserTriangleField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetUserTriangleField>( hLib , "CAPI_GeometryData_GetUserTriangleField_2F85F754", this->fpGeometryData_GetUserTriangleField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddBaseTypeUserTriangleField>( hLib , "CAPI_GeometryData_AddBaseTypeUserTriangleField_28207052", this->fpGeometryData_AddBaseTypeUserTriangleField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CopyTriangle>( hLib , "CAPI_GeometryData_CopyTriangle_9C3B2F1F", this->fpGeometryData_CopyTriangle);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CopyCombineTriangles>( hLib , "CAPI_GeometryData_CopyCombineTriangles_44F9E616", this->fpGeometryData_CopyCombineTriangles);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CopyCombine3Triangles>( hLib , "CAPI_GeometryData_CopyCombine3Triangles_1AABAFCE", this->fpGeometryData_CopyCombine3Triangles);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetTriangles>( hLib , "CAPI_GeometryData_GetTriangles_EF249DF7", this->fpGeometryData_GetTriangles);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddCustomField>( hLib , "CAPI_GeometryData_AddCustomField_738A6D2B", this->fpGeometryData_AddCustomField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_RemoveCustomField>( hLib , "CAPI_GeometryData_RemoveCustomField_DFAFD8F8", this->fpGeometryData_RemoveCustomField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetCustomField>( hLib , "CAPI_GeometryData_GetCustomField_2F85F754", this->fpGeometryData_GetCustomField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AddBaseTypeCustomField>( hLib , "CAPI_GeometryData_AddBaseTypeCustomField_28207052", this->fpGeometryData_AddBaseTypeCustomField);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CleanupNanValues>( hLib , "CAPI_GeometryData_CleanupNanValues_69A03065", this->fpGeometryData_CleanupNanValues);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CleanupInvalidTriangles>( hLib , "CAPI_GeometryData_CleanupInvalidTriangles_69A03065", this->fpGeometryData_CleanupInvalidTriangles);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_FindNamedTexCoordsIndex>( hLib , "CAPI_GeometryData_FindNamedTexCoordsIndex_9B49F2EF", this->fpGeometryData_FindNamedTexCoordsIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_FindNamedColorsIndex>( hLib , "CAPI_GeometryData_FindNamedColorsIndex_9B49F2EF", this->fpGeometryData_FindNamedColorsIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CreateAABB>( hLib , "CAPI_GeometryData_CreateAABB_1ACA88D6", this->fpGeometryData_CreateAABB);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_ExpandVertices>( hLib , "CAPI_GeometryData_ExpandVertices_69A03065", this->fpGeometryData_ExpandVertices);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_ExtractRange>( hLib , "CAPI_GeometryData_ExtractRange_35B33DC6", this->fpGeometryData_ExtractRange);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_ExtractTriangles>( hLib , "CAPI_GeometryData_ExtractTriangles_21583BDE", this->fpGeometryData_ExtractTriangles);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_AppendGeometry>( hLib , "CAPI_GeometryData_AppendGeometry_738A6D2B", this->fpGeometryData_AppendGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_Compact>( hLib , "CAPI_GeometryData_Compact_8E8FF636", this->fpGeometryData_Compact);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_Weld>( hLib , "CAPI_GeometryData_Weld_74B7D40A", this->fpGeometryData_Weld);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetInf>( hLib , "CAPI_GeometryData_GetInf_D67B6715", this->fpGeometryData_GetInf);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_SetInf>( hLib , "CAPI_GeometryData_SetInf_1ED03D45", this->fpGeometryData_SetInf);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_GetSup>( hLib , "CAPI_GeometryData_GetSup_D67B6715", this->fpGeometryData_GetSup);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_SetSup>( hLib , "CAPI_GeometryData_SetSup_1ED03D45", this->fpGeometryData_SetSup);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_CalculateExtents>( hLib , "CAPI_GeometryData_CalculateExtents_8E8FF636", this->fpGeometryData_CalculateExtents);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_ExtentsContainCoords>( hLib , "CAPI_GeometryData_ExtentsContainCoords_C92E1C4A", this->fpGeometryData_ExtentsContainCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_Transform>( hLib , "CAPI_GeometryData_Transform_738A6D2B", this->fpGeometryData_Transform);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_DetectEdgeNeighbours>( hLib , "CAPI_GeometryData_DetectEdgeNeighbours_69A03065", this->fpGeometryData_DetectEdgeNeighbours);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_ConvertHandedness>( hLib , "CAPI_GeometryData_ConvertHandedness_69A03065", this->fpGeometryData_ConvertHandedness);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryData_ChangeWinding>( hLib , "CAPI_GeometryData_ChangeWinding_69A03065", this->fpGeometryData_ChangeWinding);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreatePackedGeometryData>( hLib , "CAPI_CreatePackedGeometryData", this->fpCreatePackedGeometryData);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_NewCopy>( hLib , "CAPI_PackedGeometryData_NewCopy_AEDA113F", this->fpPackedGeometryData_NewCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_NewUnpackedCopy>( hLib , "CAPI_PackedGeometryData_NewUnpackedCopy_1ACA88D6", this->fpPackedGeometryData_NewUnpackedCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_DeepCopy>( hLib , "CAPI_PackedGeometryData_DeepCopy_71AB60F7", this->fpPackedGeometryData_DeepCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AppendPackedGeometry>( hLib , "CAPI_PackedGeometryData_AppendPackedGeometry_C488851E", this->fpPackedGeometryData_AppendPackedGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_SetVertexCount>( hLib , "CAPI_PackedGeometryData_SetVertexCount_E4EBF20A", this->fpPackedGeometryData_SetVertexCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetVertexCount>( hLib , "CAPI_PackedGeometryData_GetVertexCount_85E4C5D5", this->fpPackedGeometryData_GetVertexCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddVertices>( hLib , "CAPI_PackedGeometryData_AddVertices_E4EBF20A", this->fpPackedGeometryData_AddVertices);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_SetTriangleCount>( hLib , "CAPI_PackedGeometryData_SetTriangleCount_E4EBF20A", this->fpPackedGeometryData_SetTriangleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetTriangleCount>( hLib , "CAPI_PackedGeometryData_GetTriangleCount_85E4C5D5", this->fpPackedGeometryData_GetTriangleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddTriangles>( hLib , "CAPI_PackedGeometryData_AddTriangles_E4EBF20A", this->fpPackedGeometryData_AddTriangles);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetCoords>( hLib , "CAPI_PackedGeometryData_GetCoords_692A1E94", this->fpPackedGeometryData_GetCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddVertexLocks>( hLib , "CAPI_PackedGeometryData_AddVertexLocks_69A03065", this->fpPackedGeometryData_AddVertexLocks);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveVertexLocks>( hLib , "CAPI_PackedGeometryData_RemoveVertexLocks_69A03065", this->fpPackedGeometryData_RemoveVertexLocks);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetVertexLocks>( hLib , "CAPI_PackedGeometryData_GetVertexLocks_471658F2", this->fpPackedGeometryData_GetVertexLocks);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddBoneWeights>( hLib , "CAPI_PackedGeometryData_AddBoneWeights_E4EBF20A", this->fpPackedGeometryData_AddBoneWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveBoneWeights>( hLib , "CAPI_PackedGeometryData_RemoveBoneWeights_69A03065", this->fpPackedGeometryData_RemoveBoneWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetBoneWeights>( hLib , "CAPI_PackedGeometryData_GetBoneWeights_692A1E94", this->fpPackedGeometryData_GetBoneWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetBoneIds>( hLib , "CAPI_PackedGeometryData_GetBoneIds_CD352DDB", this->fpPackedGeometryData_GetBoneIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddVertexWeighting>( hLib , "CAPI_PackedGeometryData_AddVertexWeighting_69A03065", this->fpPackedGeometryData_AddVertexWeighting);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveVertexWeighting>( hLib , "CAPI_PackedGeometryData_RemoveVertexWeighting_69A03065", this->fpPackedGeometryData_RemoveVertexWeighting);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetVertexWeighting>( hLib , "CAPI_PackedGeometryData_GetVertexWeighting_692A1E94", this->fpPackedGeometryData_GetVertexWeighting);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddVertexWeights>( hLib , "CAPI_PackedGeometryData_AddVertexWeights_69A03065", this->fpPackedGeometryData_AddVertexWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveVertexWeights>( hLib , "CAPI_PackedGeometryData_RemoveVertexWeights_69A03065", this->fpPackedGeometryData_RemoveVertexWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetVertexWeights>( hLib , "CAPI_PackedGeometryData_GetVertexWeights_692A1E94", this->fpPackedGeometryData_GetVertexWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddTexCoords>( hLib , "CAPI_PackedGeometryData_AddTexCoords_8272B53C", this->fpPackedGeometryData_AddTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddNamedTexCoords>( hLib , "CAPI_PackedGeometryData_AddNamedTexCoords_9B49F2EF", this->fpPackedGeometryData_AddNamedTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveTexCoords>( hLib , "CAPI_PackedGeometryData_RemoveTexCoords_8272B53C", this->fpPackedGeometryData_RemoveTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveNamedTexCoords>( hLib , "CAPI_PackedGeometryData_RemoveNamedTexCoords_5F793399", this->fpPackedGeometryData_RemoveNamedTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetTexCoords>( hLib , "CAPI_PackedGeometryData_GetTexCoords_F6F65D16", this->fpPackedGeometryData_GetTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetNamedTexCoords>( hLib , "CAPI_PackedGeometryData_GetNamedTexCoords_C1C943D5", this->fpPackedGeometryData_GetNamedTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddTangents>( hLib , "CAPI_PackedGeometryData_AddTangents_8272B53C", this->fpPackedGeometryData_AddTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveTangents>( hLib , "CAPI_PackedGeometryData_RemoveTangents_8272B53C", this->fpPackedGeometryData_RemoveTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetTangents>( hLib , "CAPI_PackedGeometryData_GetTangents_F6F65D16", this->fpPackedGeometryData_GetTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetBitangents>( hLib , "CAPI_PackedGeometryData_GetBitangents_F6F65D16", this->fpPackedGeometryData_GetBitangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddNormals>( hLib , "CAPI_PackedGeometryData_AddNormals_69A03065", this->fpPackedGeometryData_AddNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveNormals>( hLib , "CAPI_PackedGeometryData_RemoveNormals_69A03065", this->fpPackedGeometryData_RemoveNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetNormals>( hLib , "CAPI_PackedGeometryData_GetNormals_692A1E94", this->fpPackedGeometryData_GetNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddColors>( hLib , "CAPI_PackedGeometryData_AddColors_8272B53C", this->fpPackedGeometryData_AddColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddNamedColors>( hLib , "CAPI_PackedGeometryData_AddNamedColors_9B49F2EF", this->fpPackedGeometryData_AddNamedColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveColors>( hLib , "CAPI_PackedGeometryData_RemoveColors_8272B53C", this->fpPackedGeometryData_RemoveColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveNamedColors>( hLib , "CAPI_PackedGeometryData_RemoveNamedColors_5F793399", this->fpPackedGeometryData_RemoveNamedColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetColors>( hLib , "CAPI_PackedGeometryData_GetColors_F6F65D16", this->fpPackedGeometryData_GetColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetNamedColors>( hLib , "CAPI_PackedGeometryData_GetNamedColors_C1C943D5", this->fpPackedGeometryData_GetNamedColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddUserVertexField>( hLib , "CAPI_PackedGeometryData_AddUserVertexField_738A6D2B", this->fpPackedGeometryData_AddUserVertexField);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveUserVertexField>( hLib , "CAPI_PackedGeometryData_RemoveUserVertexField_DFAFD8F8", this->fpPackedGeometryData_RemoveUserVertexField);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetUserVertexField>( hLib , "CAPI_PackedGeometryData_GetUserVertexField_2F85F754", this->fpPackedGeometryData_GetUserVertexField);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddBaseTypeUserVertexField>( hLib , "CAPI_PackedGeometryData_AddBaseTypeUserVertexField_28207052", this->fpPackedGeometryData_AddBaseTypeUserVertexField);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetVertices>( hLib , "CAPI_PackedGeometryData_GetVertices_EF249DF7", this->fpPackedGeometryData_GetVertices);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetVertexIds>( hLib , "CAPI_PackedGeometryData_GetVertexIds_CD352DDB", this->fpPackedGeometryData_GetVertexIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddMaterialIds>( hLib , "CAPI_PackedGeometryData_AddMaterialIds_69A03065", this->fpPackedGeometryData_AddMaterialIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveMaterialIds>( hLib , "CAPI_PackedGeometryData_RemoveMaterialIds_69A03065", this->fpPackedGeometryData_RemoveMaterialIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetMaterialIds>( hLib , "CAPI_PackedGeometryData_GetMaterialIds_CD352DDB", this->fpPackedGeometryData_GetMaterialIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddGroupIds>( hLib , "CAPI_PackedGeometryData_AddGroupIds_69A03065", this->fpPackedGeometryData_AddGroupIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveGroupIds>( hLib , "CAPI_PackedGeometryData_RemoveGroupIds_69A03065", this->fpPackedGeometryData_RemoveGroupIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetGroupIds>( hLib , "CAPI_PackedGeometryData_GetGroupIds_CD352DDB", this->fpPackedGeometryData_GetGroupIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddUserTriangleField>( hLib , "CAPI_PackedGeometryData_AddUserTriangleField_738A6D2B", this->fpPackedGeometryData_AddUserTriangleField);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_RemoveUserTriangleField>( hLib , "CAPI_PackedGeometryData_RemoveUserTriangleField_DFAFD8F8", this->fpPackedGeometryData_RemoveUserTriangleField);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetUserTriangleField>( hLib , "CAPI_PackedGeometryData_GetUserTriangleField_2F85F754", this->fpPackedGeometryData_GetUserTriangleField);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_AddBaseTypeUserTriangleField>( hLib , "CAPI_PackedGeometryData_AddBaseTypeUserTriangleField_28207052", this->fpPackedGeometryData_AddBaseTypeUserTriangleField);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetTriangles>( hLib , "CAPI_PackedGeometryData_GetTriangles_EF249DF7", this->fpPackedGeometryData_GetTriangles);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetInf>( hLib , "CAPI_PackedGeometryData_GetInf_D67B6715", this->fpPackedGeometryData_GetInf);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_SetInf>( hLib , "CAPI_PackedGeometryData_SetInf_1ED03D45", this->fpPackedGeometryData_SetInf);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_GetSup>( hLib , "CAPI_PackedGeometryData_GetSup_D67B6715", this->fpPackedGeometryData_GetSup);
		all_successfully_loaded &= LoadFunctionPointer<FP_PackedGeometryData_SetSup>( hLib , "CAPI_PackedGeometryData_SetSup_1ED03D45", this->fpPackedGeometryData_SetSup);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateImageData>( hLib , "CAPI_CreateImageData", this->fpCreateImageData);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_NewCopy>( hLib , "CAPI_ImageData_NewCopy_5CDA593F", this->fpImageData_NewCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_DeepCopy>( hLib , "CAPI_ImageData_DeepCopy_71AB60F7", this->fpImageData_DeepCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_AddColors>( hLib , "CAPI_ImageData_AddColors_22A5D254", this->fpImageData_AddColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_RemoveColors>( hLib , "CAPI_ImageData_RemoveColors_69A03065", this->fpImageData_RemoveColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_GetColors>( hLib , "CAPI_ImageData_GetColors_EA4DAEA5", this->fpImageData_GetColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_GetColorsValueType>( hLib , "CAPI_ImageData_GetColorsValueType_B4C094D2", this->fpImageData_GetColorsValueType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_HasColors>( hLib , "CAPI_ImageData_HasColors_C92E1C4A", this->fpImageData_HasColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_GetColorsFormat>( hLib , "CAPI_ImageData_GetColorsFormat_CCBB74AB", this->fpImageData_GetColorsFormat);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_AddField>( hLib , "CAPI_ImageData_AddField_DB8648A8", this->fpImageData_AddField);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_RemoveField>( hLib , "CAPI_ImageData_RemoveField_DFAFD8F8", this->fpImageData_RemoveField);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_GetField>( hLib , "CAPI_ImageData_GetField_2F85F754", this->fpImageData_GetField);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_GetFieldValueType>( hLib , "CAPI_ImageData_GetFieldValueType_972296E3", this->fpImageData_GetFieldValueType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_HasField>( hLib , "CAPI_ImageData_HasField_5F793399", this->fpImageData_HasField);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_GetType>( hLib , "CAPI_ImageData_GetType_85E4C5D5", this->fpImageData_GetType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_GetXSize>( hLib , "CAPI_ImageData_GetXSize_85E4C5D5", this->fpImageData_GetXSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_GetYSize>( hLib , "CAPI_ImageData_GetYSize_85E4C5D5", this->fpImageData_GetYSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_GetZSize>( hLib , "CAPI_ImageData_GetZSize_85E4C5D5", this->fpImageData_GetZSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_Set1DSize>( hLib , "CAPI_ImageData_Set1DSize_E4EBF20A", this->fpImageData_Set1DSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_Set2DSize>( hLib , "CAPI_ImageData_Set2DSize_DA3B08AB", this->fpImageData_Set2DSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_Set3DSize>( hLib , "CAPI_ImageData_Set3DSize_B1BE7571", this->fpImageData_Set3DSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_SetCubeSize>( hLib , "CAPI_ImageData_SetCubeSize_DA3B08AB", this->fpImageData_SetCubeSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_Reset>( hLib , "CAPI_ImageData_Reset_69A03065", this->fpImageData_Reset);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageData_GetImageFields>( hLib , "CAPI_ImageData_GetImageFields_EF249DF7", this->fpImageData_GetImageFields);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateTable>( hLib , "CAPI_CreateTable", this->fpCreateTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_Table_AddItem>( hLib , "CAPI_Table_AddItem_65258EFE", this->fpTable_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_Table_SetItem>( hLib , "CAPI_Table_SetItem_43B56B13", this->fpTable_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_Table_FindItem>( hLib , "CAPI_Table_FindItem_DB6B30ED", this->fpTable_FindItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_Table_FindItemId>( hLib , "CAPI_Table_FindItemId_9B49F2EF", this->fpTable_FindItemId);
		all_successfully_loaded &= LoadFunctionPointer<FP_Table_GetItem>( hLib , "CAPI_Table_GetItem_FE98ED2F", this->fpTable_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_Table_RemoveItem>( hLib , "CAPI_Table_RemoveItem_8272B53C", this->fpTable_RemoveItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_Table_Clear>( hLib , "CAPI_Table_Clear_69A03065", this->fpTable_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_Table_GetItemsCount>( hLib , "CAPI_Table_GetItemsCount_85E4C5D5", this->fpTable_GetItemsCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Table_Copy>( hLib , "CAPI_Table_Copy_738A6D2B", this->fpTable_Copy);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateMaterial>( hLib , "CAPI_CreateMaterial", this->fpCreateMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetMaterialChannelCount>( hLib , "CAPI_Material_GetMaterialChannelCount_85E4C5D5", this->fpMaterial_GetMaterialChannelCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetMaterialChannelFromIndex>( hLib , "CAPI_Material_GetMaterialChannelFromIndex_6A043423", this->fpMaterial_GetMaterialChannelFromIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_AddMaterialChannel>( hLib , "CAPI_Material_AddMaterialChannel_DFAFD8F8", this->fpMaterial_AddMaterialChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_RemoveMaterialChannel>( hLib , "CAPI_Material_RemoveMaterialChannel_DFAFD8F8", this->fpMaterial_RemoveMaterialChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_HasMaterialChannel>( hLib , "CAPI_Material_HasMaterialChannel_5F793399", this->fpMaterial_HasMaterialChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_SetShadingNetwork>( hLib , "CAPI_Material_SetShadingNetwork_13EF41B3", this->fpMaterial_SetShadingNetwork);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetShadingNetwork>( hLib , "CAPI_Material_GetShadingNetwork_67B70870", this->fpMaterial_GetShadingNetwork);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_LoadShadingNetworkFromXML>( hLib , "CAPI_Material_LoadShadingNetworkFromXML_664A5B89", this->fpMaterial_LoadShadingNetworkFromXML);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_SaveShadingNetworkToXML>( hLib , "CAPI_Material_SaveShadingNetworkToXML_97219443", this->fpMaterial_SaveShadingNetworkToXML);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_SetUseTangentSpaceNormals>( hLib , "CAPI_Material_SetUseTangentSpaceNormals_8E8FF636", this->fpMaterial_SetUseTangentSpaceNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetUseTangentSpaceNormals>( hLib , "CAPI_Material_GetUseTangentSpaceNormals_C92E1C4A", this->fpMaterial_GetUseTangentSpaceNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_IsIdenticalTo>( hLib , "CAPI_Material_IsIdenticalTo_492DF2A4", this->fpMaterial_IsIdenticalTo);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_IsTransparent>( hLib , "CAPI_Material_IsTransparent_C92E1C4A", this->fpMaterial_IsTransparent);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_SetMaterialGUID>( hLib , "CAPI_Material_SetMaterialGUID_DFAFD8F8", this->fpMaterial_SetMaterialGUID);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetMaterialGUID>( hLib , "CAPI_Material_GetMaterialGUID_CCBB74AB", this->fpMaterial_GetMaterialGUID);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_SetMaterialType>( hLib , "CAPI_Material_SetMaterialType_CE900268", this->fpMaterial_SetMaterialType);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetMaterialType>( hLib , "CAPI_Material_GetMaterialType_ACCD4713", this->fpMaterial_GetMaterialType);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_SetOpacityType>( hLib , "CAPI_Material_SetOpacityType_5BD52409", this->fpMaterial_SetOpacityType);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetOpacityType>( hLib , "CAPI_Material_GetOpacityType_D220A560", this->fpMaterial_GetOpacityType);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_SetOpacityChannel>( hLib , "CAPI_Material_SetOpacityChannel_DFAFD8F8", this->fpMaterial_SetOpacityChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetOpacityChannel>( hLib , "CAPI_Material_GetOpacityChannel_CCBB74AB", this->fpMaterial_GetOpacityChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_SetBlendMode>( hLib , "CAPI_Material_SetBlendMode_30384192", this->fpMaterial_SetBlendMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetBlendMode>( hLib , "CAPI_Material_GetBlendMode_5B31765A", this->fpMaterial_GetBlendMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_SetOpacityCutoff>( hLib , "CAPI_Material_SetOpacityCutoff_74B7D40A", this->fpMaterial_SetOpacityCutoff);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetOpacityCutoff>( hLib , "CAPI_Material_GetOpacityCutoff_D67B6715", this->fpMaterial_GetOpacityCutoff);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_ChangeTexturePrefixPath>( hLib , "CAPI_Material_ChangeTexturePrefixPath_664A5B89", this->fpMaterial_ChangeTexturePrefixPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_SetOpacityFromDiffuseAlpha>( hLib , "CAPI_Material_SetOpacityFromDiffuseAlpha_69A03065", this->fpMaterial_SetOpacityFromDiffuseAlpha);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_ConvertHandedness>( hLib , "CAPI_Material_ConvertHandedness_69A03065", this->fpMaterial_ConvertHandedness);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetMaterialChannels>( hLib , "CAPI_Material_GetMaterialChannels_738A6D2B", this->fpMaterial_GetMaterialChannels);
		all_successfully_loaded &= LoadFunctionPointer<FP_Material_GetMaterialChannelsWithTextureInputs>( hLib , "CAPI_Material_GetMaterialChannelsWithTextureInputs_738A6D2B", this->fpMaterial_GetMaterialChannelsWithTextureInputs);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateMaterialTable>( hLib , "CAPI_CreateMaterialTable", this->fpCreateMaterialTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_AddMaterial>( hLib , "CAPI_MaterialTable_AddMaterial_65258EFE", this->fpMaterialTable_AddMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_FindMaterial>( hLib , "CAPI_MaterialTable_FindMaterial_20311AC4", this->fpMaterialTable_FindMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_FindIdenticalMaterial>( hLib , "CAPI_MaterialTable_FindIdenticalMaterial_2C6FC49E", this->fpMaterialTable_FindIdenticalMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_FindMaterialId>( hLib , "CAPI_MaterialTable_FindMaterialId_9B49F2EF", this->fpMaterialTable_FindMaterialId);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_FindIdenticalMaterialId>( hLib , "CAPI_MaterialTable_FindIdenticalMaterialId_65258EFE", this->fpMaterialTable_FindIdenticalMaterialId);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_FindIdenticalMaterialIds>( hLib , "CAPI_MaterialTable_FindIdenticalMaterialIds_0DBAB2C1", this->fpMaterialTable_FindIdenticalMaterialIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_SetMaterial>( hLib , "CAPI_MaterialTable_SetMaterial_43B56B13", this->fpMaterialTable_SetMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_GetMaterial>( hLib , "CAPI_MaterialTable_GetMaterial_43EFA381", this->fpMaterialTable_GetMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_RemoveMaterial>( hLib , "CAPI_MaterialTable_RemoveMaterial_8272B53C", this->fpMaterialTable_RemoveMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_GetMaterialsCount>( hLib , "CAPI_MaterialTable_GetMaterialsCount_85E4C5D5", this->fpMaterialTable_GetMaterialsCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_ChangeTexturePrefixPath>( hLib , "CAPI_MaterialTable_ChangeTexturePrefixPath_664A5B89", this->fpMaterialTable_ChangeTexturePrefixPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_GetMaterialChannels>( hLib , "CAPI_MaterialTable_GetMaterialChannels_738A6D2B", this->fpMaterialTable_GetMaterialChannels);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialTable_GetMaterialChannelsWithTextureInputs>( hLib , "CAPI_MaterialTable_GetMaterialChannelsWithTextureInputs_738A6D2B", this->fpMaterialTable_GetMaterialChannelsWithTextureInputs);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateMatrix4x4>( hLib , "CAPI_CreateMatrix4x4", this->fpCreateMatrix4x4);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_DeepCopy>( hLib , "CAPI_Matrix4x4_DeepCopy_738A6D2B", this->fpMatrix4x4_DeepCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_Zero>( hLib , "CAPI_Matrix4x4_Zero_69A03065", this->fpMatrix4x4_Zero);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_Identity>( hLib , "CAPI_Matrix4x4_Identity_69A03065", this->fpMatrix4x4_Identity);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_GetElement>( hLib , "CAPI_Matrix4x4_GetElement_16711F9D", this->fpMatrix4x4_GetElement);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_SetElement>( hLib , "CAPI_Matrix4x4_SetElement_49DEA8CD", this->fpMatrix4x4_SetElement);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_GetElements>( hLib , "CAPI_Matrix4x4_GetElements_D67B6715", this->fpMatrix4x4_GetElements);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_SetToTranspose>( hLib , "CAPI_Matrix4x4_SetToTranspose_738A6D2B", this->fpMatrix4x4_SetToTranspose);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_Transpose>( hLib , "CAPI_Matrix4x4_Transpose_69A03065", this->fpMatrix4x4_Transpose);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_SetToInvert>( hLib , "CAPI_Matrix4x4_SetToInvert_738A6D2B", this->fpMatrix4x4_SetToInvert);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_Invert>( hLib , "CAPI_Matrix4x4_Invert_69A03065", this->fpMatrix4x4_Invert);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_Determinant3x3>( hLib , "CAPI_Matrix4x4_Determinant3x3_D67B6715", this->fpMatrix4x4_Determinant3x3);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_Point3ArrayMultiply>( hLib , "CAPI_Matrix4x4_Point3ArrayMultiply_738A6D2B", this->fpMatrix4x4_Point3ArrayMultiply);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_Direction3ArrayMultiply>( hLib , "CAPI_Matrix4x4_Direction3ArrayMultiply_738A6D2B", this->fpMatrix4x4_Direction3ArrayMultiply);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_Vector4ArrayMultiply>( hLib , "CAPI_Matrix4x4_Vector4ArrayMultiply_738A6D2B", this->fpMatrix4x4_Vector4ArrayMultiply);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_SetToRotationTransform>( hLib , "CAPI_Matrix4x4_SetToRotationTransform_8C824797", this->fpMatrix4x4_SetToRotationTransform);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_SetToScalingTransform>( hLib , "CAPI_Matrix4x4_SetToScalingTransform_8C179233", this->fpMatrix4x4_SetToScalingTransform);
		all_successfully_loaded &= LoadFunctionPointer<FP_Matrix4x4_SetToTranslationTransform>( hLib , "CAPI_Matrix4x4_SetToTranslationTransform_8C179233", this->fpMatrix4x4_SetToTranslationTransform);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateTransform3>( hLib , "CAPI_CreateTransform3", this->fpCreateTransform3);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_Clear>( hLib , "CAPI_Transform3_Clear_69A03065", this->fpTransform3_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_GetMatrix>( hLib , "CAPI_Transform3_GetMatrix_EEA6182E", this->fpTransform3_GetMatrix);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_GetStack>( hLib , "CAPI_Transform3_GetStack_692A1E94", this->fpTransform3_GetStack);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_PostMultiply>( hLib , "CAPI_Transform3_PostMultiply_69A03065", this->fpTransform3_PostMultiply);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_PreMultiply>( hLib , "CAPI_Transform3_PreMultiply_69A03065", this->fpTransform3_PreMultiply);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_IsPostMultiply>( hLib , "CAPI_Transform3_IsPostMultiply_C92E1C4A", this->fpTransform3_IsPostMultiply);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_IsPreMultiply>( hLib , "CAPI_Transform3_IsPreMultiply_C92E1C4A", this->fpTransform3_IsPreMultiply);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_AddRotation>( hLib , "CAPI_Transform3_AddRotation_8C824797", this->fpTransform3_AddRotation);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_AddScaling>( hLib , "CAPI_Transform3_AddScaling_8C179233", this->fpTransform3_AddScaling);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_AddTranslation>( hLib , "CAPI_Transform3_AddTranslation_8C179233", this->fpTransform3_AddTranslation);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_AddTransformation>( hLib , "CAPI_Transform3_AddTransformation_738A6D2B", this->fpTransform3_AddTransformation);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_Push>( hLib , "CAPI_Transform3_Push_69A03065", this->fpTransform3_Push);
		all_successfully_loaded &= LoadFunctionPointer<FP_Transform3_Pop>( hLib , "CAPI_Transform3_Pop_69A03065", this->fpTransform3_Pop);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImage_NewQuartersizeCopy>( hLib , "CAPI_MappingImage_NewQuartersizeCopy_6CA50B0A", this->fpMappingImage_NewQuartersizeCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImage_GetWidth>( hLib , "CAPI_MappingImage_GetWidth_85E4C5D5", this->fpMappingImage_GetWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImage_GetHeight>( hLib , "CAPI_MappingImage_GetHeight_85E4C5D5", this->fpMappingImage_GetHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImage_GetLayerCount>( hLib , "CAPI_MappingImage_GetLayerCount_85E4C5D5", this->fpMappingImage_GetLayerCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImage_GetMultisamplingWidth>( hLib , "CAPI_MappingImage_GetMultisamplingWidth_85E4C5D5", this->fpMappingImage_GetMultisamplingWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImage_GetMultisamplingHeight>( hLib , "CAPI_MappingImage_GetMultisamplingHeight_85E4C5D5", this->fpMappingImage_GetMultisamplingHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImage_GetImageData>( hLib , "CAPI_MappingImage_GetImageData_3D845F72", this->fpMappingImage_GetImageData);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImage_GetMappingMeshData>( hLib , "CAPI_MappingImage_GetMappingMeshData_3245674A", this->fpMappingImage_GetMappingMeshData);
		all_successfully_loaded &= LoadFunctionPointer<FP_ProcessingObject_RunProcessing>( hLib , "CAPI_ProcessingObject_RunProcessing_5FA38C57", this->fpProcessingObject_RunProcessing);
		all_successfully_loaded &= LoadFunctionPointer<FP_ProcessingObject_Clear>( hLib , "CAPI_ProcessingObject_Clear_69A03065", this->fpProcessingObject_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_ProcessingObject_GetPercentDone>( hLib , "CAPI_ProcessingObject_GetPercentDone_D67B6715", this->fpProcessingObject_GetPercentDone);
		all_successfully_loaded &= LoadFunctionPointer<FP_ProcessingObject_ToJSON>( hLib , "CAPI_ProcessingObject_ToJSON_CCBB74AB", this->fpProcessingObject_ToJSON);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateParameterizer>( hLib , "CAPI_CreateParameterizer", this->fpCreateParameterizer);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_Parameterize>( hLib , "CAPI_Parameterizer_Parameterize_F0E04A10", this->fpParameterizer_Parameterize);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetMaxStretch>( hLib , "CAPI_Parameterizer_SetMaxStretch_74B7D40A", this->fpParameterizer_SetMaxStretch);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetMaxStretch>( hLib , "CAPI_Parameterizer_GetMaxStretch_D67B6715", this->fpParameterizer_GetMaxStretch);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetLargeChartsImportance>( hLib , "CAPI_Parameterizer_SetLargeChartsImportance_74B7D40A", this->fpParameterizer_SetLargeChartsImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetLargeChartsImportance>( hLib , "CAPI_Parameterizer_GetLargeChartsImportance_D67B6715", this->fpParameterizer_GetLargeChartsImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetInputMaterialCount>( hLib , "CAPI_Parameterizer_SetInputMaterialCount_E4EBF20A", this->fpParameterizer_SetInputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetInputMaterialCount>( hLib , "CAPI_Parameterizer_GetInputMaterialCount_85E4C5D5", this->fpParameterizer_GetInputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetOutputMaterialCount>( hLib , "CAPI_Parameterizer_SetOutputMaterialCount_E4EBF20A", this->fpParameterizer_SetOutputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetOutputMaterialCount>( hLib , "CAPI_Parameterizer_GetOutputMaterialCount_85E4C5D5", this->fpParameterizer_GetOutputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetInputOutputMaterialMapping>( hLib , "CAPI_Parameterizer_SetInputOutputMaterialMapping_FCBA3B48", this->fpParameterizer_SetInputOutputMaterialMapping);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetInputOutputMaterialMapping>( hLib , "CAPI_Parameterizer_GetInputOutputMaterialMapping_09DA76B4", this->fpParameterizer_GetInputOutputMaterialMapping);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetTextureWidth>( hLib , "CAPI_Parameterizer_SetTextureWidth_E4EBF20A", this->fpParameterizer_SetTextureWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetTextureWidth>( hLib , "CAPI_Parameterizer_GetTextureWidth_85E4C5D5", this->fpParameterizer_GetTextureWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetTextureWidthForImageIndex>( hLib , "CAPI_Parameterizer_SetTextureWidthForImageIndex_DA3B08AB", this->fpParameterizer_SetTextureWidthForImageIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetTextureWidthForImageIndex>( hLib , "CAPI_Parameterizer_GetTextureWidthForImageIndex_227FE0CD", this->fpParameterizer_GetTextureWidthForImageIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetTextureHeight>( hLib , "CAPI_Parameterizer_SetTextureHeight_E4EBF20A", this->fpParameterizer_SetTextureHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetTextureHeight>( hLib , "CAPI_Parameterizer_GetTextureHeight_85E4C5D5", this->fpParameterizer_GetTextureHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetTextureHeightForImageIndex>( hLib , "CAPI_Parameterizer_SetTextureHeightForImageIndex_DA3B08AB", this->fpParameterizer_SetTextureHeightForImageIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetTextureHeightForImageIndex>( hLib , "CAPI_Parameterizer_GetTextureHeightForImageIndex_227FE0CD", this->fpParameterizer_GetTextureHeightForImageIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetGutterSpace>( hLib , "CAPI_Parameterizer_SetGutterSpace_E4EBF20A", this->fpParameterizer_SetGutterSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetGutterSpace>( hLib , "CAPI_Parameterizer_GetGutterSpace_85E4C5D5", this->fpParameterizer_GetGutterSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetGutterSpaceForImageIndex>( hLib , "CAPI_Parameterizer_SetGutterSpaceForImageIndex_DA3B08AB", this->fpParameterizer_SetGutterSpaceForImageIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetGutterSpaceForImageIndex>( hLib , "CAPI_Parameterizer_GetGutterSpaceForImageIndex_227FE0CD", this->fpParameterizer_GetGutterSpaceForImageIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetFeatureFlagsMask>( hLib , "CAPI_Parameterizer_SetFeatureFlagsMask_E4EBF20A", this->fpParameterizer_SetFeatureFlagsMask);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetFeatureFlagsMask>( hLib , "CAPI_Parameterizer_GetFeatureFlagsMask_85E4C5D5", this->fpParameterizer_GetFeatureFlagsMask);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetUseAutomaticTextureSize>( hLib , "CAPI_Parameterizer_SetUseAutomaticTextureSize_8E8FF636", this->fpParameterizer_SetUseAutomaticTextureSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetUseAutomaticTextureSize>( hLib , "CAPI_Parameterizer_GetUseAutomaticTextureSize_C92E1C4A", this->fpParameterizer_GetUseAutomaticTextureSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetAutomaticTextureSizeMultiplier>( hLib , "CAPI_Parameterizer_SetAutomaticTextureSizeMultiplier_74B7D40A", this->fpParameterizer_SetAutomaticTextureSizeMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetAutomaticTextureSizeMultiplier>( hLib , "CAPI_Parameterizer_GetAutomaticTextureSizeMultiplier_D67B6715", this->fpParameterizer_GetAutomaticTextureSizeMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetForcePower2Texture>( hLib , "CAPI_Parameterizer_SetForcePower2Texture_8E8FF636", this->fpParameterizer_SetForcePower2Texture);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetForcePower2Texture>( hLib , "CAPI_Parameterizer_GetForcePower2Texture_C92E1C4A", this->fpParameterizer_GetForcePower2Texture);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetUseVertexWeights>( hLib , "CAPI_Parameterizer_SetUseVertexWeights_8E8FF636", this->fpParameterizer_SetUseVertexWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetUseVertexWeights>( hLib , "CAPI_Parameterizer_GetUseVertexWeights_C92E1C4A", this->fpParameterizer_GetUseVertexWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_SetUseVisibilityWeights>( hLib , "CAPI_Parameterizer_SetUseVisibilityWeights_8E8FF636", this->fpParameterizer_SetUseVisibilityWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_Parameterizer_GetUseVisibilityWeights>( hLib , "CAPI_Parameterizer_GetUseVisibilityWeights_C92E1C4A", this->fpParameterizer_GetUseVisibilityWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateObjectCollection>( hLib , "CAPI_CreateObjectCollection", this->fpCreateObjectCollection);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_AddObject>( hLib , "CAPI_ObjectCollection_AddObject_ACA7E849", this->fpObjectCollection_AddObject);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_AddObjectSorted>( hLib , "CAPI_ObjectCollection_AddObjectSorted_B16881EC", this->fpObjectCollection_AddObjectSorted);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_GetFirstItem>( hLib , "CAPI_ObjectCollection_GetFirstItem_4FB6181A", this->fpObjectCollection_GetFirstItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_GetNextItem>( hLib , "CAPI_ObjectCollection_GetNextItem_866931D2", this->fpObjectCollection_GetNextItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_GetItemsObject>( hLib , "CAPI_ObjectCollection_GetItemsObject_148EE7E9", this->fpObjectCollection_GetItemsObject);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_RemoveItem>( hLib , "CAPI_ObjectCollection_RemoveItem_866931D2", this->fpObjectCollection_RemoveItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_RemoveObject>( hLib , "CAPI_ObjectCollection_RemoveObject_738A6D2B", this->fpObjectCollection_RemoveObject);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_RemoveAllItems>( hLib , "CAPI_ObjectCollection_RemoveAllItems_69A03065", this->fpObjectCollection_RemoveAllItems);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_GetItemCount>( hLib , "CAPI_ObjectCollection_GetItemCount_85E4C5D5", this->fpObjectCollection_GetItemCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_GetItem>( hLib , "CAPI_ObjectCollection_GetItem_25B9C85A", this->fpObjectCollection_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_GetItemAsObject>( hLib , "CAPI_ObjectCollection_GetItemAsObject_DF1F27AC", this->fpObjectCollection_GetItemAsObject);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_IsObjectInCollection>( hLib , "CAPI_ObjectCollection_IsObjectInCollection_492DF2A4", this->fpObjectCollection_IsObjectInCollection);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_IsItemInCollection>( hLib , "CAPI_ObjectCollection_IsItemInCollection_25081E57", this->fpObjectCollection_IsItemInCollection);
		all_successfully_loaded &= LoadFunctionPointer<FP_ObjectCollection_FindObject>( hLib , "CAPI_ObjectCollection_FindObject_DB6B30ED", this->fpObjectCollection_FindObject);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateGeometryDataCollection>( hLib , "CAPI_CreateGeometryDataCollection", this->fpCreateGeometryDataCollection);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCollection_AddGeometryData>( hLib , "CAPI_GeometryDataCollection_AddGeometryData_ACA7E849", this->fpGeometryDataCollection_AddGeometryData);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCollection_GetGeometryData>( hLib , "CAPI_GeometryDataCollection_GetGeometryData_2A63A6CE", this->fpGeometryDataCollection_GetGeometryData);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCollection_RemoveGeometryData>( hLib , "CAPI_GeometryDataCollection_RemoveGeometryData_738A6D2B", this->fpGeometryDataCollection_RemoveGeometryData);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCollection_FindGeometryData>( hLib , "CAPI_GeometryDataCollection_FindGeometryData_810E35CE", this->fpGeometryDataCollection_FindGeometryData);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCollection_GetNextItemAsGeometryData>( hLib , "CAPI_GeometryDataCollection_GetNextItemAsGeometryData_D95E066F", this->fpGeometryDataCollection_GetNextItemAsGeometryData);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCollection_IsGeometryDataInCollection>( hLib , "CAPI_GeometryDataCollection_IsGeometryDataInCollection_492DF2A4", this->fpGeometryDataCollection_IsGeometryDataInCollection);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsImporter_SetImportFilePath>( hLib , "CAPI_GraphicsImporter_SetImportFilePath_DFAFD8F8", this->fpGraphicsImporter_SetImportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsImporter_GetImportFilePath>( hLib , "CAPI_GraphicsImporter_GetImportFilePath_CCBB74AB", this->fpGraphicsImporter_GetImportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsImporter_RunImport>( hLib , "CAPI_GraphicsImporter_RunImport_C92E1C4A", this->fpGraphicsImporter_RunImport);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsImporter_Clear>( hLib , "CAPI_GraphicsImporter_Clear_69A03065", this->fpGraphicsImporter_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsImporter_GetScene>( hLib , "CAPI_GraphicsImporter_GetScene_262BA3D9", this->fpGraphicsImporter_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateWavefrontImporter>( hLib , "CAPI_CreateWavefrontImporter", this->fpCreateWavefrontImporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_WavefrontImporter_SetMaterialFilePath>( hLib , "CAPI_WavefrontImporter_SetMaterialFilePath_DFAFD8F8", this->fpWavefrontImporter_SetMaterialFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_WavefrontImporter_GetMaterialFilePath>( hLib , "CAPI_WavefrontImporter_GetMaterialFilePath_CCBB74AB", this->fpWavefrontImporter_GetMaterialFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_WavefrontImporter_SetExtractGroups>( hLib , "CAPI_WavefrontImporter_SetExtractGroups_8E8FF636", this->fpWavefrontImporter_SetExtractGroups);
		all_successfully_loaded &= LoadFunctionPointer<FP_WavefrontImporter_GetExtractGroups>( hLib , "CAPI_WavefrontImporter_GetExtractGroups_C92E1C4A", this->fpWavefrontImporter_GetExtractGroups);
		all_successfully_loaded &= LoadFunctionPointer<FP_WavefrontImporter_SetUseAlphaAsOpacity>( hLib , "CAPI_WavefrontImporter_SetUseAlphaAsOpacity_8E8FF636", this->fpWavefrontImporter_SetUseAlphaAsOpacity);
		all_successfully_loaded &= LoadFunctionPointer<FP_WavefrontImporter_GetUseAlphaAsOpacity>( hLib , "CAPI_WavefrontImporter_GetUseAlphaAsOpacity_C92E1C4A", this->fpWavefrontImporter_GetUseAlphaAsOpacity);
		all_successfully_loaded &= LoadFunctionPointer<FP_WavefrontImporter_SetUseFallbackDiffuse>( hLib , "CAPI_WavefrontImporter_SetUseFallbackDiffuse_8E8FF636", this->fpWavefrontImporter_SetUseFallbackDiffuse);
		all_successfully_loaded &= LoadFunctionPointer<FP_WavefrontImporter_GetUseFallbackDiffuse>( hLib , "CAPI_WavefrontImporter_GetUseFallbackDiffuse_C92E1C4A", this->fpWavefrontImporter_GetUseFallbackDiffuse);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateGLTFImporter>( hLib , "CAPI_CreateGLTFImporter", this->fpCreateGLTFImporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateFBXImporter>( hLib , "CAPI_CreateFBXImporter", this->fpCreateFBXImporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsExporter_SetExportFilePath>( hLib , "CAPI_GraphicsExporter_SetExportFilePath_DFAFD8F8", this->fpGraphicsExporter_SetExportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsExporter_GetExportFilePath>( hLib , "CAPI_GraphicsExporter_GetExportFilePath_CCBB74AB", this->fpGraphicsExporter_GetExportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsExporter_SetScene>( hLib , "CAPI_GraphicsExporter_SetScene_738A6D2B", this->fpGraphicsExporter_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsExporter_SetSelectionSet>( hLib , "CAPI_GraphicsExporter_SetSelectionSet_EAB11672", this->fpGraphicsExporter_SetSelectionSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsExporter_RunExport>( hLib , "CAPI_GraphicsExporter_RunExport_C92E1C4A", this->fpGraphicsExporter_RunExport);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsExporter_SetPrimaryTexCoordName>( hLib , "CAPI_GraphicsExporter_SetPrimaryTexCoordName_DFAFD8F8", this->fpGraphicsExporter_SetPrimaryTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsExporter_GetPrimaryTexCoordName>( hLib , "CAPI_GraphicsExporter_GetPrimaryTexCoordName_CCBB74AB", this->fpGraphicsExporter_GetPrimaryTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsExporter_SetExportCascadedScenes>( hLib , "CAPI_GraphicsExporter_SetExportCascadedScenes_8E8FF636", this->fpGraphicsExporter_SetExportCascadedScenes);
		all_successfully_loaded &= LoadFunctionPointer<FP_GraphicsExporter_GetExportCascadedScenes>( hLib , "CAPI_GraphicsExporter_GetExportCascadedScenes_C92E1C4A", this->fpGraphicsExporter_GetExportCascadedScenes);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateWavefrontExporter>( hLib , "CAPI_CreateWavefrontExporter", this->fpCreateWavefrontExporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_WavefrontExporter_SetMaterialFilePath>( hLib , "CAPI_WavefrontExporter_SetMaterialFilePath_DFAFD8F8", this->fpWavefrontExporter_SetMaterialFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_WavefrontExporter_GetMaterialFilePath>( hLib , "CAPI_WavefrontExporter_GetMaterialFilePath_CCBB74AB", this->fpWavefrontExporter_GetMaterialFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateFBXExporter>( hLib , "CAPI_CreateFBXExporter", this->fpCreateFBXExporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_FBXExporter_SetEmbedReferences>( hLib , "CAPI_FBXExporter_SetEmbedReferences_8E8FF636", this->fpFBXExporter_SetEmbedReferences);
		all_successfully_loaded &= LoadFunctionPointer<FP_FBXExporter_GetEmbedReferences>( hLib , "CAPI_FBXExporter_GetEmbedReferences_C92E1C4A", this->fpFBXExporter_GetEmbedReferences);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateGLTFExporter>( hLib , "CAPI_CreateGLTFExporter", this->fpCreateGLTFExporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_GLTFExporter_SetEmbedReferences>( hLib , "CAPI_GLTFExporter_SetEmbedReferences_8E8FF636", this->fpGLTFExporter_SetEmbedReferences);
		all_successfully_loaded &= LoadFunctionPointer<FP_GLTFExporter_GetEmbedReferences>( hLib , "CAPI_GLTFExporter_GetEmbedReferences_C92E1C4A", this->fpGLTFExporter_GetEmbedReferences);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateBinaryImporter>( hLib , "CAPI_CreateBinaryImporter", this->fpCreateBinaryImporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateBinaryExporter>( hLib , "CAPI_CreateBinaryExporter", this->fpCreateBinaryExporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateGeometryValidator>( hLib , "CAPI_CreateGeometryValidator", this->fpCreateGeometryValidator);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryValidator_ValidateGeometry>( hLib , "CAPI_GeometryValidator_ValidateGeometry_492DF2A4", this->fpGeometryValidator_ValidateGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryValidator_GetErrorValue>( hLib , "CAPI_GeometryValidator_GetErrorValue_85E4C5D5", this->fpGeometryValidator_GetErrorValue);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryValidator_GetErrorString>( hLib , "CAPI_GeometryValidator_GetErrorString_CCBB74AB", this->fpGeometryValidator_GetErrorString);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryValidator_SetCheckDegenerateFaceIndices>( hLib , "CAPI_GeometryValidator_SetCheckDegenerateFaceIndices_8E8FF636", this->fpGeometryValidator_SetCheckDegenerateFaceIndices);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryValidator_GetCheckDegenerateFaceIndices>( hLib , "CAPI_GeometryValidator_GetCheckDegenerateFaceIndices_C92E1C4A", this->fpGeometryValidator_GetCheckDegenerateFaceIndices);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryValidator_SetCheckZeroAreaFaces>( hLib , "CAPI_GeometryValidator_SetCheckZeroAreaFaces_8E8FF636", this->fpGeometryValidator_SetCheckZeroAreaFaces);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryValidator_GetCheckZeroAreaFaces>( hLib , "CAPI_GeometryValidator_GetCheckZeroAreaFaces_C92E1C4A", this->fpGeometryValidator_GetCheckZeroAreaFaces);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryValidator_SetAllowedMaterialCount>( hLib , "CAPI_GeometryValidator_SetAllowedMaterialCount_E4EBF20A", this->fpGeometryValidator_SetAllowedMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryValidator_SetAllowedBoneCount>( hLib , "CAPI_GeometryValidator_SetAllowedBoneCount_E4EBF20A", this->fpGeometryValidator_SetAllowedBoneCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryValidator_SetAllowedGroupCount>( hLib , "CAPI_GeometryValidator_SetAllowedGroupCount_E4EBF20A", this->fpGeometryValidator_SetAllowedGroupCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_ValidateSettings>( hLib , "CAPI_SettingsObject_ValidateSettings_C92E1C4A", this->fpSettingsObject_ValidateSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_GetErrorString>( hLib , "CAPI_SettingsObject_GetErrorString_CCBB74AB", this->fpSettingsObject_GetErrorString);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_SetBoolParameter>( hLib , "CAPI_SettingsObject_SetBoolParameter_F9F244D2", this->fpSettingsObject_SetBoolParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_SetIntParameter>( hLib , "CAPI_SettingsObject_SetIntParameter_F35220E7", this->fpSettingsObject_SetIntParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_SetUIntParameter>( hLib , "CAPI_SettingsObject_SetUIntParameter_2BFE9455", this->fpSettingsObject_SetUIntParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_SetDoubleParameter>( hLib , "CAPI_SettingsObject_SetDoubleParameter_F59B7CE2", this->fpSettingsObject_SetDoubleParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_SetStringParameter>( hLib , "CAPI_SettingsObject_SetStringParameter_7E7326BA", this->fpSettingsObject_SetStringParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_GetBoolParameter>( hLib , "CAPI_SettingsObject_GetBoolParameter_5F793399", this->fpSettingsObject_GetBoolParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_GetIntParameter>( hLib , "CAPI_SettingsObject_GetIntParameter_E03E072F", this->fpSettingsObject_GetIntParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_GetUIntParameter>( hLib , "CAPI_SettingsObject_GetUIntParameter_11353F99", this->fpSettingsObject_GetUIntParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_GetDoubleParameter>( hLib , "CAPI_SettingsObject_GetDoubleParameter_52E3AA27", this->fpSettingsObject_GetDoubleParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_GetStringParameter>( hLib , "CAPI_SettingsObject_GetStringParameter_97219443", this->fpSettingsObject_GetStringParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_ToJSON>( hLib , "CAPI_SettingsObject_ToJSON_CCBB74AB", this->fpSettingsObject_ToJSON);
		all_successfully_loaded &= LoadFunctionPointer<FP_SettingsObject_SetValidateParameterNames>( hLib , "CAPI_SettingsObject_SetValidateParameterNames_8E8FF636", this->fpSettingsObject_SetValidateParameterNames);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_GetMaterialCasterSettings>( hLib , "CAPI_MaterialCaster_GetMaterialCasterSettings_34AC809C", this->fpMaterialCaster_GetMaterialCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_SetSourceTextures>( hLib , "CAPI_MaterialCaster_SetSourceTextures_738A6D2B", this->fpMaterialCaster_SetSourceTextures);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_GetSourceTextures>( hLib , "CAPI_MaterialCaster_GetSourceTextures_DE9D5996", this->fpMaterialCaster_GetSourceTextures);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_SetSourceMaterials>( hLib , "CAPI_MaterialCaster_SetSourceMaterials_738A6D2B", this->fpMaterialCaster_SetSourceMaterials);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_GetSourceMaterials>( hLib , "CAPI_MaterialCaster_GetSourceMaterials_5F2D31CF", this->fpMaterialCaster_GetSourceMaterials);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_SetDestMaterialId>( hLib , "CAPI_MaterialCaster_SetDestMaterialId_8272B53C", this->fpMaterialCaster_SetDestMaterialId);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_GetDestMaterialId>( hLib , "CAPI_MaterialCaster_GetDestMaterialId_CDBA2BD0", this->fpMaterialCaster_GetDestMaterialId);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_SetMappingImage>( hLib , "CAPI_MaterialCaster_SetMappingImage_738A6D2B", this->fpMaterialCaster_SetMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_GetMappingImage>( hLib , "CAPI_MaterialCaster_GetMappingImage_6CA50B0A", this->fpMaterialCaster_GetMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_SetOutputFilePath>( hLib , "CAPI_MaterialCaster_SetOutputFilePath_DFAFD8F8", this->fpMaterialCaster_SetOutputFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_GetOutputFilePath>( hLib , "CAPI_MaterialCaster_GetOutputFilePath_CCBB74AB", this->fpMaterialCaster_GetOutputFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_SetOutputImage>( hLib , "CAPI_MaterialCaster_SetOutputImage_738A6D2B", this->fpMaterialCaster_SetOutputImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_GetOutputImage>( hLib , "CAPI_MaterialCaster_GetOutputImage_55DD0790", this->fpMaterialCaster_GetOutputImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCaster_NewCopy>( hLib , "CAPI_MaterialCaster_NewCopy_D063085E", this->fpMaterialCaster_NewCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateMaterialCasterSettings>( hLib , "CAPI_CreateMaterialCasterSettings", this->fpCreateMaterialCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_SetMaterialChannel>( hLib , "CAPI_MaterialCasterSettings_SetMaterialChannel_DFAFD8F8", this->fpMaterialCasterSettings_SetMaterialChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_GetMaterialChannel>( hLib , "CAPI_MaterialCasterSettings_GetMaterialChannel_CCBB74AB", this->fpMaterialCasterSettings_GetMaterialChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_SetOpacityChannel>( hLib , "CAPI_MaterialCasterSettings_SetOpacityChannel_DFAFD8F8", this->fpMaterialCasterSettings_SetOpacityChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_GetOpacityChannel>( hLib , "CAPI_MaterialCasterSettings_GetOpacityChannel_CCBB74AB", this->fpMaterialCasterSettings_GetOpacityChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_SetOpacityChannelComponent>( hLib , "CAPI_MaterialCasterSettings_SetOpacityChannelComponent_3C3709A0", this->fpMaterialCasterSettings_SetOpacityChannelComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_GetOpacityChannelComponent>( hLib , "CAPI_MaterialCasterSettings_GetOpacityChannelComponent_5776DF3D", this->fpMaterialCasterSettings_GetOpacityChannelComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_SetDilation>( hLib , "CAPI_MaterialCasterSettings_SetDilation_E4EBF20A", this->fpMaterialCasterSettings_SetDilation);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_GetDilation>( hLib , "CAPI_MaterialCasterSettings_GetDilation_85E4C5D5", this->fpMaterialCasterSettings_GetDilation);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_SetOutputPixelFormat>( hLib , "CAPI_MaterialCasterSettings_SetOutputPixelFormat_9520B52C", this->fpMaterialCasterSettings_SetOutputPixelFormat);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_GetOutputPixelFormat>( hLib , "CAPI_MaterialCasterSettings_GetOutputPixelFormat_8D097E74", this->fpMaterialCasterSettings_GetOutputPixelFormat);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_SetDitherType>( hLib , "CAPI_MaterialCasterSettings_SetDitherType_330A3B91", this->fpMaterialCasterSettings_SetDitherType);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_GetDitherType>( hLib , "CAPI_MaterialCasterSettings_GetDitherType_32BA9C12", this->fpMaterialCasterSettings_GetDitherType);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_SetFillMode>( hLib , "CAPI_MaterialCasterSettings_SetFillMode_04345601", this->fpMaterialCasterSettings_SetFillMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_GetFillMode>( hLib , "CAPI_MaterialCasterSettings_GetFillMode_2601D19A", this->fpMaterialCasterSettings_GetFillMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_SetUseMultisampling>( hLib , "CAPI_MaterialCasterSettings_SetUseMultisampling_8E8FF636", this->fpMaterialCasterSettings_SetUseMultisampling);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_GetUseMultisampling>( hLib , "CAPI_MaterialCasterSettings_GetUseMultisampling_C92E1C4A", this->fpMaterialCasterSettings_GetUseMultisampling);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_SetOutputImageFileFormat>( hLib , "CAPI_MaterialCasterSettings_SetOutputImageFileFormat_329B2399", this->fpMaterialCasterSettings_SetOutputImageFileFormat);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_GetOutputImageFileFormat>( hLib , "CAPI_MaterialCasterSettings_GetOutputImageFileFormat_4F40CAB0", this->fpMaterialCasterSettings_GetOutputImageFileFormat);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_SetOutputDDSCompressionType>( hLib , "CAPI_MaterialCasterSettings_SetOutputDDSCompressionType_C04FDE99", this->fpMaterialCasterSettings_SetOutputDDSCompressionType);
		all_successfully_loaded &= LoadFunctionPointer<FP_MaterialCasterSettings_GetOutputDDSCompressionType>( hLib , "CAPI_MaterialCasterSettings_GetOutputDDSCompressionType_E7D7BB8E", this->fpMaterialCasterSettings_GetOutputDDSCompressionType);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateColorCaster>( hLib , "CAPI_CreateColorCaster", this->fpCreateColorCaster);
		all_successfully_loaded &= LoadFunctionPointer<FP_ColorCaster_GetLastCastingWasSkipped>( hLib , "CAPI_ColorCaster_GetLastCastingWasSkipped_C92E1C4A", this->fpColorCaster_GetLastCastingWasSkipped);
		all_successfully_loaded &= LoadFunctionPointer<FP_ColorCaster_GetColorCasterSettings>( hLib , "CAPI_ColorCaster_GetColorCasterSettings_768F5C71", this->fpColorCaster_GetColorCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateColorCasterSettings>( hLib , "CAPI_CreateColorCasterSettings", this->fpCreateColorCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ColorCasterSettings_SetBakeOpacityInAlpha>( hLib , "CAPI_ColorCasterSettings_SetBakeOpacityInAlpha_8E8FF636", this->fpColorCasterSettings_SetBakeOpacityInAlpha);
		all_successfully_loaded &= LoadFunctionPointer<FP_ColorCasterSettings_GetBakeOpacityInAlpha>( hLib , "CAPI_ColorCasterSettings_GetBakeOpacityInAlpha_C92E1C4A", this->fpColorCasterSettings_GetBakeOpacityInAlpha);
		all_successfully_loaded &= LoadFunctionPointer<FP_ColorCasterSettings_SetOutputOpacityType>( hLib , "CAPI_ColorCasterSettings_SetOutputOpacityType_5BD52409", this->fpColorCasterSettings_SetOutputOpacityType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ColorCasterSettings_GetOutputOpacityType>( hLib , "CAPI_ColorCasterSettings_GetOutputOpacityType_D220A560", this->fpColorCasterSettings_GetOutputOpacityType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ColorCasterSettings_SetSkipCastingIfNoInputChannel>( hLib , "CAPI_ColorCasterSettings_SetSkipCastingIfNoInputChannel_8E8FF636", this->fpColorCasterSettings_SetSkipCastingIfNoInputChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ColorCasterSettings_GetSkipCastingIfNoInputChannel>( hLib , "CAPI_ColorCasterSettings_GetSkipCastingIfNoInputChannel_C92E1C4A", this->fpColorCasterSettings_GetSkipCastingIfNoInputChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ColorCasterSettings_SetOutputSRGB>( hLib , "CAPI_ColorCasterSettings_SetOutputSRGB_8E8FF636", this->fpColorCasterSettings_SetOutputSRGB);
		all_successfully_loaded &= LoadFunctionPointer<FP_ColorCasterSettings_GetOutputSRGB>( hLib , "CAPI_ColorCasterSettings_GetOutputSRGB_C92E1C4A", this->fpColorCasterSettings_GetOutputSRGB);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateOpacityCaster>( hLib , "CAPI_CreateOpacityCaster", this->fpCreateOpacityCaster);
		all_successfully_loaded &= LoadFunctionPointer<FP_OpacityCaster_GetOpacityCasterSettings>( hLib , "CAPI_OpacityCaster_GetOpacityCasterSettings_5D632E79", this->fpOpacityCaster_GetOpacityCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateOpacityCasterSettings>( hLib , "CAPI_CreateOpacityCasterSettings", this->fpCreateOpacityCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_OpacityCasterSettings_SetOutputSRGB>( hLib , "CAPI_OpacityCasterSettings_SetOutputSRGB_8E8FF636", this->fpOpacityCasterSettings_SetOutputSRGB);
		all_successfully_loaded &= LoadFunctionPointer<FP_OpacityCasterSettings_GetOutputSRGB>( hLib , "CAPI_OpacityCasterSettings_GetOutputSRGB_C92E1C4A", this->fpOpacityCasterSettings_GetOutputSRGB);
		all_successfully_loaded &= LoadFunctionPointer<FP_OpacityCasterSettings_SetOutputOpacityType>( hLib , "CAPI_OpacityCasterSettings_SetOutputOpacityType_5BD52409", this->fpOpacityCasterSettings_SetOutputOpacityType);
		all_successfully_loaded &= LoadFunctionPointer<FP_OpacityCasterSettings_GetOutputOpacityType>( hLib , "CAPI_OpacityCasterSettings_GetOutputOpacityType_D220A560", this->fpOpacityCasterSettings_GetOutputOpacityType);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateNormalCaster>( hLib , "CAPI_CreateNormalCaster", this->fpCreateNormalCaster);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCaster_GetNormalCasterSettings>( hLib , "CAPI_NormalCaster_GetNormalCasterSettings_0D59E798", this->fpNormalCaster_GetNormalCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateNormalCasterSettings>( hLib , "CAPI_CreateNormalCasterSettings", this->fpCreateNormalCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCasterSettings_SetFlipBackfacingNormals>( hLib , "CAPI_NormalCasterSettings_SetFlipBackfacingNormals_8E8FF636", this->fpNormalCasterSettings_SetFlipBackfacingNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCasterSettings_GetFlipBackfacingNormals>( hLib , "CAPI_NormalCasterSettings_GetFlipBackfacingNormals_C92E1C4A", this->fpNormalCasterSettings_GetFlipBackfacingNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCasterSettings_SetGenerateTangentSpaceNormals>( hLib , "CAPI_NormalCasterSettings_SetGenerateTangentSpaceNormals_8E8FF636", this->fpNormalCasterSettings_SetGenerateTangentSpaceNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCasterSettings_GetGenerateTangentSpaceNormals>( hLib , "CAPI_NormalCasterSettings_GetGenerateTangentSpaceNormals_C92E1C4A", this->fpNormalCasterSettings_GetGenerateTangentSpaceNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCasterSettings_SetFlipGreen>( hLib , "CAPI_NormalCasterSettings_SetFlipGreen_8E8FF636", this->fpNormalCasterSettings_SetFlipGreen);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCasterSettings_GetFlipGreen>( hLib , "CAPI_NormalCasterSettings_GetFlipGreen_C92E1C4A", this->fpNormalCasterSettings_GetFlipGreen);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCasterSettings_SetCalculateBitangentPerFragment>( hLib , "CAPI_NormalCasterSettings_SetCalculateBitangentPerFragment_8E8FF636", this->fpNormalCasterSettings_SetCalculateBitangentPerFragment);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCasterSettings_GetCalculateBitangentPerFragment>( hLib , "CAPI_NormalCasterSettings_GetCalculateBitangentPerFragment_C92E1C4A", this->fpNormalCasterSettings_GetCalculateBitangentPerFragment);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCasterSettings_SetNormalizeInterpolatedTangentSpace>( hLib , "CAPI_NormalCasterSettings_SetNormalizeInterpolatedTangentSpace_8E8FF636", this->fpNormalCasterSettings_SetNormalizeInterpolatedTangentSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCasterSettings_GetNormalizeInterpolatedTangentSpace>( hLib , "CAPI_NormalCasterSettings_GetNormalizeInterpolatedTangentSpace_C92E1C4A", this->fpNormalCasterSettings_GetNormalizeInterpolatedTangentSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateNormalRepairer>( hLib , "CAPI_CreateNormalRepairer", this->fpCreateNormalRepairer);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetScene>( hLib , "CAPI_NormalRepairer_SetScene_738A6D2B", this->fpNormalRepairer_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetScene>( hLib , "CAPI_NormalRepairer_GetScene_262BA3D9", this->fpNormalRepairer_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetProcessSelectionSetID>( hLib , "CAPI_NormalRepairer_SetProcessSelectionSetID_8272B53C", this->fpNormalRepairer_SetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetProcessSelectionSetID>( hLib , "CAPI_NormalRepairer_GetProcessSelectionSetID_CDBA2BD0", this->fpNormalRepairer_GetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetProcessSelectionSetName>( hLib , "CAPI_NormalRepairer_SetProcessSelectionSetName_DFAFD8F8", this->fpNormalRepairer_SetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetProcessSelectionSetName>( hLib , "CAPI_NormalRepairer_GetProcessSelectionSetName_CCBB74AB", this->fpNormalRepairer_GetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetRecalculateNormals>( hLib , "CAPI_NormalRepairer_SetRecalculateNormals_8E8FF636", this->fpNormalRepairer_SetRecalculateNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetRecalculateNormals>( hLib , "CAPI_NormalRepairer_GetRecalculateNormals_C92E1C4A", this->fpNormalRepairer_GetRecalculateNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetHardEdgeAngle>( hLib , "CAPI_NormalRepairer_SetHardEdgeAngle_74B7D40A", this->fpNormalRepairer_SetHardEdgeAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetHardEdgeAngle>( hLib , "CAPI_NormalRepairer_GetHardEdgeAngle_D67B6715", this->fpNormalRepairer_GetHardEdgeAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetScaleByArea>( hLib , "CAPI_NormalRepairer_SetScaleByArea_8E8FF636", this->fpNormalRepairer_SetScaleByArea);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetScaleByArea>( hLib , "CAPI_NormalRepairer_GetScaleByArea_C92E1C4A", this->fpNormalRepairer_GetScaleByArea);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetScaleByAngle>( hLib , "CAPI_NormalRepairer_SetScaleByAngle_8E8FF636", this->fpNormalRepairer_SetScaleByAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetScaleByAngle>( hLib , "CAPI_NormalRepairer_GetScaleByAngle_C92E1C4A", this->fpNormalRepairer_GetScaleByAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetRepairOnlyInvalidNormals>( hLib , "CAPI_NormalRepairer_SetRepairOnlyInvalidNormals_8E8FF636", this->fpNormalRepairer_SetRepairOnlyInvalidNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetRepairOnlyInvalidNormals>( hLib , "CAPI_NormalRepairer_GetRepairOnlyInvalidNormals_C92E1C4A", this->fpNormalRepairer_GetRepairOnlyInvalidNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetSnapNormalsToFlatSurfaces>( hLib , "CAPI_NormalRepairer_SetSnapNormalsToFlatSurfaces_8E8FF636", this->fpNormalRepairer_SetSnapNormalsToFlatSurfaces);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetSnapNormalsToFlatSurfaces>( hLib , "CAPI_NormalRepairer_GetSnapNormalsToFlatSurfaces_C92E1C4A", this->fpNormalRepairer_GetSnapNormalsToFlatSurfaces);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetFlipFacesAndNormals>( hLib , "CAPI_NormalRepairer_SetFlipFacesAndNormals_B6883974", this->fpNormalRepairer_SetFlipFacesAndNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetFlipFacesAndNormals>( hLib , "CAPI_NormalRepairer_GetFlipFacesAndNormals_0EBB0FF8", this->fpNormalRepairer_GetFlipFacesAndNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetGeometry>( hLib , "CAPI_NormalRepairer_SetGeometry_738A6D2B", this->fpNormalRepairer_SetGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_GetGeometry>( hLib , "CAPI_NormalRepairer_GetGeometry_1ACA88D6", this->fpNormalRepairer_GetGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetAutoCorrectionAllowsDoubleSided>( hLib , "CAPI_NormalRepairer_SetAutoCorrectionAllowsDoubleSided_8E8FF636", this->fpNormalRepairer_SetAutoCorrectionAllowsDoubleSided);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetAutoCorrectionRatioThreshold>( hLib , "CAPI_NormalRepairer_SetAutoCorrectionRatioThreshold_74B7D40A", this->fpNormalRepairer_SetAutoCorrectionRatioThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalRepairer_SetAutoCorrectionSingleSidedThreshold>( hLib , "CAPI_NormalRepairer_SetAutoCorrectionSingleSidedThreshold_74B7D40A", this->fpNormalRepairer_SetAutoCorrectionSingleSidedThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateDisplacementCaster>( hLib , "CAPI_CreateDisplacementCaster", this->fpCreateDisplacementCaster);
		all_successfully_loaded &= LoadFunctionPointer<FP_DisplacementCaster_GetDisplacementCasterSettings>( hLib , "CAPI_DisplacementCaster_GetDisplacementCasterSettings_23FF8D52", this->fpDisplacementCaster_GetDisplacementCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateDisplacementCasterSettings>( hLib , "CAPI_CreateDisplacementCasterSettings", this->fpCreateDisplacementCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_DisplacementCasterSettings_SetDistanceScaling>( hLib , "CAPI_DisplacementCasterSettings_SetDistanceScaling_74B7D40A", this->fpDisplacementCasterSettings_SetDistanceScaling);
		all_successfully_loaded &= LoadFunctionPointer<FP_DisplacementCasterSettings_GetDistanceScaling>( hLib , "CAPI_DisplacementCasterSettings_GetDistanceScaling_D67B6715", this->fpDisplacementCasterSettings_GetDistanceScaling);
		all_successfully_loaded &= LoadFunctionPointer<FP_DisplacementCasterSettings_SetGenerateScalarDisplacement>( hLib , "CAPI_DisplacementCasterSettings_SetGenerateScalarDisplacement_8E8FF636", this->fpDisplacementCasterSettings_SetGenerateScalarDisplacement);
		all_successfully_loaded &= LoadFunctionPointer<FP_DisplacementCasterSettings_GetGenerateScalarDisplacement>( hLib , "CAPI_DisplacementCasterSettings_GetGenerateScalarDisplacement_C92E1C4A", this->fpDisplacementCasterSettings_GetGenerateScalarDisplacement);
		all_successfully_loaded &= LoadFunctionPointer<FP_DisplacementCasterSettings_SetGenerateTangentSpaceDisplacement>( hLib , "CAPI_DisplacementCasterSettings_SetGenerateTangentSpaceDisplacement_8E8FF636", this->fpDisplacementCasterSettings_SetGenerateTangentSpaceDisplacement);
		all_successfully_loaded &= LoadFunctionPointer<FP_DisplacementCasterSettings_GetGenerateTangentSpaceDisplacement>( hLib , "CAPI_DisplacementCasterSettings_GetGenerateTangentSpaceDisplacement_C92E1C4A", this->fpDisplacementCasterSettings_GetGenerateTangentSpaceDisplacement);
		all_successfully_loaded &= LoadFunctionPointer<FP_DisplacementCasterSettings_SetNormalMapTexCoordLevel>( hLib , "CAPI_DisplacementCasterSettings_SetNormalMapTexCoordLevel_8272B53C", this->fpDisplacementCasterSettings_SetNormalMapTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_DisplacementCasterSettings_GetNormalMapTexCoordLevel>( hLib , "CAPI_DisplacementCasterSettings_GetNormalMapTexCoordLevel_CDBA2BD0", this->fpDisplacementCasterSettings_GetNormalMapTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateTangentCalculator>( hLib , "CAPI_CreateTangentCalculator", this->fpCreateTangentCalculator);
		all_successfully_loaded &= LoadFunctionPointer<FP_TangentCalculator_CalculateTangents>( hLib , "CAPI_TangentCalculator_CalculateTangents_738A6D2B", this->fpTangentCalculator_CalculateTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_TangentCalculator_CalculateTangentsForNodeHierarchy>( hLib , "CAPI_TangentCalculator_CalculateTangentsForNodeHierarchy_738A6D2B", this->fpTangentCalculator_CalculateTangentsForNodeHierarchy);
		all_successfully_loaded &= LoadFunctionPointer<FP_TangentCalculator_SetTexCoordsSetId>( hLib , "CAPI_TangentCalculator_SetTexCoordsSetId_8272B53C", this->fpTangentCalculator_SetTexCoordsSetId);
		all_successfully_loaded &= LoadFunctionPointer<FP_TangentCalculator_GetTexCoordsSetId>( hLib , "CAPI_TangentCalculator_GetTexCoordsSetId_CDBA2BD0", this->fpTangentCalculator_GetTexCoordsSetId);
		all_successfully_loaded &= LoadFunctionPointer<FP_TangentCalculator_SetTangentCalculatorType>( hLib , "CAPI_TangentCalculator_SetTangentCalculatorType_3B4F6FA7", this->fpTangentCalculator_SetTangentCalculatorType);
		all_successfully_loaded &= LoadFunctionPointer<FP_TangentCalculator_GetTangentCalculatorType>( hLib , "CAPI_TangentCalculator_GetTangentCalculatorType_CD2664F0", this->fpTangentCalculator_GetTangentCalculatorType);
		all_successfully_loaded &= LoadFunctionPointer<FP_TangentCalculator_SetInvertV>( hLib , "CAPI_TangentCalculator_SetInvertV_8E8FF636", this->fpTangentCalculator_SetInvertV);
		all_successfully_loaded &= LoadFunctionPointer<FP_TangentCalculator_GetInvertV>( hLib , "CAPI_TangentCalculator_GetInvertV_C92E1C4A", this->fpTangentCalculator_GetInvertV);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_SetTJuncDist>( hLib , "CAPI_RepairSettings_SetTJuncDist_74B7D40A", this->fpRepairSettings_SetTJuncDist);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_GetTJuncDist>( hLib , "CAPI_RepairSettings_GetTJuncDist_D67B6715", this->fpRepairSettings_GetTJuncDist);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_SetUseTJunctionRemover>( hLib , "CAPI_RepairSettings_SetUseTJunctionRemover_8E8FF636", this->fpRepairSettings_SetUseTJunctionRemover);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_GetUseTJunctionRemover>( hLib , "CAPI_RepairSettings_GetUseTJunctionRemover_C92E1C4A", this->fpRepairSettings_GetUseTJunctionRemover);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_SetWeldDist>( hLib , "CAPI_RepairSettings_SetWeldDist_74B7D40A", this->fpRepairSettings_SetWeldDist);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_GetWeldDist>( hLib , "CAPI_RepairSettings_GetWeldDist_D67B6715", this->fpRepairSettings_GetWeldDist);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_SetWeldOnlyBorderVertices>( hLib , "CAPI_RepairSettings_SetWeldOnlyBorderVertices_8E8FF636", this->fpRepairSettings_SetWeldOnlyBorderVertices);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_GetWeldOnlyBorderVertices>( hLib , "CAPI_RepairSettings_GetWeldOnlyBorderVertices_C92E1C4A", this->fpRepairSettings_GetWeldOnlyBorderVertices);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_SetWeldOnlyWithinMaterial>( hLib , "CAPI_RepairSettings_SetWeldOnlyWithinMaterial_8E8FF636", this->fpRepairSettings_SetWeldOnlyWithinMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_GetWeldOnlyWithinMaterial>( hLib , "CAPI_RepairSettings_GetWeldOnlyWithinMaterial_C92E1C4A", this->fpRepairSettings_GetWeldOnlyWithinMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_SetWeldOnlyWithinSceneNode>( hLib , "CAPI_RepairSettings_SetWeldOnlyWithinSceneNode_8E8FF636", this->fpRepairSettings_SetWeldOnlyWithinSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_GetWeldOnlyWithinSceneNode>( hLib , "CAPI_RepairSettings_GetWeldOnlyWithinSceneNode_C92E1C4A", this->fpRepairSettings_GetWeldOnlyWithinSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_SetWeldOnlyBetweenSceneNodes>( hLib , "CAPI_RepairSettings_SetWeldOnlyBetweenSceneNodes_8E8FF636", this->fpRepairSettings_SetWeldOnlyBetweenSceneNodes);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_GetWeldOnlyBetweenSceneNodes>( hLib , "CAPI_RepairSettings_GetWeldOnlyBetweenSceneNodes_C92E1C4A", this->fpRepairSettings_GetWeldOnlyBetweenSceneNodes);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_SetUseWelding>( hLib , "CAPI_RepairSettings_SetUseWelding_8E8FF636", this->fpRepairSettings_SetUseWelding);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_GetUseWelding>( hLib , "CAPI_RepairSettings_GetUseWelding_C92E1C4A", this->fpRepairSettings_GetUseWelding);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_SetProgressivePasses>( hLib , "CAPI_RepairSettings_SetProgressivePasses_E4EBF20A", this->fpRepairSettings_SetProgressivePasses);
		all_successfully_loaded &= LoadFunctionPointer<FP_RepairSettings_GetProgressivePasses>( hLib , "CAPI_RepairSettings_GetProgressivePasses_85E4C5D5", this->fpRepairSettings_GetProgressivePasses);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetBoneReductionTargets>( hLib , "CAPI_BoneSettings_SetBoneReductionTargets_F0C4AC01", this->fpBoneSettings_SetBoneReductionTargets);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetBoneReductionTargetBoneRatioEnabled>( hLib , "CAPI_BoneSettings_SetBoneReductionTargetBoneRatioEnabled_8E8FF636", this->fpBoneSettings_SetBoneReductionTargetBoneRatioEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetBoneReductionTargetBoneRatioEnabled>( hLib , "CAPI_BoneSettings_GetBoneReductionTargetBoneRatioEnabled_C92E1C4A", this->fpBoneSettings_GetBoneReductionTargetBoneRatioEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetBoneReductionTargetBoneCountEnabled>( hLib , "CAPI_BoneSettings_SetBoneReductionTargetBoneCountEnabled_8E8FF636", this->fpBoneSettings_SetBoneReductionTargetBoneCountEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetBoneReductionTargetBoneCountEnabled>( hLib , "CAPI_BoneSettings_GetBoneReductionTargetBoneCountEnabled_C92E1C4A", this->fpBoneSettings_GetBoneReductionTargetBoneCountEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetBoneReductionTargetMaxDeviationEnabled>( hLib , "CAPI_BoneSettings_SetBoneReductionTargetMaxDeviationEnabled_8E8FF636", this->fpBoneSettings_SetBoneReductionTargetMaxDeviationEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetBoneReductionTargetMaxDeviationEnabled>( hLib , "CAPI_BoneSettings_GetBoneReductionTargetMaxDeviationEnabled_C92E1C4A", this->fpBoneSettings_GetBoneReductionTargetMaxDeviationEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetBoneReductionTargetOnScreenSizeEnabled>( hLib , "CAPI_BoneSettings_SetBoneReductionTargetOnScreenSizeEnabled_8E8FF636", this->fpBoneSettings_SetBoneReductionTargetOnScreenSizeEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetBoneReductionTargetOnScreenSizeEnabled>( hLib , "CAPI_BoneSettings_GetBoneReductionTargetOnScreenSizeEnabled_C92E1C4A", this->fpBoneSettings_GetBoneReductionTargetOnScreenSizeEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetBoneReductionTargetStopCondition>( hLib , "CAPI_BoneSettings_SetBoneReductionTargetStopCondition_EA55B617", this->fpBoneSettings_SetBoneReductionTargetStopCondition);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetBoneReductionTargetStopCondition>( hLib , "CAPI_BoneSettings_GetBoneReductionTargetStopCondition_EB52021A", this->fpBoneSettings_GetBoneReductionTargetStopCondition);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetBoneReductionTargetBoneRatio>( hLib , "CAPI_BoneSettings_SetBoneReductionTargetBoneRatio_74B7D40A", this->fpBoneSettings_SetBoneReductionTargetBoneRatio);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetBoneReductionTargetBoneRatio>( hLib , "CAPI_BoneSettings_GetBoneReductionTargetBoneRatio_D67B6715", this->fpBoneSettings_GetBoneReductionTargetBoneRatio);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetBoneReductionTargetBoneCount>( hLib , "CAPI_BoneSettings_SetBoneReductionTargetBoneCount_E4EBF20A", this->fpBoneSettings_SetBoneReductionTargetBoneCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetBoneReductionTargetBoneCount>( hLib , "CAPI_BoneSettings_GetBoneReductionTargetBoneCount_85E4C5D5", this->fpBoneSettings_GetBoneReductionTargetBoneCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetBoneReductionTargetMaxDeviation>( hLib , "CAPI_BoneSettings_SetBoneReductionTargetMaxDeviation_74B7D40A", this->fpBoneSettings_SetBoneReductionTargetMaxDeviation);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetBoneReductionTargetMaxDeviation>( hLib , "CAPI_BoneSettings_GetBoneReductionTargetMaxDeviation_D67B6715", this->fpBoneSettings_GetBoneReductionTargetMaxDeviation);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetBoneReductionTargetOnScreenSize>( hLib , "CAPI_BoneSettings_SetBoneReductionTargetOnScreenSize_E4EBF20A", this->fpBoneSettings_SetBoneReductionTargetOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetBoneReductionTargetOnScreenSize>( hLib , "CAPI_BoneSettings_GetBoneReductionTargetOnScreenSize_85E4C5D5", this->fpBoneSettings_GetBoneReductionTargetOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetMaxBonePerVertex>( hLib , "CAPI_BoneSettings_SetMaxBonePerVertex_E4EBF20A", this->fpBoneSettings_SetMaxBonePerVertex);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetMaxBonePerVertex>( hLib , "CAPI_BoneSettings_GetMaxBonePerVertex_85E4C5D5", this->fpBoneSettings_GetMaxBonePerVertex);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetRemoveUnusedBones>( hLib , "CAPI_BoneSettings_SetRemoveUnusedBones_8E8FF636", this->fpBoneSettings_SetRemoveUnusedBones);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetRemoveUnusedBones>( hLib , "CAPI_BoneSettings_GetRemoveUnusedBones_C92E1C4A", this->fpBoneSettings_GetRemoveUnusedBones);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetLimitBonesPerVertex>( hLib , "CAPI_BoneSettings_SetLimitBonesPerVertex_8E8FF636", this->fpBoneSettings_SetLimitBonesPerVertex);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetLimitBonesPerVertex>( hLib , "CAPI_BoneSettings_GetLimitBonesPerVertex_C92E1C4A", this->fpBoneSettings_GetLimitBonesPerVertex);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetUseBoneReducer>( hLib , "CAPI_BoneSettings_SetUseBoneReducer_8E8FF636", this->fpBoneSettings_SetUseBoneReducer);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetUseBoneReducer>( hLib , "CAPI_BoneSettings_GetUseBoneReducer_C92E1C4A", this->fpBoneSettings_GetUseBoneReducer);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetLockBoneSelectionSetID>( hLib , "CAPI_BoneSettings_SetLockBoneSelectionSetID_8272B53C", this->fpBoneSettings_SetLockBoneSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetLockBoneSelectionSetID>( hLib , "CAPI_BoneSettings_GetLockBoneSelectionSetID_CDBA2BD0", this->fpBoneSettings_GetLockBoneSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetLockBoneSelectionSetName>( hLib , "CAPI_BoneSettings_SetLockBoneSelectionSetName_DFAFD8F8", this->fpBoneSettings_SetLockBoneSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetLockBoneSelectionSetName>( hLib , "CAPI_BoneSettings_GetLockBoneSelectionSetName_CCBB74AB", this->fpBoneSettings_GetLockBoneSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetRemoveBoneSelectionSetID>( hLib , "CAPI_BoneSettings_SetRemoveBoneSelectionSetID_8272B53C", this->fpBoneSettings_SetRemoveBoneSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetRemoveBoneSelectionSetID>( hLib , "CAPI_BoneSettings_GetRemoveBoneSelectionSetID_CDBA2BD0", this->fpBoneSettings_GetRemoveBoneSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_SetRemoveBoneSelectionSetName>( hLib , "CAPI_BoneSettings_SetRemoveBoneSelectionSetName_DFAFD8F8", this->fpBoneSettings_SetRemoveBoneSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_BoneSettings_GetRemoveBoneSelectionSetName>( hLib , "CAPI_BoneSettings_GetRemoveBoneSelectionSetName_CCBB74AB", this->fpBoneSettings_GetRemoveBoneSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateReductionSettings>( hLib , "CAPI_CreateReductionSettings", this->fpCreateReductionSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionTargets>( hLib , "CAPI_ReductionSettings_SetReductionTargets_F0C4AC01", this->fpReductionSettings_SetReductionTargets);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionTargetTriangleRatioEnabled>( hLib , "CAPI_ReductionSettings_SetReductionTargetTriangleRatioEnabled_8E8FF636", this->fpReductionSettings_SetReductionTargetTriangleRatioEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetReductionTargetTriangleRatioEnabled>( hLib , "CAPI_ReductionSettings_GetReductionTargetTriangleRatioEnabled_C92E1C4A", this->fpReductionSettings_GetReductionTargetTriangleRatioEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionTargetTriangleCountEnabled>( hLib , "CAPI_ReductionSettings_SetReductionTargetTriangleCountEnabled_8E8FF636", this->fpReductionSettings_SetReductionTargetTriangleCountEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetReductionTargetTriangleCountEnabled>( hLib , "CAPI_ReductionSettings_GetReductionTargetTriangleCountEnabled_C92E1C4A", this->fpReductionSettings_GetReductionTargetTriangleCountEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionTargetMaxDeviationEnabled>( hLib , "CAPI_ReductionSettings_SetReductionTargetMaxDeviationEnabled_8E8FF636", this->fpReductionSettings_SetReductionTargetMaxDeviationEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetReductionTargetMaxDeviationEnabled>( hLib , "CAPI_ReductionSettings_GetReductionTargetMaxDeviationEnabled_C92E1C4A", this->fpReductionSettings_GetReductionTargetMaxDeviationEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionTargetOnScreenSizeEnabled>( hLib , "CAPI_ReductionSettings_SetReductionTargetOnScreenSizeEnabled_8E8FF636", this->fpReductionSettings_SetReductionTargetOnScreenSizeEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetReductionTargetOnScreenSizeEnabled>( hLib , "CAPI_ReductionSettings_GetReductionTargetOnScreenSizeEnabled_C92E1C4A", this->fpReductionSettings_GetReductionTargetOnScreenSizeEnabled);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionTargetStopCondition>( hLib , "CAPI_ReductionSettings_SetReductionTargetStopCondition_EA55B617", this->fpReductionSettings_SetReductionTargetStopCondition);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetReductionTargetStopCondition>( hLib , "CAPI_ReductionSettings_GetReductionTargetStopCondition_EB52021A", this->fpReductionSettings_GetReductionTargetStopCondition);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionHeuristics>( hLib , "CAPI_ReductionSettings_SetReductionHeuristics_F901B67F", this->fpReductionSettings_SetReductionHeuristics);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetReductionHeuristics>( hLib , "CAPI_ReductionSettings_GetReductionHeuristics_E0303B34", this->fpReductionSettings_GetReductionHeuristics);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionTargetTriangleRatio>( hLib , "CAPI_ReductionSettings_SetReductionTargetTriangleRatio_74B7D40A", this->fpReductionSettings_SetReductionTargetTriangleRatio);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetReductionTargetTriangleRatio>( hLib , "CAPI_ReductionSettings_GetReductionTargetTriangleRatio_D67B6715", this->fpReductionSettings_GetReductionTargetTriangleRatio);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionTargetTriangleCount>( hLib , "CAPI_ReductionSettings_SetReductionTargetTriangleCount_E4EBF20A", this->fpReductionSettings_SetReductionTargetTriangleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetReductionTargetTriangleCount>( hLib , "CAPI_ReductionSettings_GetReductionTargetTriangleCount_85E4C5D5", this->fpReductionSettings_GetReductionTargetTriangleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionTargetMaxDeviation>( hLib , "CAPI_ReductionSettings_SetReductionTargetMaxDeviation_74B7D40A", this->fpReductionSettings_SetReductionTargetMaxDeviation);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetReductionTargetMaxDeviation>( hLib , "CAPI_ReductionSettings_GetReductionTargetMaxDeviation_D67B6715", this->fpReductionSettings_GetReductionTargetMaxDeviation);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetReductionTargetOnScreenSize>( hLib , "CAPI_ReductionSettings_SetReductionTargetOnScreenSize_E4EBF20A", this->fpReductionSettings_SetReductionTargetOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetReductionTargetOnScreenSize>( hLib , "CAPI_ReductionSettings_GetReductionTargetOnScreenSize_85E4C5D5", this->fpReductionSettings_GetReductionTargetOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetGeometryImportance>( hLib , "CAPI_ReductionSettings_SetGeometryImportance_74B7D40A", this->fpReductionSettings_SetGeometryImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetGeometryImportance>( hLib , "CAPI_ReductionSettings_GetGeometryImportance_D67B6715", this->fpReductionSettings_GetGeometryImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetMaterialImportance>( hLib , "CAPI_ReductionSettings_SetMaterialImportance_74B7D40A", this->fpReductionSettings_SetMaterialImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetMaterialImportance>( hLib , "CAPI_ReductionSettings_GetMaterialImportance_D67B6715", this->fpReductionSettings_GetMaterialImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetTextureImportance>( hLib , "CAPI_ReductionSettings_SetTextureImportance_74B7D40A", this->fpReductionSettings_SetTextureImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetTextureImportance>( hLib , "CAPI_ReductionSettings_GetTextureImportance_D67B6715", this->fpReductionSettings_GetTextureImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetShadingImportance>( hLib , "CAPI_ReductionSettings_SetShadingImportance_74B7D40A", this->fpReductionSettings_SetShadingImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetShadingImportance>( hLib , "CAPI_ReductionSettings_GetShadingImportance_D67B6715", this->fpReductionSettings_GetShadingImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetGroupImportance>( hLib , "CAPI_ReductionSettings_SetGroupImportance_74B7D40A", this->fpReductionSettings_SetGroupImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetGroupImportance>( hLib , "CAPI_ReductionSettings_GetGroupImportance_D67B6715", this->fpReductionSettings_GetGroupImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetVertexColorImportance>( hLib , "CAPI_ReductionSettings_SetVertexColorImportance_74B7D40A", this->fpReductionSettings_SetVertexColorImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetVertexColorImportance>( hLib , "CAPI_ReductionSettings_GetVertexColorImportance_D67B6715", this->fpReductionSettings_GetVertexColorImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetEdgeSetImportance>( hLib , "CAPI_ReductionSettings_SetEdgeSetImportance_74B7D40A", this->fpReductionSettings_SetEdgeSetImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetEdgeSetImportance>( hLib , "CAPI_ReductionSettings_GetEdgeSetImportance_D67B6715", this->fpReductionSettings_GetEdgeSetImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetSkinningImportance>( hLib , "CAPI_ReductionSettings_SetSkinningImportance_74B7D40A", this->fpReductionSettings_SetSkinningImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetSkinningImportance>( hLib , "CAPI_ReductionSettings_GetSkinningImportance_D67B6715", this->fpReductionSettings_GetSkinningImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetCurvatureImportance>( hLib , "CAPI_ReductionSettings_SetCurvatureImportance_74B7D40A", this->fpReductionSettings_SetCurvatureImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetCurvatureImportance>( hLib , "CAPI_ReductionSettings_GetCurvatureImportance_D67B6715", this->fpReductionSettings_GetCurvatureImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetCreateGeomorphGeometry>( hLib , "CAPI_ReductionSettings_SetCreateGeomorphGeometry_8E8FF636", this->fpReductionSettings_SetCreateGeomorphGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetCreateGeomorphGeometry>( hLib , "CAPI_ReductionSettings_GetCreateGeomorphGeometry_C92E1C4A", this->fpReductionSettings_GetCreateGeomorphGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetAllowDegenerateTexCoords>( hLib , "CAPI_ReductionSettings_SetAllowDegenerateTexCoords_8E8FF636", this->fpReductionSettings_SetAllowDegenerateTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetAllowDegenerateTexCoords>( hLib , "CAPI_ReductionSettings_GetAllowDegenerateTexCoords_C92E1C4A", this->fpReductionSettings_GetAllowDegenerateTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetKeepSymmetry>( hLib , "CAPI_ReductionSettings_SetKeepSymmetry_8E8FF636", this->fpReductionSettings_SetKeepSymmetry);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetKeepSymmetry>( hLib , "CAPI_ReductionSettings_GetKeepSymmetry_C92E1C4A", this->fpReductionSettings_GetKeepSymmetry);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetUseAutomaticSymmetryDetection>( hLib , "CAPI_ReductionSettings_SetUseAutomaticSymmetryDetection_8E8FF636", this->fpReductionSettings_SetUseAutomaticSymmetryDetection);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetUseAutomaticSymmetryDetection>( hLib , "CAPI_ReductionSettings_GetUseAutomaticSymmetryDetection_C92E1C4A", this->fpReductionSettings_GetUseAutomaticSymmetryDetection);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetUseSymmetryQuadRetriangulator>( hLib , "CAPI_ReductionSettings_SetUseSymmetryQuadRetriangulator_8E8FF636", this->fpReductionSettings_SetUseSymmetryQuadRetriangulator);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetUseSymmetryQuadRetriangulator>( hLib , "CAPI_ReductionSettings_GetUseSymmetryQuadRetriangulator_C92E1C4A", this->fpReductionSettings_GetUseSymmetryQuadRetriangulator);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetSymmetryAxis>( hLib , "CAPI_ReductionSettings_SetSymmetryAxis_D0D3ABC6", this->fpReductionSettings_SetSymmetryAxis);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetSymmetryAxis>( hLib , "CAPI_ReductionSettings_GetSymmetryAxis_F8A0748E", this->fpReductionSettings_GetSymmetryAxis);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetSymmetryOffset>( hLib , "CAPI_ReductionSettings_SetSymmetryOffset_74B7D40A", this->fpReductionSettings_SetSymmetryOffset);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetSymmetryOffset>( hLib , "CAPI_ReductionSettings_GetSymmetryOffset_D67B6715", this->fpReductionSettings_GetSymmetryOffset);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetSymmetryDetectionTolerance>( hLib , "CAPI_ReductionSettings_SetSymmetryDetectionTolerance_74B7D40A", this->fpReductionSettings_SetSymmetryDetectionTolerance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetSymmetryDetectionTolerance>( hLib , "CAPI_ReductionSettings_GetSymmetryDetectionTolerance_D67B6715", this->fpReductionSettings_GetSymmetryDetectionTolerance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetDataCreationPreferences>( hLib , "CAPI_ReductionSettings_SetDataCreationPreferences_249FAC2B", this->fpReductionSettings_SetDataCreationPreferences);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetDataCreationPreferences>( hLib , "CAPI_ReductionSettings_GetDataCreationPreferences_DFC9CBB6", this->fpReductionSettings_GetDataCreationPreferences);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetGenerateGeomorphData>( hLib , "CAPI_ReductionSettings_SetGenerateGeomorphData_8E8FF636", this->fpReductionSettings_SetGenerateGeomorphData);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetGenerateGeomorphData>( hLib , "CAPI_ReductionSettings_GetGenerateGeomorphData_C92E1C4A", this->fpReductionSettings_GetGenerateGeomorphData);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetOutwardMoveMultiplier>( hLib , "CAPI_ReductionSettings_SetOutwardMoveMultiplier_74B7D40A", this->fpReductionSettings_SetOutwardMoveMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetOutwardMoveMultiplier>( hLib , "CAPI_ReductionSettings_GetOutwardMoveMultiplier_D67B6715", this->fpReductionSettings_GetOutwardMoveMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetInwardMoveMultiplier>( hLib , "CAPI_ReductionSettings_SetInwardMoveMultiplier_74B7D40A", this->fpReductionSettings_SetInwardMoveMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetInwardMoveMultiplier>( hLib , "CAPI_ReductionSettings_GetInwardMoveMultiplier_D67B6715", this->fpReductionSettings_GetInwardMoveMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetMaxEdgeLength>( hLib , "CAPI_ReductionSettings_SetMaxEdgeLength_74B7D40A", this->fpReductionSettings_SetMaxEdgeLength);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetMaxEdgeLength>( hLib , "CAPI_ReductionSettings_GetMaxEdgeLength_D67B6715", this->fpReductionSettings_GetMaxEdgeLength);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetUseHighQualityNormalCalculation>( hLib , "CAPI_ReductionSettings_SetUseHighQualityNormalCalculation_8E8FF636", this->fpReductionSettings_SetUseHighQualityNormalCalculation);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetUseHighQualityNormalCalculation>( hLib , "CAPI_ReductionSettings_GetUseHighQualityNormalCalculation_C92E1C4A", this->fpReductionSettings_GetUseHighQualityNormalCalculation);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetProcessSelectionSetID>( hLib , "CAPI_ReductionSettings_SetProcessSelectionSetID_8272B53C", this->fpReductionSettings_SetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetProcessSelectionSetID>( hLib , "CAPI_ReductionSettings_GetProcessSelectionSetID_CDBA2BD0", this->fpReductionSettings_GetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetProcessSelectionSetName>( hLib , "CAPI_ReductionSettings_SetProcessSelectionSetName_DFAFD8F8", this->fpReductionSettings_SetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetProcessSelectionSetName>( hLib , "CAPI_ReductionSettings_GetProcessSelectionSetName_CCBB74AB", this->fpReductionSettings_GetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetMergeGeometries>( hLib , "CAPI_ReductionSettings_SetMergeGeometries_8E8FF636", this->fpReductionSettings_SetMergeGeometries);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetMergeGeometries>( hLib , "CAPI_ReductionSettings_GetMergeGeometries_C92E1C4A", this->fpReductionSettings_GetMergeGeometries);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetKeepUnprocessedSceneMeshes>( hLib , "CAPI_ReductionSettings_SetKeepUnprocessedSceneMeshes_8E8FF636", this->fpReductionSettings_SetKeepUnprocessedSceneMeshes);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetKeepUnprocessedSceneMeshes>( hLib , "CAPI_ReductionSettings_GetKeepUnprocessedSceneMeshes_C92E1C4A", this->fpReductionSettings_GetKeepUnprocessedSceneMeshes);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_SetLockGeometricBorder>( hLib , "CAPI_ReductionSettings_SetLockGeometricBorder_8E8FF636", this->fpReductionSettings_SetLockGeometricBorder);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionSettings_GetLockGeometricBorder>( hLib , "CAPI_ReductionSettings_GetLockGeometricBorder_C92E1C4A", this->fpReductionSettings_GetLockGeometricBorder);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_SetReplaceNormals>( hLib , "CAPI_NormalCalculationSettings_SetReplaceNormals_8E8FF636", this->fpNormalCalculationSettings_SetReplaceNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_GetReplaceNormals>( hLib , "CAPI_NormalCalculationSettings_GetReplaceNormals_C92E1C4A", this->fpNormalCalculationSettings_GetReplaceNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_SetReplaceTangents>( hLib , "CAPI_NormalCalculationSettings_SetReplaceTangents_8E8FF636", this->fpNormalCalculationSettings_SetReplaceTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_GetReplaceTangents>( hLib , "CAPI_NormalCalculationSettings_GetReplaceTangents_C92E1C4A", this->fpNormalCalculationSettings_GetReplaceTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_SetHardEdgeAngle>( hLib , "CAPI_NormalCalculationSettings_SetHardEdgeAngle_74B7D40A", this->fpNormalCalculationSettings_SetHardEdgeAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_GetHardEdgeAngle>( hLib , "CAPI_NormalCalculationSettings_GetHardEdgeAngle_D67B6715", this->fpNormalCalculationSettings_GetHardEdgeAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_SetRepairInvalidNormals>( hLib , "CAPI_NormalCalculationSettings_SetRepairInvalidNormals_8E8FF636", this->fpNormalCalculationSettings_SetRepairInvalidNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_GetRepairInvalidNormals>( hLib , "CAPI_NormalCalculationSettings_GetRepairInvalidNormals_C92E1C4A", this->fpNormalCalculationSettings_GetRepairInvalidNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_SetReorthogonalizeTangentSpace>( hLib , "CAPI_NormalCalculationSettings_SetReorthogonalizeTangentSpace_8E8FF636", this->fpNormalCalculationSettings_SetReorthogonalizeTangentSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_GetReorthogonalizeTangentSpace>( hLib , "CAPI_NormalCalculationSettings_GetReorthogonalizeTangentSpace_C92E1C4A", this->fpNormalCalculationSettings_GetReorthogonalizeTangentSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_SetScaleByArea>( hLib , "CAPI_NormalCalculationSettings_SetScaleByArea_8E8FF636", this->fpNormalCalculationSettings_SetScaleByArea);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_GetScaleByArea>( hLib , "CAPI_NormalCalculationSettings_GetScaleByArea_C92E1C4A", this->fpNormalCalculationSettings_GetScaleByArea);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_SetScaleByAngle>( hLib , "CAPI_NormalCalculationSettings_SetScaleByAngle_8E8FF636", this->fpNormalCalculationSettings_SetScaleByAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_GetScaleByAngle>( hLib , "CAPI_NormalCalculationSettings_GetScaleByAngle_C92E1C4A", this->fpNormalCalculationSettings_GetScaleByAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_SetSnapNormalsToFlatSurfaces>( hLib , "CAPI_NormalCalculationSettings_SetSnapNormalsToFlatSurfaces_8E8FF636", this->fpNormalCalculationSettings_SetSnapNormalsToFlatSurfaces);
		all_successfully_loaded &= LoadFunctionPointer<FP_NormalCalculationSettings_GetSnapNormalsToFlatSurfaces>( hLib , "CAPI_NormalCalculationSettings_GetSnapNormalsToFlatSurfaces_C92E1C4A", this->fpNormalCalculationSettings_GetSnapNormalsToFlatSurfaces);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetInputMaterialCount>( hLib , "CAPI_MappingImageSettings_SetInputMaterialCount_E4EBF20A", this->fpMappingImageSettings_SetInputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetInputMaterialCount>( hLib , "CAPI_MappingImageSettings_GetInputMaterialCount_85E4C5D5", this->fpMappingImageSettings_GetInputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetInputMaterialSettings>( hLib , "CAPI_MappingImageSettings_GetInputMaterialSettings_803B203B", this->fpMappingImageSettings_GetInputMaterialSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetOutputMaterialCount>( hLib , "CAPI_MappingImageSettings_SetOutputMaterialCount_E4EBF20A", this->fpMappingImageSettings_SetOutputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetOutputMaterialCount>( hLib , "CAPI_MappingImageSettings_GetOutputMaterialCount_85E4C5D5", this->fpMappingImageSettings_GetOutputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetOutputMaterialSettings>( hLib , "CAPI_MappingImageSettings_GetOutputMaterialSettings_4C7E5849", this->fpMappingImageSettings_GetOutputMaterialSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetReplaceMappingImages>( hLib , "CAPI_MappingImageSettings_SetReplaceMappingImages_8E8FF636", this->fpMappingImageSettings_SetReplaceMappingImages);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetReplaceMappingImages>( hLib , "CAPI_MappingImageSettings_GetReplaceMappingImages_C92E1C4A", this->fpMappingImageSettings_GetReplaceMappingImages);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetMaximumLayers>( hLib , "CAPI_MappingImageSettings_SetMaximumLayers_E4EBF20A", this->fpMappingImageSettings_SetMaximumLayers);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetMaximumLayers>( hLib , "CAPI_MappingImageSettings_GetMaximumLayers_85E4C5D5", this->fpMappingImageSettings_GetMaximumLayers);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetAllowTransparencyMapping>( hLib , "CAPI_MappingImageSettings_SetAllowTransparencyMapping_8E8FF636", this->fpMappingImageSettings_SetAllowTransparencyMapping);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetAllowTransparencyMapping>( hLib , "CAPI_MappingImageSettings_GetAllowTransparencyMapping_C92E1C4A", this->fpMappingImageSettings_GetAllowTransparencyMapping);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetGenerateMappingImage>( hLib , "CAPI_MappingImageSettings_SetGenerateMappingImage_8E8FF636", this->fpMappingImageSettings_SetGenerateMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetGenerateMappingImage>( hLib , "CAPI_MappingImageSettings_GetGenerateMappingImage_C92E1C4A", this->fpMappingImageSettings_GetGenerateMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetGenerateTexCoords>( hLib , "CAPI_MappingImageSettings_SetGenerateTexCoords_8E8FF636", this->fpMappingImageSettings_SetGenerateTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetGenerateTexCoords>( hLib , "CAPI_MappingImageSettings_GetGenerateTexCoords_C92E1C4A", this->fpMappingImageSettings_GetGenerateTexCoords);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetGenerateTangents>( hLib , "CAPI_MappingImageSettings_SetGenerateTangents_8E8FF636", this->fpMappingImageSettings_SetGenerateTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetGenerateTangents>( hLib , "CAPI_MappingImageSettings_GetGenerateTangents_C92E1C4A", this->fpMappingImageSettings_GetGenerateTangents);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetTexCoordLevel>( hLib , "CAPI_MappingImageSettings_SetTexCoordLevel_8272B53C", this->fpMappingImageSettings_SetTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetTexCoordLevel>( hLib , "CAPI_MappingImageSettings_GetTexCoordLevel_CDBA2BD0", this->fpMappingImageSettings_GetTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetTexCoordName>( hLib , "CAPI_MappingImageSettings_SetTexCoordName_DFAFD8F8", this->fpMappingImageSettings_SetTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetTexCoordName>( hLib , "CAPI_MappingImageSettings_GetTexCoordName_CCBB74AB", this->fpMappingImageSettings_GetTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetUseFullRetexturing>( hLib , "CAPI_MappingImageSettings_SetUseFullRetexturing_8E8FF636", this->fpMappingImageSettings_SetUseFullRetexturing);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetUseFullRetexturing>( hLib , "CAPI_MappingImageSettings_GetUseFullRetexturing_C92E1C4A", this->fpMappingImageSettings_GetUseFullRetexturing);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetApplyNewMaterialIds>( hLib , "CAPI_MappingImageSettings_SetApplyNewMaterialIds_8E8FF636", this->fpMappingImageSettings_SetApplyNewMaterialIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetApplyNewMaterialIds>( hLib , "CAPI_MappingImageSettings_GetApplyNewMaterialIds_C92E1C4A", this->fpMappingImageSettings_GetApplyNewMaterialIds);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetUseAutomaticTextureSize>( hLib , "CAPI_MappingImageSettings_SetUseAutomaticTextureSize_8E8FF636", this->fpMappingImageSettings_SetUseAutomaticTextureSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetUseAutomaticTextureSize>( hLib , "CAPI_MappingImageSettings_GetUseAutomaticTextureSize_C92E1C4A", this->fpMappingImageSettings_GetUseAutomaticTextureSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetAutomaticTextureSizeMultiplier>( hLib , "CAPI_MappingImageSettings_SetAutomaticTextureSizeMultiplier_74B7D40A", this->fpMappingImageSettings_SetAutomaticTextureSizeMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetAutomaticTextureSizeMultiplier>( hLib , "CAPI_MappingImageSettings_GetAutomaticTextureSizeMultiplier_D67B6715", this->fpMappingImageSettings_GetAutomaticTextureSizeMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetForcePower2Texture>( hLib , "CAPI_MappingImageSettings_SetForcePower2Texture_8E8FF636", this->fpMappingImageSettings_SetForcePower2Texture);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetForcePower2Texture>( hLib , "CAPI_MappingImageSettings_GetForcePower2Texture_C92E1C4A", this->fpMappingImageSettings_GetForcePower2Texture);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetTexCoordGeneratorType>( hLib , "CAPI_MappingImageSettings_SetTexCoordGeneratorType_918E48EE", this->fpMappingImageSettings_SetTexCoordGeneratorType);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetTexCoordGeneratorType>( hLib , "CAPI_MappingImageSettings_GetTexCoordGeneratorType_EDC3C690", this->fpMappingImageSettings_GetTexCoordGeneratorType);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_SetOnlyParameterizeInvalidUVs>( hLib , "CAPI_MappingImageSettings_SetOnlyParameterizeInvalidUVs_8E8FF636", this->fpMappingImageSettings_SetOnlyParameterizeInvalidUVs);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetOnlyParameterizeInvalidUVs>( hLib , "CAPI_MappingImageSettings_GetOnlyParameterizeInvalidUVs_C92E1C4A", this->fpMappingImageSettings_GetOnlyParameterizeInvalidUVs);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetChartAggregatorSettings>( hLib , "CAPI_MappingImageSettings_GetChartAggregatorSettings_ED998817", this->fpMappingImageSettings_GetChartAggregatorSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageSettings_GetParameterizerSettings>( hLib , "CAPI_MappingImageSettings_GetParameterizerSettings_E9181672", this->fpMappingImageSettings_GetParameterizerSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageInputMaterialSettings_SetMaterialMapping>( hLib , "CAPI_MappingImageInputMaterialSettings_SetMaterialMapping_EAB11672", this->fpMappingImageInputMaterialSettings_SetMaterialMapping);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageInputMaterialSettings_GetMaterialMapping>( hLib , "CAPI_MappingImageInputMaterialSettings_GetMaterialMapping_A8209622", this->fpMappingImageInputMaterialSettings_GetMaterialMapping);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageOutputMaterialSettings_SetTextureWidth>( hLib , "CAPI_MappingImageOutputMaterialSettings_SetTextureWidth_E4EBF20A", this->fpMappingImageOutputMaterialSettings_SetTextureWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageOutputMaterialSettings_GetTextureWidth>( hLib , "CAPI_MappingImageOutputMaterialSettings_GetTextureWidth_85E4C5D5", this->fpMappingImageOutputMaterialSettings_GetTextureWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageOutputMaterialSettings_SetTextureHeight>( hLib , "CAPI_MappingImageOutputMaterialSettings_SetTextureHeight_E4EBF20A", this->fpMappingImageOutputMaterialSettings_SetTextureHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageOutputMaterialSettings_GetTextureHeight>( hLib , "CAPI_MappingImageOutputMaterialSettings_GetTextureHeight_85E4C5D5", this->fpMappingImageOutputMaterialSettings_GetTextureHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageOutputMaterialSettings_SetMultisamplingLevel>( hLib , "CAPI_MappingImageOutputMaterialSettings_SetMultisamplingLevel_E4EBF20A", this->fpMappingImageOutputMaterialSettings_SetMultisamplingLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageOutputMaterialSettings_GetMultisamplingLevel>( hLib , "CAPI_MappingImageOutputMaterialSettings_GetMultisamplingLevel_85E4C5D5", this->fpMappingImageOutputMaterialSettings_GetMultisamplingLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageOutputMaterialSettings_SetGutterSpace>( hLib , "CAPI_MappingImageOutputMaterialSettings_SetGutterSpace_E4EBF20A", this->fpMappingImageOutputMaterialSettings_SetGutterSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageOutputMaterialSettings_GetGutterSpace>( hLib , "CAPI_MappingImageOutputMaterialSettings_GetGutterSpace_85E4C5D5", this->fpMappingImageOutputMaterialSettings_GetGutterSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetUseVisibilityWeightsInReducer>( hLib , "CAPI_VisibilitySettings_SetUseVisibilityWeightsInReducer_8E8FF636", this->fpVisibilitySettings_SetUseVisibilityWeightsInReducer);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetUseVisibilityWeightsInReducer>( hLib , "CAPI_VisibilitySettings_GetUseVisibilityWeightsInReducer_C92E1C4A", this->fpVisibilitySettings_GetUseVisibilityWeightsInReducer);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetUseVisibilityWeightsInTexcoordGenerator>( hLib , "CAPI_VisibilitySettings_SetUseVisibilityWeightsInTexcoordGenerator_8E8FF636", this->fpVisibilitySettings_SetUseVisibilityWeightsInTexcoordGenerator);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetUseVisibilityWeightsInTexcoordGenerator>( hLib , "CAPI_VisibilitySettings_GetUseVisibilityWeightsInTexcoordGenerator_C92E1C4A", this->fpVisibilitySettings_GetUseVisibilityWeightsInTexcoordGenerator);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetVisibilityWeightsPower>( hLib , "CAPI_VisibilitySettings_SetVisibilityWeightsPower_74B7D40A", this->fpVisibilitySettings_SetVisibilityWeightsPower);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetVisibilityWeightsPower>( hLib , "CAPI_VisibilitySettings_GetVisibilityWeightsPower_D67B6715", this->fpVisibilitySettings_GetVisibilityWeightsPower);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetCullOccludedGeometry>( hLib , "CAPI_VisibilitySettings_SetCullOccludedGeometry_8E8FF636", this->fpVisibilitySettings_SetCullOccludedGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetCullOccludedGeometry>( hLib , "CAPI_VisibilitySettings_GetCullOccludedGeometry_C92E1C4A", this->fpVisibilitySettings_GetCullOccludedGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetForceVisibilityCalculation>( hLib , "CAPI_VisibilitySettings_SetForceVisibilityCalculation_8E8FF636", this->fpVisibilitySettings_SetForceVisibilityCalculation);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetForceVisibilityCalculation>( hLib , "CAPI_VisibilitySettings_GetForceVisibilityCalculation_C92E1C4A", this->fpVisibilitySettings_GetForceVisibilityCalculation);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetUseBackfaceCulling>( hLib , "CAPI_VisibilitySettings_SetUseBackfaceCulling_8E8FF636", this->fpVisibilitySettings_SetUseBackfaceCulling);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetUseBackfaceCulling>( hLib , "CAPI_VisibilitySettings_GetUseBackfaceCulling_C92E1C4A", this->fpVisibilitySettings_GetUseBackfaceCulling);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetCameraSelectionSetID>( hLib , "CAPI_VisibilitySettings_SetCameraSelectionSetID_8272B53C", this->fpVisibilitySettings_SetCameraSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetCameraSelectionSetID>( hLib , "CAPI_VisibilitySettings_GetCameraSelectionSetID_CDBA2BD0", this->fpVisibilitySettings_GetCameraSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetCameraSelectionSetName>( hLib , "CAPI_VisibilitySettings_SetCameraSelectionSetName_DFAFD8F8", this->fpVisibilitySettings_SetCameraSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetCameraSelectionSetName>( hLib , "CAPI_VisibilitySettings_GetCameraSelectionSetName_CCBB74AB", this->fpVisibilitySettings_GetCameraSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetOccluderSelectionSetID>( hLib , "CAPI_VisibilitySettings_SetOccluderSelectionSetID_8272B53C", this->fpVisibilitySettings_SetOccluderSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetOccluderSelectionSetID>( hLib , "CAPI_VisibilitySettings_GetOccluderSelectionSetID_CDBA2BD0", this->fpVisibilitySettings_GetOccluderSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetOccluderSelectionSetName>( hLib , "CAPI_VisibilitySettings_SetOccluderSelectionSetName_DFAFD8F8", this->fpVisibilitySettings_SetOccluderSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetOccluderSelectionSetName>( hLib , "CAPI_VisibilitySettings_GetOccluderSelectionSetName_CCBB74AB", this->fpVisibilitySettings_GetOccluderSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetFillNonVisibleAreaThreshold>( hLib , "CAPI_VisibilitySettings_SetFillNonVisibleAreaThreshold_74B7D40A", this->fpVisibilitySettings_SetFillNonVisibleAreaThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetFillNonVisibleAreaThreshold>( hLib , "CAPI_VisibilitySettings_GetFillNonVisibleAreaThreshold_D67B6715", this->fpVisibilitySettings_GetFillNonVisibleAreaThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetRemoveTrianglesNotOccludingOtherTriangles>( hLib , "CAPI_VisibilitySettings_SetRemoveTrianglesNotOccludingOtherTriangles_8E8FF636", this->fpVisibilitySettings_SetRemoveTrianglesNotOccludingOtherTriangles);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetRemoveTrianglesNotOccludingOtherTriangles>( hLib , "CAPI_VisibilitySettings_GetRemoveTrianglesNotOccludingOtherTriangles_C92E1C4A", this->fpVisibilitySettings_GetRemoveTrianglesNotOccludingOtherTriangles);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetConservativeMode>( hLib , "CAPI_VisibilitySettings_SetConservativeMode_8E8FF636", this->fpVisibilitySettings_SetConservativeMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetConservativeMode>( hLib , "CAPI_VisibilitySettings_GetConservativeMode_C92E1C4A", this->fpVisibilitySettings_GetConservativeMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_SetComputeVisibilityMode>( hLib , "CAPI_VisibilitySettings_SetComputeVisibilityMode_579ACF39", this->fpVisibilitySettings_SetComputeVisibilityMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_VisibilitySettings_GetComputeVisibilityMode>( hLib , "CAPI_VisibilitySettings_GetComputeVisibilityMode_F44E5CC0", this->fpVisibilitySettings_GetComputeVisibilityMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateReductionProcessor>( hLib , "CAPI_CreateReductionProcessor", this->fpCreateReductionProcessor);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_SetScene>( hLib , "CAPI_ReductionProcessor_SetScene_738A6D2B", this->fpReductionProcessor_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetScene>( hLib , "CAPI_ReductionProcessor_GetScene_262BA3D9", this->fpReductionProcessor_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetMappingImage>( hLib , "CAPI_ReductionProcessor_GetMappingImage_6CA50B0A", this->fpReductionProcessor_GetMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetMappingImageForImageIndex>( hLib , "CAPI_ReductionProcessor_GetMappingImageForImageIndex_5E68A9B2", this->fpReductionProcessor_GetMappingImageForImageIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetRepairSettings>( hLib , "CAPI_ReductionProcessor_GetRepairSettings_1C0B443E", this->fpReductionProcessor_GetRepairSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetReductionSettings>( hLib , "CAPI_ReductionProcessor_GetReductionSettings_78CFC920", this->fpReductionProcessor_GetReductionSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetBoneSettings>( hLib , "CAPI_ReductionProcessor_GetBoneSettings_AFD10D0A", this->fpReductionProcessor_GetBoneSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetNormalCalculationSettings>( hLib , "CAPI_ReductionProcessor_GetNormalCalculationSettings_B7B7B929", this->fpReductionProcessor_GetNormalCalculationSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetMappingImageSettings>( hLib , "CAPI_ReductionProcessor_GetMappingImageSettings_7D4F09F4", this->fpReductionProcessor_GetMappingImageSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetVisibilitySettings>( hLib , "CAPI_ReductionProcessor_GetVisibilitySettings_A66EAE96", this->fpReductionProcessor_GetVisibilitySettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetVertexWeightSettings>( hLib , "CAPI_ReductionProcessor_GetVertexWeightSettings_C9DC5849", this->fpReductionProcessor_GetVertexWeightSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionProcessor_GetResultDeviation>( hLib , "CAPI_ReductionProcessor_GetResultDeviation_D67B6715", this->fpReductionProcessor_GetResultDeviation);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetOnScreenSize>( hLib , "CAPI_RemeshingLegacySettings_SetOnScreenSize_E4EBF20A", this->fpRemeshingLegacySettings_SetOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetOnScreenSize>( hLib , "CAPI_RemeshingLegacySettings_GetOnScreenSize_85E4C5D5", this->fpRemeshingLegacySettings_GetOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetMergeDistance>( hLib , "CAPI_RemeshingLegacySettings_SetMergeDistance_E4EBF20A", this->fpRemeshingLegacySettings_SetMergeDistance);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetMergeDistance>( hLib , "CAPI_RemeshingLegacySettings_GetMergeDistance_85E4C5D5", this->fpRemeshingLegacySettings_GetMergeDistance);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetMergeBoldness>( hLib , "CAPI_RemeshingLegacySettings_SetMergeBoldness_74B7D40A", this->fpRemeshingLegacySettings_SetMergeBoldness);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetMergeBoldness>( hLib , "CAPI_RemeshingLegacySettings_GetMergeBoldness_D67B6715", this->fpRemeshingLegacySettings_GetMergeBoldness);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetMaxTriangleSize>( hLib , "CAPI_RemeshingLegacySettings_SetMaxTriangleSize_E4EBF20A", this->fpRemeshingLegacySettings_SetMaxTriangleSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetMaxTriangleSize>( hLib , "CAPI_RemeshingLegacySettings_GetMaxTriangleSize_85E4C5D5", this->fpRemeshingLegacySettings_GetMaxTriangleSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetSurfaceTransferMode>( hLib , "CAPI_RemeshingLegacySettings_SetSurfaceTransferMode_78EEF1F9", this->fpRemeshingLegacySettings_SetSurfaceTransferMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetSurfaceTransferMode>( hLib , "CAPI_RemeshingLegacySettings_GetSurfaceTransferMode_40E2E362", this->fpRemeshingLegacySettings_GetSurfaceTransferMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetUseCuttingPlanes>( hLib , "CAPI_RemeshingLegacySettings_SetUseCuttingPlanes_8E8FF636", this->fpRemeshingLegacySettings_SetUseCuttingPlanes);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetUseCuttingPlanes>( hLib , "CAPI_RemeshingLegacySettings_GetUseCuttingPlanes_C92E1C4A", this->fpRemeshingLegacySettings_GetUseCuttingPlanes);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetHardEdgeAngle>( hLib , "CAPI_RemeshingLegacySettings_SetHardEdgeAngle_74B7D40A", this->fpRemeshingLegacySettings_SetHardEdgeAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetHardEdgeAngle>( hLib , "CAPI_RemeshingLegacySettings_GetHardEdgeAngle_D67B6715", this->fpRemeshingLegacySettings_GetHardEdgeAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetTransferNormals>( hLib , "CAPI_RemeshingLegacySettings_SetTransferNormals_8E8FF636", this->fpRemeshingLegacySettings_SetTransferNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetTransferNormals>( hLib , "CAPI_RemeshingLegacySettings_GetTransferNormals_C92E1C4A", this->fpRemeshingLegacySettings_GetTransferNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetTransferColors>( hLib , "CAPI_RemeshingLegacySettings_SetTransferColors_8E8FF636", this->fpRemeshingLegacySettings_SetTransferColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetTransferColors>( hLib , "CAPI_RemeshingLegacySettings_GetTransferColors_C92E1C4A", this->fpRemeshingLegacySettings_GetTransferColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetUseClippingGeometry>( hLib , "CAPI_RemeshingLegacySettings_SetUseClippingGeometry_8E8FF636", this->fpRemeshingLegacySettings_SetUseClippingGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetUseClippingGeometry>( hLib , "CAPI_RemeshingLegacySettings_GetUseClippingGeometry_C92E1C4A", this->fpRemeshingLegacySettings_GetUseClippingGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetUseEmptySpaceOverride>( hLib , "CAPI_RemeshingLegacySettings_SetUseEmptySpaceOverride_8E8FF636", this->fpRemeshingLegacySettings_SetUseEmptySpaceOverride);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetUseEmptySpaceOverride>( hLib , "CAPI_RemeshingLegacySettings_GetUseEmptySpaceOverride_C92E1C4A", this->fpRemeshingLegacySettings_GetUseEmptySpaceOverride);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetEmptySpaceOverride>( hLib , "CAPI_RemeshingLegacySettings_SetEmptySpaceOverride_1ED03D45", this->fpRemeshingLegacySettings_SetEmptySpaceOverride);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetEmptySpaceOverride>( hLib , "CAPI_RemeshingLegacySettings_GetEmptySpaceOverride_D67B6715", this->fpRemeshingLegacySettings_GetEmptySpaceOverride);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetProcessSelectionSetID>( hLib , "CAPI_RemeshingLegacySettings_SetProcessSelectionSetID_8272B53C", this->fpRemeshingLegacySettings_SetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetProcessSelectionSetID>( hLib , "CAPI_RemeshingLegacySettings_GetProcessSelectionSetID_CDBA2BD0", this->fpRemeshingLegacySettings_GetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetProcessSelectionSetName>( hLib , "CAPI_RemeshingLegacySettings_SetProcessSelectionSetName_DFAFD8F8", this->fpRemeshingLegacySettings_SetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetProcessSelectionSetName>( hLib , "CAPI_RemeshingLegacySettings_GetProcessSelectionSetName_CCBB74AB", this->fpRemeshingLegacySettings_GetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetCuttingPlaneSelectionSetID>( hLib , "CAPI_RemeshingLegacySettings_SetCuttingPlaneSelectionSetID_8272B53C", this->fpRemeshingLegacySettings_SetCuttingPlaneSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetCuttingPlaneSelectionSetID>( hLib , "CAPI_RemeshingLegacySettings_GetCuttingPlaneSelectionSetID_CDBA2BD0", this->fpRemeshingLegacySettings_GetCuttingPlaneSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetCuttingPlaneSelectionSetName>( hLib , "CAPI_RemeshingLegacySettings_SetCuttingPlaneSelectionSetName_DFAFD8F8", this->fpRemeshingLegacySettings_SetCuttingPlaneSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetCuttingPlaneSelectionSetName>( hLib , "CAPI_RemeshingLegacySettings_GetCuttingPlaneSelectionSetName_CCBB74AB", this->fpRemeshingLegacySettings_GetCuttingPlaneSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetClippingGeometrySelectionSetID>( hLib , "CAPI_RemeshingLegacySettings_SetClippingGeometrySelectionSetID_8272B53C", this->fpRemeshingLegacySettings_SetClippingGeometrySelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetClippingGeometrySelectionSetID>( hLib , "CAPI_RemeshingLegacySettings_GetClippingGeometrySelectionSetID_CDBA2BD0", this->fpRemeshingLegacySettings_GetClippingGeometrySelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetClippingGeometrySelectionSetName>( hLib , "CAPI_RemeshingLegacySettings_SetClippingGeometrySelectionSetName_DFAFD8F8", this->fpRemeshingLegacySettings_SetClippingGeometrySelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetClippingGeometrySelectionSetName>( hLib , "CAPI_RemeshingLegacySettings_GetClippingGeometrySelectionSetName_CCBB74AB", this->fpRemeshingLegacySettings_GetClippingGeometrySelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetUseClippingGeometryEmptySpaceOverride>( hLib , "CAPI_RemeshingLegacySettings_SetUseClippingGeometryEmptySpaceOverride_8E8FF636", this->fpRemeshingLegacySettings_SetUseClippingGeometryEmptySpaceOverride);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetUseClippingGeometryEmptySpaceOverride>( hLib , "CAPI_RemeshingLegacySettings_GetUseClippingGeometryEmptySpaceOverride_C92E1C4A", this->fpRemeshingLegacySettings_GetUseClippingGeometryEmptySpaceOverride);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetUsePreviewMode>( hLib , "CAPI_RemeshingLegacySettings_SetUsePreviewMode_8E8FF636", this->fpRemeshingLegacySettings_SetUsePreviewMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetUsePreviewMode>( hLib , "CAPI_RemeshingLegacySettings_GetUsePreviewMode_C92E1C4A", this->fpRemeshingLegacySettings_GetUsePreviewMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetRespectWindingDirection>( hLib , "CAPI_RemeshingLegacySettings_SetRespectWindingDirection_8E8FF636", this->fpRemeshingLegacySettings_SetRespectWindingDirection);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetRespectWindingDirection>( hLib , "CAPI_RemeshingLegacySettings_GetRespectWindingDirection_C92E1C4A", this->fpRemeshingLegacySettings_GetRespectWindingDirection);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetClippingGeometryEmptySpaceOverride>( hLib , "CAPI_RemeshingLegacySettings_SetClippingGeometryEmptySpaceOverride_1ED03D45", this->fpRemeshingLegacySettings_SetClippingGeometryEmptySpaceOverride);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetClippingGeometryEmptySpaceOverride>( hLib , "CAPI_RemeshingLegacySettings_GetClippingGeometryEmptySpaceOverride_D67B6715", this->fpRemeshingLegacySettings_GetClippingGeometryEmptySpaceOverride);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_SetOutputSceneNodeName>( hLib , "CAPI_RemeshingLegacySettings_SetOutputSceneNodeName_DFAFD8F8", this->fpRemeshingLegacySettings_SetOutputSceneNodeName);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacySettings_GetOutputSceneNodeName>( hLib , "CAPI_RemeshingLegacySettings_GetOutputSceneNodeName_CCBB74AB", this->fpRemeshingLegacySettings_GetOutputSceneNodeName);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetOnScreenSize>( hLib , "CAPI_RemeshingSettings_SetOnScreenSize_E4EBF20A", this->fpRemeshingSettings_SetOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetOnScreenSize>( hLib , "CAPI_RemeshingSettings_GetOnScreenSize_85E4C5D5", this->fpRemeshingSettings_GetOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetRemeshingMode>( hLib , "CAPI_RemeshingSettings_SetRemeshingMode_A5C54C2F", this->fpRemeshingSettings_SetRemeshingMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetRemeshingMode>( hLib , "CAPI_RemeshingSettings_GetRemeshingMode_9CD512D0", this->fpRemeshingSettings_GetRemeshingMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetHoleFilling>( hLib , "CAPI_RemeshingSettings_SetHoleFilling_819D02AD", this->fpRemeshingSettings_SetHoleFilling);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetHoleFilling>( hLib , "CAPI_RemeshingSettings_GetHoleFilling_E0E4B5D1", this->fpRemeshingSettings_GetHoleFilling);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetSurfaceTransferMode>( hLib , "CAPI_RemeshingSettings_SetSurfaceTransferMode_78EEF1F9", this->fpRemeshingSettings_SetSurfaceTransferMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetSurfaceTransferMode>( hLib , "CAPI_RemeshingSettings_GetSurfaceTransferMode_40E2E362", this->fpRemeshingSettings_GetSurfaceTransferMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetHardEdgeAngle>( hLib , "CAPI_RemeshingSettings_SetHardEdgeAngle_74B7D40A", this->fpRemeshingSettings_SetHardEdgeAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetHardEdgeAngle>( hLib , "CAPI_RemeshingSettings_GetHardEdgeAngle_D67B6715", this->fpRemeshingSettings_GetHardEdgeAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetForceSoftEdgesWithinTextureCharts>( hLib , "CAPI_RemeshingSettings_SetForceSoftEdgesWithinTextureCharts_8E8FF636", this->fpRemeshingSettings_SetForceSoftEdgesWithinTextureCharts);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetForceSoftEdgesWithinTextureCharts>( hLib , "CAPI_RemeshingSettings_GetForceSoftEdgesWithinTextureCharts_C92E1C4A", this->fpRemeshingSettings_GetForceSoftEdgesWithinTextureCharts);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetTransferNormals>( hLib , "CAPI_RemeshingSettings_SetTransferNormals_8E8FF636", this->fpRemeshingSettings_SetTransferNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetTransferNormals>( hLib , "CAPI_RemeshingSettings_GetTransferNormals_C92E1C4A", this->fpRemeshingSettings_GetTransferNormals);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetTransferColors>( hLib , "CAPI_RemeshingSettings_SetTransferColors_8E8FF636", this->fpRemeshingSettings_SetTransferColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetTransferColors>( hLib , "CAPI_RemeshingSettings_GetTransferColors_C92E1C4A", this->fpRemeshingSettings_GetTransferColors);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetProcessSelectionSetID>( hLib , "CAPI_RemeshingSettings_SetProcessSelectionSetID_8272B53C", this->fpRemeshingSettings_SetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetProcessSelectionSetID>( hLib , "CAPI_RemeshingSettings_GetProcessSelectionSetID_CDBA2BD0", this->fpRemeshingSettings_GetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetProcessSelectionSetName>( hLib , "CAPI_RemeshingSettings_SetProcessSelectionSetName_DFAFD8F8", this->fpRemeshingSettings_SetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetProcessSelectionSetName>( hLib , "CAPI_RemeshingSettings_GetProcessSelectionSetName_CCBB74AB", this->fpRemeshingSettings_GetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetKeepUnprocessedSceneMeshes>( hLib , "CAPI_RemeshingSettings_SetKeepUnprocessedSceneMeshes_8E8FF636", this->fpRemeshingSettings_SetKeepUnprocessedSceneMeshes);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetKeepUnprocessedSceneMeshes>( hLib , "CAPI_RemeshingSettings_GetKeepUnprocessedSceneMeshes_C92E1C4A", this->fpRemeshingSettings_GetKeepUnprocessedSceneMeshes);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetRemeshingModeManualPositionX>( hLib , "CAPI_RemeshingSettings_SetRemeshingModeManualPositionX_74B7D40A", this->fpRemeshingSettings_SetRemeshingModeManualPositionX);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetRemeshingModeManualPositionX>( hLib , "CAPI_RemeshingSettings_GetRemeshingModeManualPositionX_D67B6715", this->fpRemeshingSettings_GetRemeshingModeManualPositionX);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetRemeshingModeManualPositionY>( hLib , "CAPI_RemeshingSettings_SetRemeshingModeManualPositionY_74B7D40A", this->fpRemeshingSettings_SetRemeshingModeManualPositionY);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetRemeshingModeManualPositionY>( hLib , "CAPI_RemeshingSettings_GetRemeshingModeManualPositionY_D67B6715", this->fpRemeshingSettings_GetRemeshingModeManualPositionY);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_SetRemeshingModeManualPositionZ>( hLib , "CAPI_RemeshingSettings_SetRemeshingModeManualPositionZ_74B7D40A", this->fpRemeshingSettings_SetRemeshingModeManualPositionZ);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingSettings_GetRemeshingModeManualPositionZ>( hLib , "CAPI_RemeshingSettings_GetRemeshingModeManualPositionZ_D67B6715", this->fpRemeshingSettings_GetRemeshingModeManualPositionZ);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateRemeshingLegacyProcessor>( hLib , "CAPI_CreateRemeshingLegacyProcessor", this->fpCreateRemeshingLegacyProcessor);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyProcessor_SetScene>( hLib , "CAPI_RemeshingLegacyProcessor_SetScene_738A6D2B", this->fpRemeshingLegacyProcessor_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyProcessor_GetScene>( hLib , "CAPI_RemeshingLegacyProcessor_GetScene_262BA3D9", this->fpRemeshingLegacyProcessor_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyProcessor_GetMappingImage>( hLib , "CAPI_RemeshingLegacyProcessor_GetMappingImage_6CA50B0A", this->fpRemeshingLegacyProcessor_GetMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyProcessor_GetMappingImageForImageIndex>( hLib , "CAPI_RemeshingLegacyProcessor_GetMappingImageForImageIndex_5E68A9B2", this->fpRemeshingLegacyProcessor_GetMappingImageForImageIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyProcessor_GetRemeshingLegacySettings>( hLib , "CAPI_RemeshingLegacyProcessor_GetRemeshingLegacySettings_DE13E1E0", this->fpRemeshingLegacyProcessor_GetRemeshingLegacySettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyProcessor_GetMappingImageSettings>( hLib , "CAPI_RemeshingLegacyProcessor_GetMappingImageSettings_7D4F09F4", this->fpRemeshingLegacyProcessor_GetMappingImageSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyProcessor_GetBoneSettings>( hLib , "CAPI_RemeshingLegacyProcessor_GetBoneSettings_AFD10D0A", this->fpRemeshingLegacyProcessor_GetBoneSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyProcessor_GetVisibilitySettings>( hLib , "CAPI_RemeshingLegacyProcessor_GetVisibilitySettings_A66EAE96", this->fpRemeshingLegacyProcessor_GetVisibilitySettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyProcessor_GetResultSelectionSetId>( hLib , "CAPI_RemeshingLegacyProcessor_GetResultSelectionSetId_CDBA2BD0", this->fpRemeshingLegacyProcessor_GetResultSelectionSetId);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateRemeshingProcessor>( hLib , "CAPI_CreateRemeshingProcessor", this->fpCreateRemeshingProcessor);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingProcessor_SetScene>( hLib , "CAPI_RemeshingProcessor_SetScene_738A6D2B", this->fpRemeshingProcessor_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingProcessor_GetScene>( hLib , "CAPI_RemeshingProcessor_GetScene_262BA3D9", this->fpRemeshingProcessor_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingProcessor_GetMappingImage>( hLib , "CAPI_RemeshingProcessor_GetMappingImage_6CA50B0A", this->fpRemeshingProcessor_GetMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingProcessor_GetMappingImageForImageIndex>( hLib , "CAPI_RemeshingProcessor_GetMappingImageForImageIndex_5E68A9B2", this->fpRemeshingProcessor_GetMappingImageForImageIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingProcessor_GetRemeshingSettings>( hLib , "CAPI_RemeshingProcessor_GetRemeshingSettings_50DB93B8", this->fpRemeshingProcessor_GetRemeshingSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingProcessor_GetMappingImageSettings>( hLib , "CAPI_RemeshingProcessor_GetMappingImageSettings_7D4F09F4", this->fpRemeshingProcessor_GetMappingImageSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingProcessor_GetBoneSettings>( hLib , "CAPI_RemeshingProcessor_GetBoneSettings_AFD10D0A", this->fpRemeshingProcessor_GetBoneSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingProcessor_GetGeometryCullingSettings>( hLib , "CAPI_RemeshingProcessor_GetGeometryCullingSettings_9A4013D2", this->fpRemeshingProcessor_GetGeometryCullingSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingProcessor_GetVisibilitySettings>( hLib , "CAPI_RemeshingProcessor_GetVisibilitySettings_A66EAE96", this->fpRemeshingProcessor_GetVisibilitySettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateScene>( hLib , "CAPI_CreateScene", this->fpCreateScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetRootNode>( hLib , "CAPI_Scene_GetRootNode_64DE5543", this->fpScene_GetRootNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetMaterialTable>( hLib , "CAPI_Scene_GetMaterialTable_5F2D31CF", this->fpScene_GetMaterialTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetBoneTable>( hLib , "CAPI_Scene_GetBoneTable_0154CDDE", this->fpScene_GetBoneTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetSelectionSetTable>( hLib , "CAPI_Scene_GetSelectionSetTable_DA67763A", this->fpScene_GetSelectionSetTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetTextureTable>( hLib , "CAPI_Scene_GetTextureTable_DE9D5996", this->fpScene_GetTextureTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetMappingImage>( hLib , "CAPI_Scene_GetMappingImage_6CA50B0A", this->fpScene_GetMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_RemoveSceneNodesInSelectionSet>( hLib , "CAPI_Scene_RemoveSceneNodesInSelectionSet_EAB11672", this->fpScene_RemoveSceneNodesInSelectionSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_RemoveSceneNodes>( hLib , "CAPI_Scene_RemoveSceneNodes_69A03065", this->fpScene_RemoveSceneNodes);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_RemoveSceneNodesOfType>( hLib , "CAPI_Scene_RemoveSceneNodesOfType_DFAFD8F8", this->fpScene_RemoveSceneNodesOfType);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_CreateAABB>( hLib , "CAPI_Scene_CreateAABB_47F1729B", this->fpScene_CreateAABB);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_Clear>( hLib , "CAPI_Scene_Clear_69A03065", this->fpScene_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_LoadFromFile>( hLib , "CAPI_Scene_LoadFromFile_5F793399", this->fpScene_LoadFromFile);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_SaveToFile>( hLib , "CAPI_Scene_SaveToFile_5F793399", this->fpScene_SaveToFile);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_EvaluateDefaultGlobalTransformation>( hLib , "CAPI_Scene_EvaluateDefaultGlobalTransformation_21583BDE", this->fpScene_EvaluateDefaultGlobalTransformation);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetInf>( hLib , "CAPI_Scene_GetInf_D67B6715", this->fpScene_GetInf);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetSup>( hLib , "CAPI_Scene_GetSup_D67B6715", this->fpScene_GetSup);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetRadius>( hLib , "CAPI_Scene_GetRadius_D67B6715", this->fpScene_GetRadius);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_CalculateExtents>( hLib , "CAPI_Scene_CalculateExtents_C92E1C4A", this->fpScene_CalculateExtents);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetNodeFromPath>( hLib , "CAPI_Scene_GetNodeFromPath_CB2AEDB9", this->fpScene_GetNodeFromPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetNodeByGUID>( hLib , "CAPI_Scene_GetNodeByGUID_CB2AEDB9", this->fpScene_GetNodeByGUID);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetSubNodeByGUID>( hLib , "CAPI_Scene_GetSubNodeByGUID_7CF21D73", this->fpScene_GetSubNodeByGUID);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_AddCustomField>( hLib , "CAPI_Scene_AddCustomField_28207052", this->fpScene_AddCustomField);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_RemoveCustomField>( hLib , "CAPI_Scene_RemoveCustomField_DFAFD8F8", this->fpScene_RemoveCustomField);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetCustomField>( hLib , "CAPI_Scene_GetCustomField_2F85F754", this->fpScene_GetCustomField);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_HasCustomField>( hLib , "CAPI_Scene_HasCustomField_5F793399", this->fpScene_HasCustomField);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_RemoveUnlinkedBones>( hLib , "CAPI_Scene_RemoveUnlinkedBones_69A03065", this->fpScene_RemoveUnlinkedBones);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_Compact>( hLib , "CAPI_Scene_Compact_69A03065", this->fpScene_Compact);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_Append>( hLib , "CAPI_Scene_Append_738A6D2B", this->fpScene_Append);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_NewCombinedGeometryFromSelectionSet>( hLib , "CAPI_Scene_NewCombinedGeometryFromSelectionSet_53091176", this->fpScene_NewCombinedGeometryFromSelectionSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_NewCombinedGeometry>( hLib , "CAPI_Scene_NewCombinedGeometry_1ACA88D6", this->fpScene_NewCombinedGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_SelectNodes>( hLib , "CAPI_Scene_SelectNodes_E03E072F", this->fpScene_SelectNodes);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_DeepCopy>( hLib , "CAPI_Scene_DeepCopy_738A6D2B", this->fpScene_DeepCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_NewCopy>( hLib , "CAPI_Scene_NewCopy_262BA3D9", this->fpScene_NewCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetTriangleCount>( hLib , "CAPI_Scene_GetTriangleCount_85E4C5D5", this->fpScene_GetTriangleCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_StandardizeMaterials>( hLib , "CAPI_Scene_StandardizeMaterials_69A03065", this->fpScene_StandardizeMaterials);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetCascadedSceneCount>( hLib , "CAPI_Scene_GetCascadedSceneCount_85E4C5D5", this->fpScene_GetCascadedSceneCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetCascadedSceneForIndex>( hLib , "CAPI_Scene_GetCascadedSceneForIndex_E28BEFDF", this->fpScene_GetCascadedSceneForIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetMaterialChannels>( hLib , "CAPI_Scene_GetMaterialChannels_738A6D2B", this->fpScene_GetMaterialChannels);
		all_successfully_loaded &= LoadFunctionPointer<FP_Scene_GetMaterialChannelsWithTextureInputs>( hLib , "CAPI_Scene_GetMaterialChannelsWithTextureInputs_738A6D2B", this->fpScene_GetMaterialChannelsWithTextureInputs);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSceneNode>( hLib , "CAPI_CreateSceneNode", this->fpCreateSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetScene>( hLib , "CAPI_SceneNode_GetScene_262BA3D9", this->fpSceneNode_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetParent>( hLib , "CAPI_SceneNode_GetParent_64DE5543", this->fpSceneNode_GetParent);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetRelativeTransform>( hLib , "CAPI_SceneNode_GetRelativeTransform_EEA6182E", this->fpSceneNode_GetRelativeTransform);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_SetOriginalName>( hLib , "CAPI_SceneNode_SetOriginalName_DFAFD8F8", this->fpSceneNode_SetOriginalName);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetOriginalName>( hLib , "CAPI_SceneNode_GetOriginalName_CCBB74AB", this->fpSceneNode_GetOriginalName);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_SetIsVisible>( hLib , "CAPI_SceneNode_SetIsVisible_8E8FF636", this->fpSceneNode_SetIsVisible);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetIsVisible>( hLib , "CAPI_SceneNode_GetIsVisible_C92E1C4A", this->fpSceneNode_GetIsVisible);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_SetIsFrozen>( hLib , "CAPI_SceneNode_SetIsFrozen_8E8FF636", this->fpSceneNode_SetIsFrozen);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetIsFrozen>( hLib , "CAPI_SceneNode_GetIsFrozen_C92E1C4A", this->fpSceneNode_GetIsFrozen);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_SetIsModified>( hLib , "CAPI_SceneNode_SetIsModified_8E8FF636", this->fpSceneNode_SetIsModified);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetIsModified>( hLib , "CAPI_SceneNode_GetIsModified_C92E1C4A", this->fpSceneNode_GetIsModified);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_SetNodeGUID>( hLib , "CAPI_SceneNode_SetNodeGUID_DFAFD8F8", this->fpSceneNode_SetNodeGUID);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetNodeGUID>( hLib , "CAPI_SceneNode_GetNodeGUID_CCBB74AB", this->fpSceneNode_GetNodeGUID);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetInf>( hLib , "CAPI_SceneNode_GetInf_D67B6715", this->fpSceneNode_GetInf);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetSup>( hLib , "CAPI_SceneNode_GetSup_D67B6715", this->fpSceneNode_GetSup);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetChildCount>( hLib , "CAPI_SceneNode_GetChildCount_85E4C5D5", this->fpSceneNode_GetChildCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetChild>( hLib , "CAPI_SceneNode_GetChild_57748FDC", this->fpSceneNode_GetChild);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_FindNamedChild>( hLib , "CAPI_SceneNode_FindNamedChild_CB2AEDB9", this->fpSceneNode_FindNamedChild);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_AddChild>( hLib , "CAPI_SceneNode_AddChild_738A6D2B", this->fpSceneNode_AddChild);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_CreateChildMesh>( hLib , "CAPI_SceneNode_CreateChildMesh_6CE8BAFD", this->fpSceneNode_CreateChildMesh);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_CreateChildPlane>( hLib , "CAPI_SceneNode_CreateChildPlane_9426C8F6", this->fpSceneNode_CreateChildPlane);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_RemoveChild>( hLib , "CAPI_SceneNode_RemoveChild_738A6D2B", this->fpSceneNode_RemoveChild);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_RemoveChildren>( hLib , "CAPI_SceneNode_RemoveChildren_69A03065", this->fpSceneNode_RemoveChildren);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_RemoveFromParent>( hLib , "CAPI_SceneNode_RemoveFromParent_69A03065", this->fpSceneNode_RemoveFromParent);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_HasChild>( hLib , "CAPI_SceneNode_HasChild_492DF2A4", this->fpSceneNode_HasChild);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_NewCopy>( hLib , "CAPI_SceneNode_NewCopy_64DE5543", this->fpSceneNode_NewCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_NewClone>( hLib , "CAPI_SceneNode_NewClone_64DE5543", this->fpSceneNode_NewClone);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_EvaluateDefaultGlobalTransformation>( hLib , "CAPI_SceneNode_EvaluateDefaultGlobalTransformation_738A6D2B", this->fpSceneNode_EvaluateDefaultGlobalTransformation);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_CalculateExtents>( hLib , "CAPI_SceneNode_CalculateExtents_C92E1C4A", this->fpSceneNode_CalculateExtents);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNode_GetPath>( hLib , "CAPI_SceneNode_GetPath_CCBB74AB", this->fpSceneNode_GetPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSceneNodeCollection>( hLib , "CAPI_CreateSceneNodeCollection", this->fpCreateSceneNodeCollection);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNodeCollection_AddSceneNode>( hLib , "CAPI_SceneNodeCollection_AddSceneNode_ACA7E849", this->fpSceneNodeCollection_AddSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNodeCollection_GetSceneNode>( hLib , "CAPI_SceneNodeCollection_GetSceneNode_B9805B7F", this->fpSceneNodeCollection_GetSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNodeCollection_RemoveSceneNode>( hLib , "CAPI_SceneNodeCollection_RemoveSceneNode_738A6D2B", this->fpSceneNodeCollection_RemoveSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNodeCollection_FindSceneNode>( hLib , "CAPI_SceneNodeCollection_FindSceneNode_CB2AEDB9", this->fpSceneNodeCollection_FindSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNodeCollection_GetNextItemAsSceneNode>( hLib , "CAPI_SceneNodeCollection_GetNextItemAsSceneNode_52A43908", this->fpSceneNodeCollection_GetNextItemAsSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneNodeCollection_IsSceneNodeInCollection>( hLib , "CAPI_SceneNodeCollection_IsSceneNodeInCollection_492DF2A4", this->fpSceneNodeCollection_IsSceneNodeInCollection);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSceneMesh>( hLib , "CAPI_CreateSceneMesh", this->fpCreateSceneMesh);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneMesh_SetGeometry>( hLib , "CAPI_SceneMesh_SetGeometry_738A6D2B", this->fpSceneMesh_SetGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneMesh_GetGeometry>( hLib , "CAPI_SceneMesh_GetGeometry_1ACA88D6", this->fpSceneMesh_GetGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSceneLodGroup>( hLib , "CAPI_CreateSceneLodGroup", this->fpCreateSceneLodGroup);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneLodGroup_GetThresholds>( hLib , "CAPI_SceneLodGroup_GetThresholds_692A1E94", this->fpSceneLodGroup_GetThresholds);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneLodGroup_GetLodForDistance>( hLib , "CAPI_SceneLodGroup_GetLodForDistance_DB15DF6F", this->fpSceneLodGroup_GetLodForDistance);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSceneBone>( hLib , "CAPI_CreateSceneBone", this->fpCreateSceneBone);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneBone_GetParentBone>( hLib , "CAPI_SceneBone_GetParentBone_CDBA2BD0", this->fpSceneBone_GetParentBone);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneBone_CollectAllChildBones>( hLib , "CAPI_SceneBone_CollectAllChildBones_738A6D2B", this->fpSceneBone_CollectAllChildBones);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneBone_GetBoneId>( hLib , "CAPI_SceneBone_GetBoneId_CDBA2BD0", this->fpSceneBone_GetBoneId);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSceneBoneTable>( hLib , "CAPI_CreateSceneBoneTable", this->fpCreateSceneBoneTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneBoneTable_AddBone>( hLib , "CAPI_SceneBoneTable_AddBone_65258EFE", this->fpSceneBoneTable_AddBone);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneBoneTable_FindBone>( hLib , "CAPI_SceneBoneTable_FindBone_DD04409F", this->fpSceneBoneTable_FindBone);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneBoneTable_FindBoneId>( hLib , "CAPI_SceneBoneTable_FindBoneId_9B49F2EF", this->fpSceneBoneTable_FindBoneId);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneBoneTable_GetBone>( hLib , "CAPI_SceneBoneTable_GetBone_61DB4247", this->fpSceneBoneTable_GetBone);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneBoneTable_RemoveBone>( hLib , "CAPI_SceneBoneTable_RemoveBone_8272B53C", this->fpSceneBoneTable_RemoveBone);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneBoneTable_GetBonesCount>( hLib , "CAPI_SceneBoneTable_GetBonesCount_85E4C5D5", this->fpSceneBoneTable_GetBonesCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateScenePlane>( hLib , "CAPI_CreateScenePlane", this->fpCreateScenePlane);
		all_successfully_loaded &= LoadFunctionPointer<FP_ScenePlane_GetPosition>( hLib , "CAPI_ScenePlane_GetPosition_D67B6715", this->fpScenePlane_GetPosition);
		all_successfully_loaded &= LoadFunctionPointer<FP_ScenePlane_SetPosition>( hLib , "CAPI_ScenePlane_SetPosition_1ED03D45", this->fpScenePlane_SetPosition);
		all_successfully_loaded &= LoadFunctionPointer<FP_ScenePlane_GetNormal>( hLib , "CAPI_ScenePlane_GetNormal_D67B6715", this->fpScenePlane_GetNormal);
		all_successfully_loaded &= LoadFunctionPointer<FP_ScenePlane_SetNormal>( hLib , "CAPI_ScenePlane_SetNormal_1ED03D45", this->fpScenePlane_SetNormal);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSceneCamera>( hLib , "CAPI_CreateSceneCamera", this->fpCreateSceneCamera);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_SetCameraType>( hLib , "CAPI_SceneCamera_SetCameraType_703080C3", this->fpSceneCamera_SetCameraType);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_GetCameraType>( hLib , "CAPI_SceneCamera_GetCameraType_2C5247C4", this->fpSceneCamera_GetCameraType);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_GetCameraPositions>( hLib , "CAPI_SceneCamera_GetCameraPositions_692A1E94", this->fpSceneCamera_GetCameraPositions);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_GetTargetPositions>( hLib , "CAPI_SceneCamera_GetTargetPositions_692A1E94", this->fpSceneCamera_GetTargetPositions);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_SetUseNormalizedCoordinates>( hLib , "CAPI_SceneCamera_SetUseNormalizedCoordinates_8E8FF636", this->fpSceneCamera_SetUseNormalizedCoordinates);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_GetUseNormalizedCoordinates>( hLib , "CAPI_SceneCamera_GetUseNormalizedCoordinates_C92E1C4A", this->fpSceneCamera_GetUseNormalizedCoordinates);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_SetOrthographicCameraPixelSize>( hLib , "CAPI_SceneCamera_SetOrthographicCameraPixelSize_74B7D40A", this->fpSceneCamera_SetOrthographicCameraPixelSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_GetOrthographicCameraPixelSize>( hLib , "CAPI_SceneCamera_GetOrthographicCameraPixelSize_D67B6715", this->fpSceneCamera_GetOrthographicCameraPixelSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_SetFieldOfView>( hLib , "CAPI_SceneCamera_SetFieldOfView_74B7D40A", this->fpSceneCamera_SetFieldOfView);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_GetFieldOfView>( hLib , "CAPI_SceneCamera_GetFieldOfView_D67B6715", this->fpSceneCamera_GetFieldOfView);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_SetPixelFieldOfView>( hLib , "CAPI_SceneCamera_SetPixelFieldOfView_74B7D40A", this->fpSceneCamera_SetPixelFieldOfView);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_GetPixelFieldOfView>( hLib , "CAPI_SceneCamera_GetPixelFieldOfView_D67B6715", this->fpSceneCamera_GetPixelFieldOfView);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_GetNumberOfViews>( hLib , "CAPI_SceneCamera_GetNumberOfViews_85E4C5D5", this->fpSceneCamera_GetNumberOfViews);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_ValidateCamera>( hLib , "CAPI_SceneCamera_ValidateCamera_C92E1C4A", this->fpSceneCamera_ValidateCamera);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneCamera_SetCustomSphereCameraPath>( hLib , "CAPI_SceneCamera_SetCustomSphereCameraPath_7F1BC25C", this->fpSceneCamera_SetCustomSphereCameraPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSceneExporter>( hLib , "CAPI_CreateSceneExporter", this->fpCreateSceneExporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_SetExportFilePath>( hLib , "CAPI_SceneExporter_SetExportFilePath_DFAFD8F8", this->fpSceneExporter_SetExportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_GetExportFilePath>( hLib , "CAPI_SceneExporter_GetExportFilePath_CCBB74AB", this->fpSceneExporter_GetExportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_SetPrimaryTexCoordName>( hLib , "CAPI_SceneExporter_SetPrimaryTexCoordName_DFAFD8F8", this->fpSceneExporter_SetPrimaryTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_GetPrimaryTexCoordName>( hLib , "CAPI_SceneExporter_GetPrimaryTexCoordName_CCBB74AB", this->fpSceneExporter_GetPrimaryTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_SetScene>( hLib , "CAPI_SceneExporter_SetScene_738A6D2B", this->fpSceneExporter_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_RunExport>( hLib , "CAPI_SceneExporter_RunExport_C92E1C4A", this->fpSceneExporter_RunExport);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_Clear>( hLib , "CAPI_SceneExporter_Clear_69A03065", this->fpSceneExporter_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_SetEmbedReferences>( hLib , "CAPI_SceneExporter_SetEmbedReferences_8E8FF636", this->fpSceneExporter_SetEmbedReferences);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_GetEmbedReferences>( hLib , "CAPI_SceneExporter_GetEmbedReferences_C92E1C4A", this->fpSceneExporter_GetEmbedReferences);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_SetExportCascadedScenes>( hLib , "CAPI_SceneExporter_SetExportCascadedScenes_8E8FF636", this->fpSceneExporter_SetExportCascadedScenes);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneExporter_GetExportCascadedScenes>( hLib , "CAPI_SceneExporter_GetExportCascadedScenes_C92E1C4A", this->fpSceneExporter_GetExportCascadedScenes);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSceneImporter>( hLib , "CAPI_CreateSceneImporter", this->fpCreateSceneImporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneImporter_SetImportFilePath>( hLib , "CAPI_SceneImporter_SetImportFilePath_DFAFD8F8", this->fpSceneImporter_SetImportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneImporter_GetImportFilePath>( hLib , "CAPI_SceneImporter_GetImportFilePath_CCBB74AB", this->fpSceneImporter_GetImportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneImporter_GetScene>( hLib , "CAPI_SceneImporter_GetScene_262BA3D9", this->fpSceneImporter_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneImporter_RunImport>( hLib , "CAPI_SceneImporter_RunImport_C92E1C4A", this->fpSceneImporter_RunImport);
		all_successfully_loaded &= LoadFunctionPointer<FP_SceneImporter_Clear>( hLib , "CAPI_SceneImporter_Clear_69A03065", this->fpSceneImporter_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSelectionSet>( hLib , "CAPI_CreateSelectionSet", this->fpCreateSelectionSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSet_AddItem>( hLib , "CAPI_SelectionSet_AddItem_DFAFD8F8", this->fpSelectionSet_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSet_RemoveItem>( hLib , "CAPI_SelectionSet_RemoveItem_DFAFD8F8", this->fpSelectionSet_RemoveItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSet_AddHierarchy>( hLib , "CAPI_SelectionSet_AddHierarchy_738A6D2B", this->fpSelectionSet_AddHierarchy);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSet_RemoveHierarchy>( hLib , "CAPI_SelectionSet_RemoveHierarchy_738A6D2B", this->fpSelectionSet_RemoveHierarchy);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSet_Clear>( hLib , "CAPI_SelectionSet_Clear_69A03065", this->fpSelectionSet_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSet_GetItemCount>( hLib , "CAPI_SelectionSet_GetItemCount_85E4C5D5", this->fpSelectionSet_GetItemCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSet_GetItem>( hLib , "CAPI_SelectionSet_GetItem_229F252F", this->fpSelectionSet_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSelectionSetTable>( hLib , "CAPI_CreateSelectionSetTable", this->fpCreateSelectionSetTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSetTable_AddSelectionSet>( hLib , "CAPI_SelectionSetTable_AddSelectionSet_65258EFE", this->fpSelectionSetTable_AddSelectionSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSetTable_FindSelectionSet>( hLib , "CAPI_SelectionSetTable_FindSelectionSet_B3CFF918", this->fpSelectionSetTable_FindSelectionSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSetTable_FindSelectionSetId>( hLib , "CAPI_SelectionSetTable_FindSelectionSetId_9B49F2EF", this->fpSelectionSetTable_FindSelectionSetId);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSetTable_GetSelectionSet>( hLib , "CAPI_SelectionSetTable_GetSelectionSet_123ED68A", this->fpSelectionSetTable_GetSelectionSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSetTable_RemoveSelectionSet>( hLib , "CAPI_SelectionSetTable_RemoveSelectionSet_8272B53C", this->fpSelectionSetTable_RemoveSelectionSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSetTable_RemoveNamedSelectionSet>( hLib , "CAPI_SelectionSetTable_RemoveNamedSelectionSet_DFAFD8F8", this->fpSelectionSetTable_RemoveNamedSelectionSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_SelectionSetTable_GetSelectionSetCount>( hLib , "CAPI_SelectionSetTable_GetSelectionSetCount_85E4C5D5", this->fpSelectionSetTable_GetSelectionSetCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateTexture>( hLib , "CAPI_CreateTexture", this->fpCreateTexture);
		all_successfully_loaded &= LoadFunctionPointer<FP_Texture_SetFilePath>( hLib , "CAPI_Texture_SetFilePath_DFAFD8F8", this->fpTexture_SetFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_Texture_GetFilePath>( hLib , "CAPI_Texture_GetFilePath_CCBB74AB", this->fpTexture_GetFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_Texture_SetImageData>( hLib , "CAPI_Texture_SetImageData_738A6D2B", this->fpTexture_SetImageData);
		all_successfully_loaded &= LoadFunctionPointer<FP_Texture_GetImageData>( hLib , "CAPI_Texture_GetImageData_55DD0790", this->fpTexture_GetImageData);
		all_successfully_loaded &= LoadFunctionPointer<FP_Texture_ChangeTexturePrefixPath>( hLib , "CAPI_Texture_ChangeTexturePrefixPath_664A5B89", this->fpTexture_ChangeTexturePrefixPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_Texture_ExportImageData>( hLib , "CAPI_Texture_ExportImageData_C92E1C4A", this->fpTexture_ExportImageData);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateTextureTable>( hLib , "CAPI_CreateTextureTable", this->fpCreateTextureTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_TextureTable_AddTexture>( hLib , "CAPI_TextureTable_AddTexture_65258EFE", this->fpTextureTable_AddTexture);
		all_successfully_loaded &= LoadFunctionPointer<FP_TextureTable_FindTexture>( hLib , "CAPI_TextureTable_FindTexture_01B11ABF", this->fpTextureTable_FindTexture);
		all_successfully_loaded &= LoadFunctionPointer<FP_TextureTable_FindTextureUsingPath>( hLib , "CAPI_TextureTable_FindTextureUsingPath_01B11ABF", this->fpTextureTable_FindTextureUsingPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_TextureTable_FindTextureId>( hLib , "CAPI_TextureTable_FindTextureId_9B49F2EF", this->fpTextureTable_FindTextureId);
		all_successfully_loaded &= LoadFunctionPointer<FP_TextureTable_SetTexture>( hLib , "CAPI_TextureTable_SetTexture_43B56B13", this->fpTextureTable_SetTexture);
		all_successfully_loaded &= LoadFunctionPointer<FP_TextureTable_GetTexture>( hLib , "CAPI_TextureTable_GetTexture_AB04A85C", this->fpTextureTable_GetTexture);
		all_successfully_loaded &= LoadFunctionPointer<FP_TextureTable_RemoveTexture>( hLib , "CAPI_TextureTable_RemoveTexture_8272B53C", this->fpTextureTable_RemoveTexture);
		all_successfully_loaded &= LoadFunctionPointer<FP_TextureTable_GetTexturesCount>( hLib , "CAPI_TextureTable_GetTexturesCount_85E4C5D5", this->fpTextureTable_GetTexturesCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_TextureTable_ChangeTexturePrefixPath>( hLib , "CAPI_TextureTable_ChangeTexturePrefixPath_664A5B89", this->fpTextureTable_ChangeTexturePrefixPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_SetUseClippingPlanes>( hLib , "CAPI_GeometryCullingSettings_SetUseClippingPlanes_8E8FF636", this->fpGeometryCullingSettings_SetUseClippingPlanes);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_GetUseClippingPlanes>( hLib , "CAPI_GeometryCullingSettings_GetUseClippingPlanes_C92E1C4A", this->fpGeometryCullingSettings_GetUseClippingPlanes);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_SetUseClippingGeometry>( hLib , "CAPI_GeometryCullingSettings_SetUseClippingGeometry_8E8FF636", this->fpGeometryCullingSettings_SetUseClippingGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_GetUseClippingGeometry>( hLib , "CAPI_GeometryCullingSettings_GetUseClippingGeometry_C92E1C4A", this->fpGeometryCullingSettings_GetUseClippingGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_SetClippingPlaneSelectionSetID>( hLib , "CAPI_GeometryCullingSettings_SetClippingPlaneSelectionSetID_8272B53C", this->fpGeometryCullingSettings_SetClippingPlaneSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_GetClippingPlaneSelectionSetID>( hLib , "CAPI_GeometryCullingSettings_GetClippingPlaneSelectionSetID_CDBA2BD0", this->fpGeometryCullingSettings_GetClippingPlaneSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_SetClippingPlaneSelectionSetName>( hLib , "CAPI_GeometryCullingSettings_SetClippingPlaneSelectionSetName_DFAFD8F8", this->fpGeometryCullingSettings_SetClippingPlaneSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_GetClippingPlaneSelectionSetName>( hLib , "CAPI_GeometryCullingSettings_GetClippingPlaneSelectionSetName_CCBB74AB", this->fpGeometryCullingSettings_GetClippingPlaneSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_SetClippingGeometrySelectionSetID>( hLib , "CAPI_GeometryCullingSettings_SetClippingGeometrySelectionSetID_8272B53C", this->fpGeometryCullingSettings_SetClippingGeometrySelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_GetClippingGeometrySelectionSetID>( hLib , "CAPI_GeometryCullingSettings_GetClippingGeometrySelectionSetID_CDBA2BD0", this->fpGeometryCullingSettings_GetClippingGeometrySelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_SetClippingGeometrySelectionSetName>( hLib , "CAPI_GeometryCullingSettings_SetClippingGeometrySelectionSetName_DFAFD8F8", this->fpGeometryCullingSettings_SetClippingGeometrySelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryCullingSettings_GetClippingGeometrySelectionSetName>( hLib , "CAPI_GeometryCullingSettings_GetClippingGeometrySelectionSetName_CCBB74AB", this->fpGeometryCullingSettings_GetClippingGeometrySelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateImageDataImporter>( hLib , "CAPI_CreateImageDataImporter", this->fpCreateImageDataImporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_SetImportFilePath>( hLib , "CAPI_ImageDataImporter_SetImportFilePath_DFAFD8F8", this->fpImageDataImporter_SetImportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_GetImportFilePath>( hLib , "CAPI_ImageDataImporter_GetImportFilePath_CCBB74AB", this->fpImageDataImporter_GetImportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_SetExtensionOverride>( hLib , "CAPI_ImageDataImporter_SetExtensionOverride_DFAFD8F8", this->fpImageDataImporter_SetExtensionOverride);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_GetExtensionOverride>( hLib , "CAPI_ImageDataImporter_GetExtensionOverride_CCBB74AB", this->fpImageDataImporter_GetExtensionOverride);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_GetImage>( hLib , "CAPI_ImageDataImporter_GetImage_55DD0790", this->fpImageDataImporter_GetImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_SetCapToPowerOfTwo>( hLib , "CAPI_ImageDataImporter_SetCapToPowerOfTwo_8E8FF636", this->fpImageDataImporter_SetCapToPowerOfTwo);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_GetCapToPowerOfTwo>( hLib , "CAPI_ImageDataImporter_GetCapToPowerOfTwo_C92E1C4A", this->fpImageDataImporter_GetCapToPowerOfTwo);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_SetMaxWidth>( hLib , "CAPI_ImageDataImporter_SetMaxWidth_E4EBF20A", this->fpImageDataImporter_SetMaxWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_GetMaxWidth>( hLib , "CAPI_ImageDataImporter_GetMaxWidth_85E4C5D5", this->fpImageDataImporter_GetMaxWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_SetMaxHeight>( hLib , "CAPI_ImageDataImporter_SetMaxHeight_E4EBF20A", this->fpImageDataImporter_SetMaxHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_GetMaxHeight>( hLib , "CAPI_ImageDataImporter_GetMaxHeight_85E4C5D5", this->fpImageDataImporter_GetMaxHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_SetImportOnlyHeader>( hLib , "CAPI_ImageDataImporter_SetImportOnlyHeader_8E8FF636", this->fpImageDataImporter_SetImportOnlyHeader);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_GetImportOnlyHeader>( hLib , "CAPI_ImageDataImporter_GetImportOnlyHeader_C92E1C4A", this->fpImageDataImporter_GetImportOnlyHeader);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_GetNumberOfChannels>( hLib , "CAPI_ImageDataImporter_GetNumberOfChannels_85E4C5D5", this->fpImageDataImporter_GetNumberOfChannels);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_GetBitsPerPixel>( hLib , "CAPI_ImageDataImporter_GetBitsPerPixel_85E4C5D5", this->fpImageDataImporter_GetBitsPerPixel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_GetImageFileFormat>( hLib , "CAPI_ImageDataImporter_GetImageFileFormat_56CAEA8F", this->fpImageDataImporter_GetImageFileFormat);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_RunImport>( hLib , "CAPI_ImageDataImporter_RunImport_C92E1C4A", this->fpImageDataImporter_RunImport);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataImporter_Clear>( hLib , "CAPI_ImageDataImporter_Clear_69A03065", this->fpImageDataImporter_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageMeshData_GetMappedGeometriesCount>( hLib , "CAPI_MappingImageMeshData_GetMappedGeometriesCount_85E4C5D5", this->fpMappingImageMeshData_GetMappedGeometriesCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageMeshData_GetStartTriangleIdOfGeometry>( hLib , "CAPI_MappingImageMeshData_GetStartTriangleIdOfGeometry_72AAA9DE", this->fpMappingImageMeshData_GetStartTriangleIdOfGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageMeshData_GetScenePathOfGeometry>( hLib , "CAPI_MappingImageMeshData_GetScenePathOfGeometry_6A043423", this->fpMappingImageMeshData_GetScenePathOfGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageMeshData_GetNodeGuidOfGeometry>( hLib , "CAPI_MappingImageMeshData_GetNodeGuidOfGeometry_6A043423", this->fpMappingImageMeshData_GetNodeGuidOfGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_MappingImageMeshData_Clear>( hLib , "CAPI_MappingImageMeshData_Clear_69A03065", this->fpMappingImageMeshData_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingNode_GetParameterCount>( hLib , "CAPI_ShadingNode_GetParameterCount_85E4C5D5", this->fpShadingNode_GetParameterCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingNode_GetParameterName>( hLib , "CAPI_ShadingNode_GetParameterName_6A043423", this->fpShadingNode_GetParameterName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingNode_SetDefaultParameter>( hLib , "CAPI_ShadingNode_SetDefaultParameter_DA5F0BC0", this->fpShadingNode_SetDefaultParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingNode_GetDefaultParameterRed>( hLib , "CAPI_ShadingNode_GetDefaultParameterRed_5D91432D", this->fpShadingNode_GetDefaultParameterRed);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingNode_GetDefaultParameterGreen>( hLib , "CAPI_ShadingNode_GetDefaultParameterGreen_5D91432D", this->fpShadingNode_GetDefaultParameterGreen);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingNode_GetDefaultParameterBlue>( hLib , "CAPI_ShadingNode_GetDefaultParameterBlue_5D91432D", this->fpShadingNode_GetDefaultParameterBlue);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingNode_GetDefaultParameterAlpha>( hLib , "CAPI_ShadingNode_GetDefaultParameterAlpha_5D91432D", this->fpShadingNode_GetDefaultParameterAlpha);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingFilterNode_SetInput>( hLib , "CAPI_ShadingFilterNode_SetInput_E5F6D04C", this->fpShadingFilterNode_SetInput);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingFilterNode_GetInput>( hLib , "CAPI_ShadingFilterNode_GetInput_0351D2F0", this->fpShadingFilterNode_GetInput);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingFilterNode_GetParameterIsInputable>( hLib , "CAPI_ShadingFilterNode_GetParameterIsInputable_E8D7601F", this->fpShadingFilterNode_GetParameterIsInputable);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingTextureNode>( hLib , "CAPI_CreateShadingTextureNode", this->fpCreateShadingTextureNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetTextureName>( hLib , "CAPI_ShadingTextureNode_SetTextureName_DFAFD8F8", this->fpShadingTextureNode_SetTextureName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetTextureName>( hLib , "CAPI_ShadingTextureNode_GetTextureName_CCBB74AB", this->fpShadingTextureNode_GetTextureName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetTexCoordName>( hLib , "CAPI_ShadingTextureNode_SetTexCoordName_DFAFD8F8", this->fpShadingTextureNode_SetTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetTexCoordName>( hLib , "CAPI_ShadingTextureNode_GetTexCoordName_CCBB74AB", this->fpShadingTextureNode_GetTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetTexCoordLevel>( hLib , "CAPI_ShadingTextureNode_SetTexCoordLevel_EAB11672", this->fpShadingTextureNode_SetTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetTexCoordLevel>( hLib , "CAPI_ShadingTextureNode_GetTexCoordLevel_A8209622", this->fpShadingTextureNode_GetTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetUseSRGB>( hLib , "CAPI_ShadingTextureNode_SetUseSRGB_8E8FF636", this->fpShadingTextureNode_SetUseSRGB);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetUseSRGB>( hLib , "CAPI_ShadingTextureNode_GetUseSRGB_C92E1C4A", this->fpShadingTextureNode_GetUseSRGB);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetTileU>( hLib , "CAPI_ShadingTextureNode_SetTileU_74B7D40A", this->fpShadingTextureNode_SetTileU);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetTileU>( hLib , "CAPI_ShadingTextureNode_GetTileU_D67B6715", this->fpShadingTextureNode_GetTileU);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetTileV>( hLib , "CAPI_ShadingTextureNode_SetTileV_74B7D40A", this->fpShadingTextureNode_SetTileV);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetTileV>( hLib , "CAPI_ShadingTextureNode_GetTileV_D67B6715", this->fpShadingTextureNode_GetTileV);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetOffsetU>( hLib , "CAPI_ShadingTextureNode_SetOffsetU_74B7D40A", this->fpShadingTextureNode_SetOffsetU);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetOffsetU>( hLib , "CAPI_ShadingTextureNode_GetOffsetU_D67B6715", this->fpShadingTextureNode_GetOffsetU);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetOffsetV>( hLib , "CAPI_ShadingTextureNode_SetOffsetV_74B7D40A", this->fpShadingTextureNode_SetOffsetV);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetOffsetV>( hLib , "CAPI_ShadingTextureNode_GetOffsetV_D67B6715", this->fpShadingTextureNode_GetOffsetV);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetTextureWrapMode>( hLib , "CAPI_ShadingTextureNode_SetTextureWrapMode_A72CDE9C", this->fpShadingTextureNode_SetTextureWrapMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetTextureWrapMode>( hLib , "CAPI_ShadingTextureNode_GetTextureWrapMode_022CB850", this->fpShadingTextureNode_GetTextureWrapMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetTextureWrapModeU>( hLib , "CAPI_ShadingTextureNode_SetTextureWrapModeU_A72CDE9C", this->fpShadingTextureNode_SetTextureWrapModeU);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetTextureWrapModeU>( hLib , "CAPI_ShadingTextureNode_GetTextureWrapModeU_022CB850", this->fpShadingTextureNode_GetTextureWrapModeU);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetTextureWrapModeV>( hLib , "CAPI_ShadingTextureNode_SetTextureWrapModeV_A72CDE9C", this->fpShadingTextureNode_SetTextureWrapModeV);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetTextureWrapModeV>( hLib , "CAPI_ShadingTextureNode_GetTextureWrapModeV_022CB850", this->fpShadingTextureNode_GetTextureWrapModeV);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_SetRotation>( hLib , "CAPI_ShadingTextureNode_SetRotation_74B7D40A", this->fpShadingTextureNode_SetRotation);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingTextureNode_GetRotation>( hLib , "CAPI_ShadingTextureNode_GetRotation_D67B6715", this->fpShadingTextureNode_GetRotation);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingSwizzlingNode>( hLib , "CAPI_CreateShadingSwizzlingNode", this->fpCreateShadingSwizzlingNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingSwizzlingNode_SetRedComponent>( hLib , "CAPI_ShadingSwizzlingNode_SetRedComponent_E4EBF20A", this->fpShadingSwizzlingNode_SetRedComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingSwizzlingNode_GetRedComponent>( hLib , "CAPI_ShadingSwizzlingNode_GetRedComponent_85E4C5D5", this->fpShadingSwizzlingNode_GetRedComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingSwizzlingNode_SetGreenComponent>( hLib , "CAPI_ShadingSwizzlingNode_SetGreenComponent_E4EBF20A", this->fpShadingSwizzlingNode_SetGreenComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingSwizzlingNode_GetGreenComponent>( hLib , "CAPI_ShadingSwizzlingNode_GetGreenComponent_85E4C5D5", this->fpShadingSwizzlingNode_GetGreenComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingSwizzlingNode_SetBlueComponent>( hLib , "CAPI_ShadingSwizzlingNode_SetBlueComponent_E4EBF20A", this->fpShadingSwizzlingNode_SetBlueComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingSwizzlingNode_GetBlueComponent>( hLib , "CAPI_ShadingSwizzlingNode_GetBlueComponent_85E4C5D5", this->fpShadingSwizzlingNode_GetBlueComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingSwizzlingNode_SetAlphaComponent>( hLib , "CAPI_ShadingSwizzlingNode_SetAlphaComponent_E4EBF20A", this->fpShadingSwizzlingNode_SetAlphaComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingSwizzlingNode_GetAlphaComponent>( hLib , "CAPI_ShadingSwizzlingNode_GetAlphaComponent_85E4C5D5", this->fpShadingSwizzlingNode_GetAlphaComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingColorNode>( hLib , "CAPI_CreateShadingColorNode", this->fpCreateShadingColorNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingColorNode_SetColor>( hLib , "CAPI_ShadingColorNode_SetColor_8C824797", this->fpShadingColorNode_SetColor);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingAddNode>( hLib , "CAPI_CreateShadingAddNode", this->fpCreateShadingAddNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingSubtractNode>( hLib , "CAPI_CreateShadingSubtractNode", this->fpCreateShadingSubtractNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingMultiplyNode>( hLib , "CAPI_CreateShadingMultiplyNode", this->fpCreateShadingMultiplyNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingColorCorrectionNode>( hLib , "CAPI_CreateShadingColorCorrectionNode", this->fpCreateShadingColorCorrectionNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingPowNode>( hLib , "CAPI_CreateShadingPowNode", this->fpCreateShadingPowNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingDivideNode>( hLib , "CAPI_CreateShadingDivideNode", this->fpCreateShadingDivideNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingClampNode>( hLib , "CAPI_CreateShadingClampNode", this->fpCreateShadingClampNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingMaxNode>( hLib , "CAPI_CreateShadingMaxNode", this->fpCreateShadingMaxNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingMinNode>( hLib , "CAPI_CreateShadingMinNode", this->fpCreateShadingMinNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingStepNode>( hLib , "CAPI_CreateShadingStepNode", this->fpCreateShadingStepNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingEqualNode>( hLib , "CAPI_CreateShadingEqualNode", this->fpCreateShadingEqualNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingNotEqualNode>( hLib , "CAPI_CreateShadingNotEqualNode", this->fpCreateShadingNotEqualNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingVertexColorNode>( hLib , "CAPI_CreateShadingVertexColorNode", this->fpCreateShadingVertexColorNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingVertexColorNode_SetVertexColorIndex>( hLib , "CAPI_ShadingVertexColorNode_SetVertexColorIndex_8272B53C", this->fpShadingVertexColorNode_SetVertexColorIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingVertexColorNode_GetVertexColorIndex>( hLib , "CAPI_ShadingVertexColorNode_GetVertexColorIndex_CDBA2BD0", this->fpShadingVertexColorNode_GetVertexColorIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingVertexColorNode_SetVertexColorSet>( hLib , "CAPI_ShadingVertexColorNode_SetVertexColorSet_DFAFD8F8", this->fpShadingVertexColorNode_SetVertexColorSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingVertexColorNode_GetVertexColorSet>( hLib , "CAPI_ShadingVertexColorNode_GetVertexColorSet_CCBB74AB", this->fpShadingVertexColorNode_GetVertexColorSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingInterpolateNode>( hLib , "CAPI_CreateShadingInterpolateNode", this->fpCreateShadingInterpolateNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingCustomNode>( hLib , "CAPI_CreateShadingCustomNode", this->fpCreateShadingCustomNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingCustomNode_SetInputCount>( hLib , "CAPI_ShadingCustomNode_SetInputCount_E4EBF20A", this->fpShadingCustomNode_SetInputCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingCustomNode_GetInputCount>( hLib , "CAPI_ShadingCustomNode_GetInputCount_85E4C5D5", this->fpShadingCustomNode_GetInputCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingCustomNode_GetInputValue>( hLib , "CAPI_ShadingCustomNode_GetInputValue_A8C825D9", this->fpShadingCustomNode_GetInputValue);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingCustomNode_SetCustomShaderCode>( hLib , "CAPI_ShadingCustomNode_SetCustomShaderCode_DFAFD8F8", this->fpShadingCustomNode_SetCustomShaderCode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingLayeredBlendNode>( hLib , "CAPI_CreateShadingLayeredBlendNode", this->fpCreateShadingLayeredBlendNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingLayeredBlendNode_SetInputCount>( hLib , "CAPI_ShadingLayeredBlendNode_SetInputCount_E4EBF20A", this->fpShadingLayeredBlendNode_SetInputCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingLayeredBlendNode_GetInputCount>( hLib , "CAPI_ShadingLayeredBlendNode_GetInputCount_85E4C5D5", this->fpShadingLayeredBlendNode_GetInputCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingLayeredBlendNode_SetPerInputBlendType>( hLib , "CAPI_ShadingLayeredBlendNode_SetPerInputBlendType_3F64A8D1", this->fpShadingLayeredBlendNode_SetPerInputBlendType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingLayeredBlendNode_GetPerInputBlendType>( hLib , "CAPI_ShadingLayeredBlendNode_GetPerInputBlendType_91CA31FA", this->fpShadingLayeredBlendNode_GetPerInputBlendType);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingNormalize3Node>( hLib , "CAPI_CreateShadingNormalize3Node", this->fpCreateShadingNormalize3Node);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingSqrtNode>( hLib , "CAPI_CreateShadingSqrtNode", this->fpCreateShadingSqrtNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingDot3Node>( hLib , "CAPI_CreateShadingDot3Node", this->fpCreateShadingDot3Node);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingCross3Node>( hLib , "CAPI_CreateShadingCross3Node", this->fpCreateShadingCross3Node);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingCosNode>( hLib , "CAPI_CreateShadingCosNode", this->fpCreateShadingCosNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingSinNode>( hLib , "CAPI_CreateShadingSinNode", this->fpCreateShadingSinNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingGreaterThanNode>( hLib , "CAPI_CreateShadingGreaterThanNode", this->fpCreateShadingGreaterThanNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingLessThanNode>( hLib , "CAPI_CreateShadingLessThanNode", this->fpCreateShadingLessThanNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShadingGeometryFieldNode>( hLib , "CAPI_CreateShadingGeometryFieldNode", this->fpCreateShadingGeometryFieldNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingGeometryFieldNode_SetFieldType>( hLib , "CAPI_ShadingGeometryFieldNode_SetFieldType_8272B53C", this->fpShadingGeometryFieldNode_SetFieldType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingGeometryFieldNode_GetFieldType>( hLib , "CAPI_ShadingGeometryFieldNode_GetFieldType_0E146551", this->fpShadingGeometryFieldNode_GetFieldType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingGeometryFieldNode_SetFieldIndex>( hLib , "CAPI_ShadingGeometryFieldNode_SetFieldIndex_8272B53C", this->fpShadingGeometryFieldNode_SetFieldIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingGeometryFieldNode_GetFieldIndex>( hLib , "CAPI_ShadingGeometryFieldNode_GetFieldIndex_CDBA2BD0", this->fpShadingGeometryFieldNode_GetFieldIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingGeometryFieldNode_SetFieldName>( hLib , "CAPI_ShadingGeometryFieldNode_SetFieldName_DFAFD8F8", this->fpShadingGeometryFieldNode_SetFieldName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShadingGeometryFieldNode_GetFieldName>( hLib , "CAPI_ShadingGeometryFieldNode_GetFieldName_CCBB74AB", this->fpShadingGeometryFieldNode_GetFieldName);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateShaderGenerator>( hLib , "CAPI_CreateShaderGenerator", this->fpCreateShaderGenerator);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_SetMaterial>( hLib , "CAPI_ShaderGenerator_SetMaterial_738A6D2B", this->fpShaderGenerator_SetMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetMaterial>( hLib , "CAPI_ShaderGenerator_GetMaterial_1BF6853F", this->fpShaderGenerator_GetMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_SetIdentifersPrefix>( hLib , "CAPI_ShaderGenerator_SetIdentifersPrefix_DFAFD8F8", this->fpShaderGenerator_SetIdentifersPrefix);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetIdentifersPrefix>( hLib , "CAPI_ShaderGenerator_GetIdentifersPrefix_CCBB74AB", this->fpShaderGenerator_GetIdentifersPrefix);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_SetGenerateFullShader>( hLib , "CAPI_ShaderGenerator_SetGenerateFullShader_8E8FF636", this->fpShaderGenerator_SetGenerateFullShader);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetGenerateFullShader>( hLib , "CAPI_ShaderGenerator_GetGenerateFullShader_C92E1C4A", this->fpShaderGenerator_GetGenerateFullShader);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_SetGenerateTextureSamplerData>( hLib , "CAPI_ShaderGenerator_SetGenerateTextureSamplerData_8E8FF636", this->fpShaderGenerator_SetGenerateTextureSamplerData);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetGenerateTextureSamplerData>( hLib , "CAPI_ShaderGenerator_GetGenerateTextureSamplerData_C92E1C4A", this->fpShaderGenerator_GetGenerateTextureSamplerData);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GenerateShaderData>( hLib , "CAPI_ShaderGenerator_GenerateShaderData_C92E1C4A", this->fpShaderGenerator_GenerateShaderData);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetHLSLCode>( hLib , "CAPI_ShaderGenerator_GetHLSLCode_CCBB74AB", this->fpShaderGenerator_GetHLSLCode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetGLSLVertexCode>( hLib , "CAPI_ShaderGenerator_GetGLSLVertexCode_CCBB74AB", this->fpShaderGenerator_GetGLSLVertexCode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetGLSLFragmentCode>( hLib , "CAPI_ShaderGenerator_GetGLSLFragmentCode_CCBB74AB", this->fpShaderGenerator_GetGLSLFragmentCode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetShaderInputTexturePathsCount>( hLib , "CAPI_ShaderGenerator_GetShaderInputTexturePathsCount_85E4C5D5", this->fpShaderGenerator_GetShaderInputTexturePathsCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetShaderInputTexturePath>( hLib , "CAPI_ShaderGenerator_GetShaderInputTexturePath_6A043423", this->fpShaderGenerator_GetShaderInputTexturePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetShaderInputUVSetsCount>( hLib , "CAPI_ShaderGenerator_GetShaderInputUVSetsCount_85E4C5D5", this->fpShaderGenerator_GetShaderInputUVSetsCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetShaderInputUVSet>( hLib , "CAPI_ShaderGenerator_GetShaderInputUVSet_6A043423", this->fpShaderGenerator_GetShaderInputUVSet);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetShaderInputUVIndex>( hLib , "CAPI_ShaderGenerator_GetShaderInputUVIndex_9B49F2EF", this->fpShaderGenerator_GetShaderInputUVIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetShaderInputVertexColorsCount>( hLib , "CAPI_ShaderGenerator_GetShaderInputVertexColorsCount_85E4C5D5", this->fpShaderGenerator_GetShaderInputVertexColorsCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetShaderInputVertexColor>( hLib , "CAPI_ShaderGenerator_GetShaderInputVertexColor_6A043423", this->fpShaderGenerator_GetShaderInputVertexColor);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_GetShaderInputVertexColorsIndex>( hLib , "CAPI_ShaderGenerator_GetShaderInputVertexColorsIndex_9B49F2EF", this->fpShaderGenerator_GetShaderInputVertexColorsIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ShaderGenerator_UnloadData>( hLib , "CAPI_ShaderGenerator_UnloadData_69A03065", this->fpShaderGenerator_UnloadData);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateAggregationProcessor>( hLib , "CAPI_CreateAggregationProcessor", this->fpCreateAggregationProcessor);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationProcessor_SetScene>( hLib , "CAPI_AggregationProcessor_SetScene_738A6D2B", this->fpAggregationProcessor_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationProcessor_GetScene>( hLib , "CAPI_AggregationProcessor_GetScene_262BA3D9", this->fpAggregationProcessor_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationProcessor_GetMappingImage>( hLib , "CAPI_AggregationProcessor_GetMappingImage_6CA50B0A", this->fpAggregationProcessor_GetMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationProcessor_GetMappingImageForImageIndex>( hLib , "CAPI_AggregationProcessor_GetMappingImageForImageIndex_5E68A9B2", this->fpAggregationProcessor_GetMappingImageForImageIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationProcessor_GetAggregationSettings>( hLib , "CAPI_AggregationProcessor_GetAggregationSettings_4A1DF691", this->fpAggregationProcessor_GetAggregationSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationProcessor_GetMappingImageSettings>( hLib , "CAPI_AggregationProcessor_GetMappingImageSettings_7D4F09F4", this->fpAggregationProcessor_GetMappingImageSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationProcessor_GetVisibilitySettings>( hLib , "CAPI_AggregationProcessor_GetVisibilitySettings_A66EAE96", this->fpAggregationProcessor_GetVisibilitySettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationProcessor_GetGeometryCullingSettings>( hLib , "CAPI_AggregationProcessor_GetGeometryCullingSettings_9A4013D2", this->fpAggregationProcessor_GetGeometryCullingSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationProcessor_GetVertexWeightSettings>( hLib , "CAPI_AggregationProcessor_GetVertexWeightSettings_C9DC5849", this->fpAggregationProcessor_GetVertexWeightSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateAggregationSettings>( hLib , "CAPI_CreateAggregationSettings", this->fpCreateAggregationSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_SetProcessSelectionSetID>( hLib , "CAPI_AggregationSettings_SetProcessSelectionSetID_8272B53C", this->fpAggregationSettings_SetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_GetProcessSelectionSetID>( hLib , "CAPI_AggregationSettings_GetProcessSelectionSetID_CDBA2BD0", this->fpAggregationSettings_GetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_SetProcessSelectionSetName>( hLib , "CAPI_AggregationSettings_SetProcessSelectionSetName_DFAFD8F8", this->fpAggregationSettings_SetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_GetProcessSelectionSetName>( hLib , "CAPI_AggregationSettings_GetProcessSelectionSetName_CCBB74AB", this->fpAggregationSettings_GetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_SetKeepUnprocessedSceneMeshes>( hLib , "CAPI_AggregationSettings_SetKeepUnprocessedSceneMeshes_8E8FF636", this->fpAggregationSettings_SetKeepUnprocessedSceneMeshes);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_GetKeepUnprocessedSceneMeshes>( hLib , "CAPI_AggregationSettings_GetKeepUnprocessedSceneMeshes_C92E1C4A", this->fpAggregationSettings_GetKeepUnprocessedSceneMeshes);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_SetMergeGeometries>( hLib , "CAPI_AggregationSettings_SetMergeGeometries_8E8FF636", this->fpAggregationSettings_SetMergeGeometries);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_GetMergeGeometries>( hLib , "CAPI_AggregationSettings_GetMergeGeometries_C92E1C4A", this->fpAggregationSettings_GetMergeGeometries);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_SetEnableGeometryCulling>( hLib , "CAPI_AggregationSettings_SetEnableGeometryCulling_8E8FF636", this->fpAggregationSettings_SetEnableGeometryCulling);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_GetEnableGeometryCulling>( hLib , "CAPI_AggregationSettings_GetEnableGeometryCulling_C92E1C4A", this->fpAggregationSettings_GetEnableGeometryCulling);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_SetGeometryCullingPrecision>( hLib , "CAPI_AggregationSettings_SetGeometryCullingPrecision_74B7D40A", this->fpAggregationSettings_SetGeometryCullingPrecision);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_GetGeometryCullingPrecision>( hLib , "CAPI_AggregationSettings_GetGeometryCullingPrecision_D67B6715", this->fpAggregationSettings_GetGeometryCullingPrecision);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_SetSubdivideGeometryBasedOnUVTiles>( hLib , "CAPI_AggregationSettings_SetSubdivideGeometryBasedOnUVTiles_8E8FF636", this->fpAggregationSettings_SetSubdivideGeometryBasedOnUVTiles);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_GetSubdivideGeometryBasedOnUVTiles>( hLib , "CAPI_AggregationSettings_GetSubdivideGeometryBasedOnUVTiles_C92E1C4A", this->fpAggregationSettings_GetSubdivideGeometryBasedOnUVTiles);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_SetSubdivisionTileSize>( hLib , "CAPI_AggregationSettings_SetSubdivisionTileSize_E4EBF20A", this->fpAggregationSettings_SetSubdivisionTileSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationSettings_GetSubdivisionTileSize>( hLib , "CAPI_AggregationSettings_GetSubdivisionTileSize_85E4C5D5", this->fpAggregationSettings_GetSubdivisionTileSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateChartAggregator>( hLib , "CAPI_CreateChartAggregator", this->fpCreateChartAggregator);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_Parameterize>( hLib , "CAPI_ChartAggregator_Parameterize_F0E04A10", this->fpChartAggregator_Parameterize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetInputMaterialCount>( hLib , "CAPI_ChartAggregator_SetInputMaterialCount_E4EBF20A", this->fpChartAggregator_SetInputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetInputMaterialCount>( hLib , "CAPI_ChartAggregator_GetInputMaterialCount_85E4C5D5", this->fpChartAggregator_GetInputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetOutputMaterialCount>( hLib , "CAPI_ChartAggregator_SetOutputMaterialCount_E4EBF20A", this->fpChartAggregator_SetOutputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetOutputMaterialCount>( hLib , "CAPI_ChartAggregator_GetOutputMaterialCount_85E4C5D5", this->fpChartAggregator_GetOutputMaterialCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetInputOutputMaterialMapping>( hLib , "CAPI_ChartAggregator_SetInputOutputMaterialMapping_FCBA3B48", this->fpChartAggregator_SetInputOutputMaterialMapping);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetInputOutputMaterialMapping>( hLib , "CAPI_ChartAggregator_GetInputOutputMaterialMapping_09DA76B4", this->fpChartAggregator_GetInputOutputMaterialMapping);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetTextureWidth>( hLib , "CAPI_ChartAggregator_SetTextureWidth_E4EBF20A", this->fpChartAggregator_SetTextureWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetTextureWidth>( hLib , "CAPI_ChartAggregator_GetTextureWidth_85E4C5D5", this->fpChartAggregator_GetTextureWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetTextureWidthForMaterialIndex>( hLib , "CAPI_ChartAggregator_SetTextureWidthForMaterialIndex_DA3B08AB", this->fpChartAggregator_SetTextureWidthForMaterialIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetTextureWidthForMaterialIndex>( hLib , "CAPI_ChartAggregator_GetTextureWidthForMaterialIndex_227FE0CD", this->fpChartAggregator_GetTextureWidthForMaterialIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetTextureHeight>( hLib , "CAPI_ChartAggregator_SetTextureHeight_E4EBF20A", this->fpChartAggregator_SetTextureHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetTextureHeight>( hLib , "CAPI_ChartAggregator_GetTextureHeight_85E4C5D5", this->fpChartAggregator_GetTextureHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetTextureHeightForMaterialIndex>( hLib , "CAPI_ChartAggregator_SetTextureHeightForMaterialIndex_DA3B08AB", this->fpChartAggregator_SetTextureHeightForMaterialIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetTextureHeightForMaterialIndex>( hLib , "CAPI_ChartAggregator_GetTextureHeightForMaterialIndex_227FE0CD", this->fpChartAggregator_GetTextureHeightForMaterialIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetGutterSpace>( hLib , "CAPI_ChartAggregator_SetGutterSpace_E4EBF20A", this->fpChartAggregator_SetGutterSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetGutterSpace>( hLib , "CAPI_ChartAggregator_GetGutterSpace_85E4C5D5", this->fpChartAggregator_GetGutterSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetGutterSpaceForMaterialIndex>( hLib , "CAPI_ChartAggregator_SetGutterSpaceForMaterialIndex_DA3B08AB", this->fpChartAggregator_SetGutterSpaceForMaterialIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetGutterSpaceForMaterialIndex>( hLib , "CAPI_ChartAggregator_GetGutterSpaceForMaterialIndex_227FE0CD", this->fpChartAggregator_GetGutterSpaceForMaterialIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetUseAutomaticTextureSize>( hLib , "CAPI_ChartAggregator_SetUseAutomaticTextureSize_8E8FF636", this->fpChartAggregator_SetUseAutomaticTextureSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetUseAutomaticTextureSize>( hLib , "CAPI_ChartAggregator_GetUseAutomaticTextureSize_C92E1C4A", this->fpChartAggregator_GetUseAutomaticTextureSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetAutomaticTextureSizeMultiplier>( hLib , "CAPI_ChartAggregator_SetAutomaticTextureSizeMultiplier_74B7D40A", this->fpChartAggregator_SetAutomaticTextureSizeMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetAutomaticTextureSizeMultiplier>( hLib , "CAPI_ChartAggregator_GetAutomaticTextureSizeMultiplier_D67B6715", this->fpChartAggregator_GetAutomaticTextureSizeMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetForcePower2Texture>( hLib , "CAPI_ChartAggregator_SetForcePower2Texture_8E8FF636", this->fpChartAggregator_SetForcePower2Texture);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetForcePower2Texture>( hLib , "CAPI_ChartAggregator_GetForcePower2Texture_C92E1C4A", this->fpChartAggregator_GetForcePower2Texture);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetTexCoordLevel>( hLib , "CAPI_ChartAggregator_SetTexCoordLevel_E4EBF20A", this->fpChartAggregator_SetTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetTexCoordLevel>( hLib , "CAPI_ChartAggregator_GetTexCoordLevel_85E4C5D5", this->fpChartAggregator_GetTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetTexCoordName>( hLib , "CAPI_ChartAggregator_SetTexCoordName_DFAFD8F8", this->fpChartAggregator_SetTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetTexCoordName>( hLib , "CAPI_ChartAggregator_GetTexCoordName_CCBB74AB", this->fpChartAggregator_GetTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetChartAggregatorMode>( hLib , "CAPI_ChartAggregator_SetChartAggregatorMode_E3C9E21F", this->fpChartAggregator_SetChartAggregatorMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetChartAggregatorMode>( hLib , "CAPI_ChartAggregator_GetChartAggregatorMode_4C273A13", this->fpChartAggregator_GetChartAggregatorMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetSurfaceAreaScale>( hLib , "CAPI_ChartAggregator_SetSurfaceAreaScale_3C24E37C", this->fpChartAggregator_SetSurfaceAreaScale);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetSurfaceAreaScale>( hLib , "CAPI_ChartAggregator_GetSurfaceAreaScale_6653C2F4", this->fpChartAggregator_GetSurfaceAreaScale);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetSeparateOverlappingCharts>( hLib , "CAPI_ChartAggregator_SetSeparateOverlappingCharts_8E8FF636", this->fpChartAggregator_SetSeparateOverlappingCharts);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetMaterialTable>( hLib , "CAPI_ChartAggregator_SetMaterialTable_738A6D2B", this->fpChartAggregator_SetMaterialTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetTextureTable>( hLib , "CAPI_ChartAggregator_SetTextureTable_738A6D2B", this->fpChartAggregator_SetTextureTable);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetKeepOriginalChartSizesTextureWidth>( hLib , "CAPI_ChartAggregator_GetKeepOriginalChartSizesTextureWidth_85E4C5D5", this->fpChartAggregator_GetKeepOriginalChartSizesTextureWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetKeepOriginalChartSizesTextureWidthForMaterialIndex>( hLib , "CAPI_ChartAggregator_GetKeepOriginalChartSizesTextureWidthForMaterialIndex_227FE0CD", this->fpChartAggregator_GetKeepOriginalChartSizesTextureWidthForMaterialIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetKeepOriginalChartSizesTextureHeight>( hLib , "CAPI_ChartAggregator_GetKeepOriginalChartSizesTextureHeight_85E4C5D5", this->fpChartAggregator_GetKeepOriginalChartSizesTextureHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetKeepOriginalChartSizesTextureHeightForMaterialIndex>( hLib , "CAPI_ChartAggregator_GetKeepOriginalChartSizesTextureHeightForMaterialIndex_227FE0CD", this->fpChartAggregator_GetKeepOriginalChartSizesTextureHeightForMaterialIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetOriginalChartProportionsChannel>( hLib , "CAPI_ChartAggregator_SetOriginalChartProportionsChannel_DFAFD8F8", this->fpChartAggregator_SetOriginalChartProportionsChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetOriginalChartProportionsChannel>( hLib , "CAPI_ChartAggregator_GetOriginalChartProportionsChannel_CCBB74AB", this->fpChartAggregator_GetOriginalChartProportionsChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetUseVertexWeights>( hLib , "CAPI_ChartAggregator_SetUseVertexWeights_8E8FF636", this->fpChartAggregator_SetUseVertexWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetUseVertexWeights>( hLib , "CAPI_ChartAggregator_GetUseVertexWeights_C92E1C4A", this->fpChartAggregator_GetUseVertexWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetLockUVRotation>( hLib , "CAPI_ChartAggregator_SetLockUVRotation_8E8FF636", this->fpChartAggregator_SetLockUVRotation);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetLockUVRotation>( hLib , "CAPI_ChartAggregator_GetLockUVRotation_C92E1C4A", this->fpChartAggregator_GetLockUVRotation);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_SetExpandZeroAreaUVs>( hLib , "CAPI_ChartAggregator_SetExpandZeroAreaUVs_8E8FF636", this->fpChartAggregator_SetExpandZeroAreaUVs);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregator_GetExpandZeroAreaUVs>( hLib , "CAPI_ChartAggregator_GetExpandZeroAreaUVs_C92E1C4A", this->fpChartAggregator_GetExpandZeroAreaUVs);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateVertexColorCasterSettings>( hLib , "CAPI_CreateVertexColorCasterSettings", this->fpCreateVertexColorCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexColorCasterSettings_SetOutputColorLevel>( hLib , "CAPI_VertexColorCasterSettings_SetOutputColorLevel_8272B53C", this->fpVertexColorCasterSettings_SetOutputColorLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexColorCasterSettings_GetOutputColorLevel>( hLib , "CAPI_VertexColorCasterSettings_GetOutputColorLevel_CDBA2BD0", this->fpVertexColorCasterSettings_GetOutputColorLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexColorCasterSettings_SetOutputColorName>( hLib , "CAPI_VertexColorCasterSettings_SetOutputColorName_DFAFD8F8", this->fpVertexColorCasterSettings_SetOutputColorName);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexColorCasterSettings_GetOutputColorName>( hLib , "CAPI_VertexColorCasterSettings_GetOutputColorName_CCBB74AB", this->fpVertexColorCasterSettings_GetOutputColorName);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexColorCasterSettings_SetColorSpaceEdgeThreshold>( hLib , "CAPI_VertexColorCasterSettings_SetColorSpaceEdgeThreshold_74B7D40A", this->fpVertexColorCasterSettings_SetColorSpaceEdgeThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexColorCasterSettings_GetColorSpaceEdgeThreshold>( hLib , "CAPI_VertexColorCasterSettings_GetColorSpaceEdgeThreshold_D67B6715", this->fpVertexColorCasterSettings_GetColorSpaceEdgeThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateVertexColorCaster>( hLib , "CAPI_CreateVertexColorCaster", this->fpCreateVertexColorCaster);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexColorCaster_SetScene>( hLib , "CAPI_VertexColorCaster_SetScene_738A6D2B", this->fpVertexColorCaster_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexColorCaster_GetVertexColorCasterSettings>( hLib , "CAPI_VertexColorCaster_GetVertexColorCasterSettings_D96CBE33", this->fpVertexColorCaster_GetVertexColorCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateImageDataExporter>( hLib , "CAPI_CreateImageDataExporter", this->fpCreateImageDataExporter);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataExporter_SetExportFilePath>( hLib , "CAPI_ImageDataExporter_SetExportFilePath_DFAFD8F8", this->fpImageDataExporter_SetExportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataExporter_GetExportFilePath>( hLib , "CAPI_ImageDataExporter_GetExportFilePath_CCBB74AB", this->fpImageDataExporter_GetExportFilePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataExporter_SetImage>( hLib , "CAPI_ImageDataExporter_SetImage_738A6D2B", this->fpImageDataExporter_SetImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataExporter_RunExport>( hLib , "CAPI_ImageDataExporter_RunExport_C92E1C4A", this->fpImageDataExporter_RunExport);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataExporter_SetImageFileFormat>( hLib , "CAPI_ImageDataExporter_SetImageFileFormat_329B2399", this->fpImageDataExporter_SetImageFileFormat);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataExporter_GetImageFileFormat>( hLib , "CAPI_ImageDataExporter_GetImageFileFormat_4F40CAB0", this->fpImageDataExporter_GetImageFileFormat);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataExporter_SetDDSCompressionType>( hLib , "CAPI_ImageDataExporter_SetDDSCompressionType_C04FDE99", this->fpImageDataExporter_SetDDSCompressionType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataExporter_GetDDSCompressionType>( hLib , "CAPI_ImageDataExporter_GetDDSCompressionType_E7D7BB8E", this->fpImageDataExporter_GetDDSCompressionType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageDataExporter_Clear>( hLib , "CAPI_ImageDataExporter_Clear_69A03065", this->fpImageDataExporter_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateAmbientOcclusionCaster>( hLib , "CAPI_CreateAmbientOcclusionCaster", this->fpCreateAmbientOcclusionCaster);
		all_successfully_loaded &= LoadFunctionPointer<FP_AmbientOcclusionCaster_SetAdditionalSourceScene>( hLib , "CAPI_AmbientOcclusionCaster_SetAdditionalSourceScene_738A6D2B", this->fpAmbientOcclusionCaster_SetAdditionalSourceScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_AmbientOcclusionCaster_GetAmbientOcclusionCasterSettings>( hLib , "CAPI_AmbientOcclusionCaster_GetAmbientOcclusionCasterSettings_C918ED31", this->fpAmbientOcclusionCaster_GetAmbientOcclusionCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateAmbientOcclusionCasterSettings>( hLib , "CAPI_CreateAmbientOcclusionCasterSettings", this->fpCreateAmbientOcclusionCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_AmbientOcclusionCasterSettings_SetRaysPerPixel>( hLib , "CAPI_AmbientOcclusionCasterSettings_SetRaysPerPixel_E4EBF20A", this->fpAmbientOcclusionCasterSettings_SetRaysPerPixel);
		all_successfully_loaded &= LoadFunctionPointer<FP_AmbientOcclusionCasterSettings_GetRaysPerPixel>( hLib , "CAPI_AmbientOcclusionCasterSettings_GetRaysPerPixel_85E4C5D5", this->fpAmbientOcclusionCasterSettings_GetRaysPerPixel);
		all_successfully_loaded &= LoadFunctionPointer<FP_AmbientOcclusionCasterSettings_SetOcclusionFalloff>( hLib , "CAPI_AmbientOcclusionCasterSettings_SetOcclusionFalloff_74B7D40A", this->fpAmbientOcclusionCasterSettings_SetOcclusionFalloff);
		all_successfully_loaded &= LoadFunctionPointer<FP_AmbientOcclusionCasterSettings_GetOcclusionFalloff>( hLib , "CAPI_AmbientOcclusionCasterSettings_GetOcclusionFalloff_D67B6715", this->fpAmbientOcclusionCasterSettings_GetOcclusionFalloff);
		all_successfully_loaded &= LoadFunctionPointer<FP_AmbientOcclusionCasterSettings_SetOcclusionMultiplier>( hLib , "CAPI_AmbientOcclusionCasterSettings_SetOcclusionMultiplier_74B7D40A", this->fpAmbientOcclusionCasterSettings_SetOcclusionMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_AmbientOcclusionCasterSettings_GetOcclusionMultiplier>( hLib , "CAPI_AmbientOcclusionCasterSettings_GetOcclusionMultiplier_D67B6715", this->fpAmbientOcclusionCasterSettings_GetOcclusionMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_AmbientOcclusionCasterSettings_SetUseSimpleOcclusionMode>( hLib , "CAPI_AmbientOcclusionCasterSettings_SetUseSimpleOcclusionMode_8E8FF636", this->fpAmbientOcclusionCasterSettings_SetUseSimpleOcclusionMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_AmbientOcclusionCasterSettings_GetUseSimpleOcclusionMode>( hLib , "CAPI_AmbientOcclusionCasterSettings_GetUseSimpleOcclusionMode_C92E1C4A", this->fpAmbientOcclusionCasterSettings_GetUseSimpleOcclusionMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateImpostorProcessor>( hLib , "CAPI_CreateImpostorProcessor", this->fpCreateImpostorProcessor);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorProcessor_SetScene>( hLib , "CAPI_ImpostorProcessor_SetScene_738A6D2B", this->fpImpostorProcessor_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorProcessor_GetScene>( hLib , "CAPI_ImpostorProcessor_GetScene_262BA3D9", this->fpImpostorProcessor_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorProcessor_GetImpostorSettings>( hLib , "CAPI_ImpostorProcessor_GetImpostorSettings_F70C9327", this->fpImpostorProcessor_GetImpostorSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorProcessor_GetMappingImageSettings>( hLib , "CAPI_ImpostorProcessor_GetMappingImageSettings_7D4F09F4", this->fpImpostorProcessor_GetMappingImageSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorProcessor_GetMappingImage>( hLib , "CAPI_ImpostorProcessor_GetMappingImage_6CA50B0A", this->fpImpostorProcessor_GetMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorProcessor_GetImpostorGeometryFromSingleView>( hLib , "CAPI_ImpostorProcessor_GetImpostorGeometryFromSingleView_1ACA88D6", this->fpImpostorProcessor_GetImpostorGeometryFromSingleView);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorProcessor_GetSingleViewAspectRatio>( hLib , "CAPI_ImpostorProcessor_GetSingleViewAspectRatio_D67B6715", this->fpImpostorProcessor_GetSingleViewAspectRatio);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorProcessor_GetBillboardCloudMaterialId>( hLib , "CAPI_ImpostorProcessor_GetBillboardCloudMaterialId_CDBA2BD0", this->fpImpostorProcessor_GetBillboardCloudMaterialId);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateImpostorSettings>( hLib , "CAPI_CreateImpostorSettings", this->fpCreateImpostorSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorSettings_SetImpostorType>( hLib , "CAPI_ImpostorSettings_SetImpostorType_A980DC9C", this->fpImpostorSettings_SetImpostorType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorSettings_GetImpostorType>( hLib , "CAPI_ImpostorSettings_GetImpostorType_C477327D", this->fpImpostorSettings_GetImpostorType);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorSettings_SetProcessSelectionSetID>( hLib , "CAPI_ImpostorSettings_SetProcessSelectionSetID_8272B53C", this->fpImpostorSettings_SetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorSettings_GetProcessSelectionSetID>( hLib , "CAPI_ImpostorSettings_GetProcessSelectionSetID_CDBA2BD0", this->fpImpostorSettings_GetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorSettings_SetProcessSelectionSetName>( hLib , "CAPI_ImpostorSettings_SetProcessSelectionSetName_DFAFD8F8", this->fpImpostorSettings_SetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorSettings_GetProcessSelectionSetName>( hLib , "CAPI_ImpostorSettings_GetProcessSelectionSetName_CCBB74AB", this->fpImpostorSettings_GetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorSettings_GetBillboardCloudSettings>( hLib , "CAPI_ImpostorSettings_GetBillboardCloudSettings_17915FAF", this->fpImpostorSettings_GetBillboardCloudSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorSettings_GetFlipbookSettings>( hLib , "CAPI_ImpostorSettings_GetFlipbookSettings_4862095E", this->fpImpostorSettings_GetFlipbookSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorSettings_GetImpostorFromSingleViewSettings>( hLib , "CAPI_ImpostorSettings_GetImpostorFromSingleViewSettings_72751C3B", this->fpImpostorSettings_GetImpostorFromSingleViewSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateSurfaceMapper>( hLib , "CAPI_CreateSurfaceMapper", this->fpCreateSurfaceMapper);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_SetSourceScene>( hLib , "CAPI_SurfaceMapper_SetSourceScene_738A6D2B", this->fpSurfaceMapper_SetSourceScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_GetSourceScene>( hLib , "CAPI_SurfaceMapper_GetSourceScene_262BA3D9", this->fpSurfaceMapper_GetSourceScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_SetDestinationScene>( hLib , "CAPI_SurfaceMapper_SetDestinationScene_738A6D2B", this->fpSurfaceMapper_SetDestinationScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_GetDestinationScene>( hLib , "CAPI_SurfaceMapper_GetDestinationScene_262BA3D9", this->fpSurfaceMapper_GetDestinationScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_SetSourceGeometry>( hLib , "CAPI_SurfaceMapper_SetSourceGeometry_738A6D2B", this->fpSurfaceMapper_SetSourceGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_GetSourceGeometry>( hLib , "CAPI_SurfaceMapper_GetSourceGeometry_1ACA88D6", this->fpSurfaceMapper_GetSourceGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_SetDestinationGeometry>( hLib , "CAPI_SurfaceMapper_SetDestinationGeometry_738A6D2B", this->fpSurfaceMapper_SetDestinationGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_GetDestinationGeometry>( hLib , "CAPI_SurfaceMapper_GetDestinationGeometry_1ACA88D6", this->fpSurfaceMapper_GetDestinationGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_GetMappingImageSettings>( hLib , "CAPI_SurfaceMapper_GetMappingImageSettings_7D4F09F4", this->fpSurfaceMapper_GetMappingImageSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_GetMappingImage>( hLib , "CAPI_SurfaceMapper_GetMappingImage_6CA50B0A", this->fpSurfaceMapper_GetMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_SetRecalculateSearchDirection>( hLib , "CAPI_SurfaceMapper_SetRecalculateSearchDirection_8E8FF636", this->fpSurfaceMapper_SetRecalculateSearchDirection);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_GetRecalculateSearchDirection>( hLib , "CAPI_SurfaceMapper_GetRecalculateSearchDirection_C92E1C4A", this->fpSurfaceMapper_GetRecalculateSearchDirection);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_SetSearchDirectionHardEdgeAngle>( hLib , "CAPI_SurfaceMapper_SetSearchDirectionHardEdgeAngle_74B7D40A", this->fpSurfaceMapper_SetSearchDirectionHardEdgeAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_GetSearchDirectionHardEdgeAngle>( hLib , "CAPI_SurfaceMapper_GetSearchDirectionHardEdgeAngle_D67B6715", this->fpSurfaceMapper_GetSearchDirectionHardEdgeAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_SetSearchDistance>( hLib , "CAPI_SurfaceMapper_SetSearchDistance_74B7D40A", this->fpSurfaceMapper_SetSearchDistance);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_GetSearchDistance>( hLib , "CAPI_SurfaceMapper_GetSearchDistance_D67B6715", this->fpSurfaceMapper_GetSearchDistance);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_SetSearchOffset>( hLib , "CAPI_SurfaceMapper_SetSearchOffset_74B7D40A", this->fpSurfaceMapper_SetSearchOffset);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_GetSearchOffset>( hLib , "CAPI_SurfaceMapper_GetSearchOffset_D67B6715", this->fpSurfaceMapper_GetSearchOffset);
		all_successfully_loaded &= LoadFunctionPointer<FP_SurfaceMapper_RunSurfaceMapping>( hLib , "CAPI_SurfaceMapper_RunSurfaceMapping_69A03065", this->fpSurfaceMapper_RunSurfaceMapping);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateOcclusionMeshProcessor>( hLib , "CAPI_CreateOcclusionMeshProcessor", this->fpCreateOcclusionMeshProcessor);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshProcessor_SetScene>( hLib , "CAPI_OcclusionMeshProcessor_SetScene_738A6D2B", this->fpOcclusionMeshProcessor_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshProcessor_GetScene>( hLib , "CAPI_OcclusionMeshProcessor_GetScene_262BA3D9", this->fpOcclusionMeshProcessor_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshProcessor_GetOcclusionMeshSettings>( hLib , "CAPI_OcclusionMeshProcessor_GetOcclusionMeshSettings_918C0A1B", this->fpOcclusionMeshProcessor_GetOcclusionMeshSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_SetOnScreenSize>( hLib , "CAPI_OcclusionMeshSettings_SetOnScreenSize_E4EBF20A", this->fpOcclusionMeshSettings_SetOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_GetOnScreenSize>( hLib , "CAPI_OcclusionMeshSettings_GetOnScreenSize_85E4C5D5", this->fpOcclusionMeshSettings_GetOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_SetOnScreenErrorTolerance>( hLib , "CAPI_OcclusionMeshSettings_SetOnScreenErrorTolerance_E4EBF20A", this->fpOcclusionMeshSettings_SetOnScreenErrorTolerance);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_GetOnScreenErrorTolerance>( hLib , "CAPI_OcclusionMeshSettings_GetOnScreenErrorTolerance_85E4C5D5", this->fpOcclusionMeshSettings_GetOnScreenErrorTolerance);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_SetInvertOutputMesh>( hLib , "CAPI_OcclusionMeshSettings_SetInvertOutputMesh_8E8FF636", this->fpOcclusionMeshSettings_SetInvertOutputMesh);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_GetInvertOutputMesh>( hLib , "CAPI_OcclusionMeshSettings_GetInvertOutputMesh_C92E1C4A", this->fpOcclusionMeshSettings_GetInvertOutputMesh);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_SetTransferSkinning>( hLib , "CAPI_OcclusionMeshSettings_SetTransferSkinning_8E8FF636", this->fpOcclusionMeshSettings_SetTransferSkinning);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_GetTransferSkinning>( hLib , "CAPI_OcclusionMeshSettings_GetTransferSkinning_C92E1C4A", this->fpOcclusionMeshSettings_GetTransferSkinning);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_SetUseCameras>( hLib , "CAPI_OcclusionMeshSettings_SetUseCameras_8E8FF636", this->fpOcclusionMeshSettings_SetUseCameras);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_GetUseCameras>( hLib , "CAPI_OcclusionMeshSettings_GetUseCameras_C92E1C4A", this->fpOcclusionMeshSettings_GetUseCameras);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_SetCameraSelectionSetId>( hLib , "CAPI_OcclusionMeshSettings_SetCameraSelectionSetId_EAB11672", this->fpOcclusionMeshSettings_SetCameraSelectionSetId);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_GetCameraSelectionSetId>( hLib , "CAPI_OcclusionMeshSettings_GetCameraSelectionSetId_A8209622", this->fpOcclusionMeshSettings_GetCameraSelectionSetId);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_SetCameraSelectionSetName>( hLib , "CAPI_OcclusionMeshSettings_SetCameraSelectionSetName_DFAFD8F8", this->fpOcclusionMeshSettings_SetCameraSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_GetCameraSelectionSetName>( hLib , "CAPI_OcclusionMeshSettings_GetCameraSelectionSetName_CCBB74AB", this->fpOcclusionMeshSettings_GetCameraSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_SetOcclusionMode>( hLib , "CAPI_OcclusionMeshSettings_SetOcclusionMode_1464BB6E", this->fpOcclusionMeshSettings_SetOcclusionMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshSettings_GetOcclusionMode>( hLib , "CAPI_OcclusionMeshSettings_GetOcclusionMode_59BA3003", this->fpOcclusionMeshSettings_GetOcclusionMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateImageComparer>( hLib , "CAPI_CreateImageComparer", this->fpCreateImageComparer);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_SetImages>( hLib , "CAPI_ImageComparer_SetImages_21583BDE", this->fpImageComparer_SetImages);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_SetImageMasks>( hLib , "CAPI_ImageComparer_SetImageMasks_21583BDE", this->fpImageComparer_SetImageMasks);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_CompareImages>( hLib , "CAPI_ImageComparer_CompareImages_A8209622", this->fpImageComparer_CompareImages);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_SetImagePathBeforeImg>( hLib , "CAPI_ImageComparer_SetImagePathBeforeImg_DFAFD8F8", this->fpImageComparer_SetImagePathBeforeImg);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_SetImagePathAfterImg>( hLib , "CAPI_ImageComparer_SetImagePathAfterImg_DFAFD8F8", this->fpImageComparer_SetImagePathAfterImg);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_SetImageDiffExportPath>( hLib , "CAPI_ImageComparer_SetImageDiffExportPath_DFAFD8F8", this->fpImageComparer_SetImageDiffExportPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_SetDiffHighlightsExportPath>( hLib , "CAPI_ImageComparer_SetDiffHighlightsExportPath_DFAFD8F8", this->fpImageComparer_SetDiffHighlightsExportPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_GetImageDiff>( hLib , "CAPI_ImageComparer_GetImageDiff_55DD0790", this->fpImageComparer_GetImageDiff);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_GetDiffHighlights>( hLib , "CAPI_ImageComparer_GetDiffHighlights_55DD0790", this->fpImageComparer_GetDiffHighlights);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_GetTotalMaskCoverage>( hLib , "CAPI_ImageComparer_GetTotalMaskCoverage_85E4C5D5", this->fpImageComparer_GetTotalMaskCoverage);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_GetMaxPixelError>( hLib , "CAPI_ImageComparer_GetMaxPixelError_19162B56", this->fpImageComparer_GetMaxPixelError);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_GetTotalPixelError>( hLib , "CAPI_ImageComparer_GetTotalPixelError_19162B56", this->fpImageComparer_GetTotalPixelError);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_GetHighlightAreaCoverage>( hLib , "CAPI_ImageComparer_GetHighlightAreaCoverage_85E4C5D5", this->fpImageComparer_GetHighlightAreaCoverage);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImageComparer_SetSilhouetteDifferenceError>( hLib , "CAPI_ImageComparer_SetSilhouetteDifferenceError_5912A79D", this->fpImageComparer_SetSilhouetteDifferenceError);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateRecommendedTextureSizeCalculator>( hLib , "CAPI_CreateRecommendedTextureSizeCalculator", this->fpCreateRecommendedTextureSizeCalculator);
		all_successfully_loaded &= LoadFunctionPointer<FP_RecommendedTextureSizeCalculator_SetForcePower2Texture>( hLib , "CAPI_RecommendedTextureSizeCalculator_SetForcePower2Texture_8E8FF636", this->fpRecommendedTextureSizeCalculator_SetForcePower2Texture);
		all_successfully_loaded &= LoadFunctionPointer<FP_RecommendedTextureSizeCalculator_GetForcePower2Texture>( hLib , "CAPI_RecommendedTextureSizeCalculator_GetForcePower2Texture_C92E1C4A", this->fpRecommendedTextureSizeCalculator_GetForcePower2Texture);
		all_successfully_loaded &= LoadFunctionPointer<FP_RecommendedTextureSizeCalculator_SetRecommendedTextureSizeMultiplier>( hLib , "CAPI_RecommendedTextureSizeCalculator_SetRecommendedTextureSizeMultiplier_74B7D40A", this->fpRecommendedTextureSizeCalculator_SetRecommendedTextureSizeMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_RecommendedTextureSizeCalculator_GetRecommendedTextureSizeMultiplier>( hLib , "CAPI_RecommendedTextureSizeCalculator_GetRecommendedTextureSizeMultiplier_D67B6715", this->fpRecommendedTextureSizeCalculator_GetRecommendedTextureSizeMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_RecommendedTextureSizeCalculator_GetRecommendedWidth>( hLib , "CAPI_RecommendedTextureSizeCalculator_GetRecommendedWidth_85E4C5D5", this->fpRecommendedTextureSizeCalculator_GetRecommendedWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_RecommendedTextureSizeCalculator_GetRecommendedHeight>( hLib , "CAPI_RecommendedTextureSizeCalculator_GetRecommendedHeight_85E4C5D5", this->fpRecommendedTextureSizeCalculator_GetRecommendedHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_RecommendedTextureSizeCalculator_CalculateBasedOnDeviation>( hLib , "CAPI_RecommendedTextureSizeCalculator_CalculateBasedOnDeviation_EA411FEF", this->fpRecommendedTextureSizeCalculator_CalculateBasedOnDeviation);
		all_successfully_loaded &= LoadFunctionPointer<FP_RecommendedTextureSizeCalculator_CalculateBasedOnOnScreenSize>( hLib , "CAPI_RecommendedTextureSizeCalculator_CalculateBasedOnOnScreenSize_C1F4300D", this->fpRecommendedTextureSizeCalculator_CalculateBasedOnOnScreenSize);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreatePartRemover>( hLib , "CAPI_CreatePartRemover", this->fpCreatePartRemover);
		all_successfully_loaded &= LoadFunctionPointer<FP_PartRemover_RunPartRemoval>( hLib , "CAPI_PartRemover_RunPartRemoval_69A03065", this->fpPartRemover_RunPartRemoval);
		all_successfully_loaded &= LoadFunctionPointer<FP_PartRemover_SetGeometry>( hLib , "CAPI_PartRemover_SetGeometry_738A6D2B", this->fpPartRemover_SetGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_PartRemover_GetGeometry>( hLib , "CAPI_PartRemover_GetGeometry_1ACA88D6", this->fpPartRemover_GetGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_PartRemover_SetScene>( hLib , "CAPI_PartRemover_SetScene_738A6D2B", this->fpPartRemover_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_PartRemover_GetScene>( hLib , "CAPI_PartRemover_GetScene_262BA3D9", this->fpPartRemover_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_PartRemover_SetSizeThreshold>( hLib , "CAPI_PartRemover_SetSizeThreshold_74B7D40A", this->fpPartRemover_SetSizeThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_PartRemover_GetSizeThreshold>( hLib , "CAPI_PartRemover_GetSizeThreshold_D67B6715", this->fpPartRemover_GetSizeThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_PartRemover_SetUsePerMaterialSizeThresholds>( hLib , "CAPI_PartRemover_SetUsePerMaterialSizeThresholds_8E8FF636", this->fpPartRemover_SetUsePerMaterialSizeThresholds);
		all_successfully_loaded &= LoadFunctionPointer<FP_PartRemover_GetUsePerMaterialSizeThresholds>( hLib , "CAPI_PartRemover_GetUsePerMaterialSizeThresholds_C92E1C4A", this->fpPartRemover_GetUsePerMaterialSizeThresholds);
		all_successfully_loaded &= LoadFunctionPointer<FP_PartRemover_GetPerMaterialSizeThresholds>( hLib , "CAPI_PartRemover_GetPerMaterialSizeThresholds_692A1E94", this->fpPartRemover_GetPerMaterialSizeThresholds);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateWelder>( hLib , "CAPI_CreateWelder", this->fpCreateWelder);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetScene>( hLib , "CAPI_Welder_SetScene_738A6D2B", this->fpWelder_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetScene>( hLib , "CAPI_Welder_GetScene_262BA3D9", this->fpWelder_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetProcessSelectionSetID>( hLib , "CAPI_Welder_SetProcessSelectionSetID_8272B53C", this->fpWelder_SetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetProcessSelectionSetID>( hLib , "CAPI_Welder_GetProcessSelectionSetID_CDBA2BD0", this->fpWelder_GetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetProcessSelectionSetName>( hLib , "CAPI_Welder_SetProcessSelectionSetName_DFAFD8F8", this->fpWelder_SetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetProcessSelectionSetName>( hLib , "CAPI_Welder_GetProcessSelectionSetName_CCBB74AB", this->fpWelder_GetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetWeldDist>( hLib , "CAPI_Welder_SetWeldDist_74B7D40A", this->fpWelder_SetWeldDist);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetWeldDist>( hLib , "CAPI_Welder_GetWeldDist_D67B6715", this->fpWelder_GetWeldDist);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_WeldGeometry>( hLib , "CAPI_Welder_WeldGeometry_738A6D2B", this->fpWelder_WeldGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetUpdateExtents>( hLib , "CAPI_Welder_SetUpdateExtents_8E8FF636", this->fpWelder_SetUpdateExtents);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetUpdateExtents>( hLib , "CAPI_Welder_GetUpdateExtents_C92E1C4A", this->fpWelder_GetUpdateExtents);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetProgressivePasses>( hLib , "CAPI_Welder_SetProgressivePasses_E4EBF20A", this->fpWelder_SetProgressivePasses);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetProgressivePasses>( hLib , "CAPI_Welder_GetProgressivePasses_85E4C5D5", this->fpWelder_GetProgressivePasses);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetIgnoreVertexLocks>( hLib , "CAPI_Welder_SetIgnoreVertexLocks_8E8FF636", this->fpWelder_SetIgnoreVertexLocks);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetIgnoreVertexLocks>( hLib , "CAPI_Welder_GetIgnoreVertexLocks_C92E1C4A", this->fpWelder_GetIgnoreVertexLocks);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetCompactMesh>( hLib , "CAPI_Welder_SetCompactMesh_8E8FF636", this->fpWelder_SetCompactMesh);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetCompactMesh>( hLib , "CAPI_Welder_GetCompactMesh_C92E1C4A", this->fpWelder_GetCompactMesh);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetOnlyBorders>( hLib , "CAPI_Welder_SetOnlyBorders_8E8FF636", this->fpWelder_SetOnlyBorders);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetOnlyBorders>( hLib , "CAPI_Welder_GetOnlyBorders_C92E1C4A", this->fpWelder_GetOnlyBorders);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetOnlyWithinMaterial>( hLib , "CAPI_Welder_SetOnlyWithinMaterial_8E8FF636", this->fpWelder_SetOnlyWithinMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetOnlyWithinMaterial>( hLib , "CAPI_Welder_GetOnlyWithinMaterial_C92E1C4A", this->fpWelder_GetOnlyWithinMaterial);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetOnlyWithinSceneNode>( hLib , "CAPI_Welder_SetOnlyWithinSceneNode_8E8FF636", this->fpWelder_SetOnlyWithinSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetOnlyWithinSceneNode>( hLib , "CAPI_Welder_GetOnlyWithinSceneNode_C92E1C4A", this->fpWelder_GetOnlyWithinSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_SetOnlyBetweenSceneNodes>( hLib , "CAPI_Welder_SetOnlyBetweenSceneNodes_8E8FF636", this->fpWelder_SetOnlyBetweenSceneNodes);
		all_successfully_loaded &= LoadFunctionPointer<FP_Welder_GetOnlyBetweenSceneNodes>( hLib , "CAPI_Welder_GetOnlyBetweenSceneNodes_C92E1C4A", this->fpWelder_GetOnlyBetweenSceneNodes);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateTJunctionEliminator>( hLib , "CAPI_CreateTJunctionEliminator", this->fpCreateTJunctionEliminator);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_SetScene>( hLib , "CAPI_TJunctionEliminator_SetScene_738A6D2B", this->fpTJunctionEliminator_SetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_GetScene>( hLib , "CAPI_TJunctionEliminator_GetScene_262BA3D9", this->fpTJunctionEliminator_GetScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_RemoveTJunctionsInGeometry>( hLib , "CAPI_TJunctionEliminator_RemoveTJunctionsInGeometry_738A6D2B", this->fpTJunctionEliminator_RemoveTJunctionsInGeometry);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_RemoveTJunctions>( hLib , "CAPI_TJunctionEliminator_RemoveTJunctions_69A03065", this->fpTJunctionEliminator_RemoveTJunctions);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_SetWeldDist>( hLib , "CAPI_TJunctionEliminator_SetWeldDist_74B7D40A", this->fpTJunctionEliminator_SetWeldDist);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_GetWeldDist>( hLib , "CAPI_TJunctionEliminator_GetWeldDist_D67B6715", this->fpTJunctionEliminator_GetWeldDist);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_SetOnlyObjectBoundaryFlag>( hLib , "CAPI_TJunctionEliminator_SetOnlyObjectBoundaryFlag_8E8FF636", this->fpTJunctionEliminator_SetOnlyObjectBoundaryFlag);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_GetOnlyObjectBoundaryFlag>( hLib , "CAPI_TJunctionEliminator_GetOnlyObjectBoundaryFlag_C92E1C4A", this->fpTJunctionEliminator_GetOnlyObjectBoundaryFlag);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_SetProcessSelectionSetID>( hLib , "CAPI_TJunctionEliminator_SetProcessSelectionSetID_8272B53C", this->fpTJunctionEliminator_SetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_GetProcessSelectionSetID>( hLib , "CAPI_TJunctionEliminator_GetProcessSelectionSetID_CDBA2BD0", this->fpTJunctionEliminator_GetProcessSelectionSetID);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_SetProcessSelectionSetName>( hLib , "CAPI_TJunctionEliminator_SetProcessSelectionSetName_DFAFD8F8", this->fpTJunctionEliminator_SetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_GetProcessSelectionSetName>( hLib , "CAPI_TJunctionEliminator_GetProcessSelectionSetName_CCBB74AB", this->fpTJunctionEliminator_GetProcessSelectionSetName);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_SetOnlyWithinMaterialFlag>( hLib , "CAPI_TJunctionEliminator_SetOnlyWithinMaterialFlag_8E8FF636", this->fpTJunctionEliminator_SetOnlyWithinMaterialFlag);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_GetOnlyWithinMaterialFlag>( hLib , "CAPI_TJunctionEliminator_GetOnlyWithinMaterialFlag_C92E1C4A", this->fpTJunctionEliminator_GetOnlyWithinMaterialFlag);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_SetOnlyWithinSceneNode>( hLib , "CAPI_TJunctionEliminator_SetOnlyWithinSceneNode_8E8FF636", this->fpTJunctionEliminator_SetOnlyWithinSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_TJunctionEliminator_GetOnlyWithinSceneNode>( hLib , "CAPI_TJunctionEliminator_GetOnlyWithinSceneNode_C92E1C4A", this->fpTJunctionEliminator_GetOnlyWithinSceneNode);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_RunSceneFromFile>( hLib , "CAPI_Pipeline_RunSceneFromFile_C7E3D372", this->fpPipeline_RunSceneFromFile);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_RunScene>( hLib , "CAPI_Pipeline_RunScene_1CAE1FB6", this->fpPipeline_RunScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_AddMaterialCaster>( hLib , "CAPI_Pipeline_AddMaterialCaster_C1F4300D", this->fpPipeline_AddMaterialCaster);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_AddMaterialCasterByType>( hLib , "CAPI_Pipeline_AddMaterialCasterByType_36214629", this->fpPipeline_AddMaterialCasterByType);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetMaterialCasters>( hLib , "CAPI_Pipeline_GetMaterialCasters_972FA99A", this->fpPipeline_GetMaterialCasters);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetMaterialCasterCount>( hLib , "CAPI_Pipeline_GetMaterialCasterCount_85E4C5D5", this->fpPipeline_GetMaterialCasterCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetMaterialCasterByIndex>( hLib , "CAPI_Pipeline_GetMaterialCasterByIndex_53E2FC24", this->fpPipeline_GetMaterialCasterByIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetPipelineSettings>( hLib , "CAPI_Pipeline_GetPipelineSettings_1D8049C5", this->fpPipeline_GetPipelineSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_SetBoolParameter>( hLib , "CAPI_Pipeline_SetBoolParameter_F9F244D2", this->fpPipeline_SetBoolParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_SetIntParameter>( hLib , "CAPI_Pipeline_SetIntParameter_F35220E7", this->fpPipeline_SetIntParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_SetUIntParameter>( hLib , "CAPI_Pipeline_SetUIntParameter_2BFE9455", this->fpPipeline_SetUIntParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_SetDoubleParameter>( hLib , "CAPI_Pipeline_SetDoubleParameter_F59B7CE2", this->fpPipeline_SetDoubleParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_SetStringParameter>( hLib , "CAPI_Pipeline_SetStringParameter_7E7326BA", this->fpPipeline_SetStringParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_SetEnumParameter>( hLib , "CAPI_Pipeline_SetEnumParameter_CA399C07", this->fpPipeline_SetEnumParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_SetParameterFromString>( hLib , "CAPI_Pipeline_SetParameterFromString_7E7326BA", this->fpPipeline_SetParameterFromString);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetBoolParameter>( hLib , "CAPI_Pipeline_GetBoolParameter_5F793399", this->fpPipeline_GetBoolParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetIntParameter>( hLib , "CAPI_Pipeline_GetIntParameter_E03E072F", this->fpPipeline_GetIntParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetUIntParameter>( hLib , "CAPI_Pipeline_GetUIntParameter_11353F99", this->fpPipeline_GetUIntParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetDoubleParameter>( hLib , "CAPI_Pipeline_GetDoubleParameter_52E3AA27", this->fpPipeline_GetDoubleParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetStringParameter>( hLib , "CAPI_Pipeline_GetStringParameter_97219443", this->fpPipeline_GetStringParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetEnumParameter>( hLib , "CAPI_Pipeline_GetEnumParameter_E03E072F", this->fpPipeline_GetEnumParameter);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetParameterType>( hLib , "CAPI_Pipeline_GetParameterType_E62D67CD", this->fpPipeline_GetParameterType);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetMappingImageSettings>( hLib , "CAPI_Pipeline_GetMappingImageSettings_7D4F09F4", this->fpPipeline_GetMappingImageSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetMappingImage>( hLib , "CAPI_Pipeline_GetMappingImage_ED074B31", this->fpPipeline_GetMappingImage);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetCascadedPipelineByIndex>( hLib , "CAPI_Pipeline_GetCascadedPipelineByIndex_4307BF4B", this->fpPipeline_GetCascadedPipelineByIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_AddCascadedPipeline>( hLib , "CAPI_Pipeline_AddCascadedPipeline_738A6D2B", this->fpPipeline_AddCascadedPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_RemoveCascadedPipeline>( hLib , "CAPI_Pipeline_RemoveCascadedPipeline_738A6D2B", this->fpPipeline_RemoveCascadedPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetCascadedPipelineCount>( hLib , "CAPI_Pipeline_GetCascadedPipelineCount_85E4C5D5", this->fpPipeline_GetCascadedPipelineCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetProcessedScene>( hLib , "CAPI_Pipeline_GetProcessedScene_262BA3D9", this->fpPipeline_GetProcessedScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetPercentDone>( hLib , "CAPI_Pipeline_GetPercentDone_D67B6715", this->fpPipeline_GetPercentDone);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_GetActiveSelectionSets>( hLib , "CAPI_Pipeline_GetActiveSelectionSets_738A6D2B", this->fpPipeline_GetActiveSelectionSets);
		all_successfully_loaded &= LoadFunctionPointer<FP_Pipeline_NewCopy>( hLib , "CAPI_Pipeline_NewCopy_014072CB", this->fpPipeline_NewCopy);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreatePipelineBatch>( hLib , "CAPI_CreatePipelineBatch", this->fpCreatePipelineBatch);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_SetStoragePath>( hLib , "CAPI_PipelineBatch_SetStoragePath_DFAFD8F8", this->fpPipelineBatch_SetStoragePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_GetStoragePath>( hLib , "CAPI_PipelineBatch_GetStoragePath_CCBB74AB", this->fpPipelineBatch_GetStoragePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_Queue>( hLib , "CAPI_PipelineBatch_Queue_75C56E14", this->fpPipelineBatch_Queue);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_QueueFile>( hLib , "CAPI_PipelineBatch_QueueFile_3B3E9D26", this->fpPipelineBatch_QueueFile);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_Run>( hLib , "CAPI_PipelineBatch_Run_E1A26864", this->fpPipelineBatch_Run);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_LoadProcessedScene>( hLib , "CAPI_PipelineBatch_LoadProcessedScene_E28BEFDF", this->fpPipelineBatch_LoadProcessedScene);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_GetBatchCount>( hLib , "CAPI_PipelineBatch_GetBatchCount_85E4C5D5", this->fpPipelineBatch_GetBatchCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_GetPipelinePath>( hLib , "CAPI_PipelineBatch_GetPipelinePath_229F252F", this->fpPipelineBatch_GetPipelinePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_GetScenePath>( hLib , "CAPI_PipelineBatch_GetScenePath_229F252F", this->fpPipelineBatch_GetScenePath);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_GetOutputPath>( hLib , "CAPI_PipelineBatch_GetOutputPath_229F252F", this->fpPipelineBatch_GetOutputPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_Clear>( hLib , "CAPI_PipelineBatch_Clear_69A03065", this->fpPipelineBatch_Clear);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_SetCascadedRunMode>( hLib , "CAPI_PipelineBatch_SetCascadedRunMode_6F5D524D", this->fpPipelineBatch_SetCascadedRunMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_GetCascadedRunMode>( hLib , "CAPI_PipelineBatch_GetCascadedRunMode_D7782294", this->fpPipelineBatch_GetCascadedRunMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_SetSimplygonBatchPath>( hLib , "CAPI_PipelineBatch_SetSimplygonBatchPath_DFAFD8F8", this->fpPipelineBatch_SetSimplygonBatchPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineBatch_GetSimplygonBatchPath>( hLib , "CAPI_PipelineBatch_GetSimplygonBatchPath_CCBB74AB", this->fpPipelineBatch_GetSimplygonBatchPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreatePipelineSerializer>( hLib , "CAPI_CreatePipelineSerializer", this->fpCreatePipelineSerializer);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSerializer_LoadPipelineFromFile>( hLib , "CAPI_PipelineSerializer_LoadPipelineFromFile_3B8AB804", this->fpPipelineSerializer_LoadPipelineFromFile);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSerializer_SavePipelineToFile>( hLib , "CAPI_PipelineSerializer_SavePipelineToFile_13EF41B3", this->fpPipelineSerializer_SavePipelineToFile);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSerializer_LoadPipelineBatchFromFile>( hLib , "CAPI_PipelineSerializer_LoadPipelineBatchFromFile_CC9A0690", this->fpPipelineSerializer_LoadPipelineBatchFromFile);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSerializer_SavePipelineBatchToFile>( hLib , "CAPI_PipelineSerializer_SavePipelineBatchToFile_13EF41B3", this->fpPipelineSerializer_SavePipelineBatchToFile);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateReductionPipeline>( hLib , "CAPI_CreateReductionPipeline", this->fpCreateReductionPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionPipeline_GetReductionSettings>( hLib , "CAPI_ReductionPipeline_GetReductionSettings_78CFC920", this->fpReductionPipeline_GetReductionSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionPipeline_GetRepairSettings>( hLib , "CAPI_ReductionPipeline_GetRepairSettings_1C0B443E", this->fpReductionPipeline_GetRepairSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionPipeline_GetNormalCalculationSettings>( hLib , "CAPI_ReductionPipeline_GetNormalCalculationSettings_B7B7B929", this->fpReductionPipeline_GetNormalCalculationSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionPipeline_GetVisibilitySettings>( hLib , "CAPI_ReductionPipeline_GetVisibilitySettings_A66EAE96", this->fpReductionPipeline_GetVisibilitySettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionPipeline_GetBoneSettings>( hLib , "CAPI_ReductionPipeline_GetBoneSettings_AFD10D0A", this->fpReductionPipeline_GetBoneSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionPipeline_GetVertexWeightSettings>( hLib , "CAPI_ReductionPipeline_GetVertexWeightSettings_C9DC5849", this->fpReductionPipeline_GetVertexWeightSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ReductionPipeline_GetResultDeviation>( hLib , "CAPI_ReductionPipeline_GetResultDeviation_D67B6715", this->fpReductionPipeline_GetResultDeviation);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateRemeshingLegacyPipeline>( hLib , "CAPI_CreateRemeshingLegacyPipeline", this->fpCreateRemeshingLegacyPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyPipeline_GetRemeshingLegacySettings>( hLib , "CAPI_RemeshingLegacyPipeline_GetRemeshingLegacySettings_DE13E1E0", this->fpRemeshingLegacyPipeline_GetRemeshingLegacySettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyPipeline_GetVisibilitySettings>( hLib , "CAPI_RemeshingLegacyPipeline_GetVisibilitySettings_A66EAE96", this->fpRemeshingLegacyPipeline_GetVisibilitySettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingLegacyPipeline_GetBoneSettings>( hLib , "CAPI_RemeshingLegacyPipeline_GetBoneSettings_AFD10D0A", this->fpRemeshingLegacyPipeline_GetBoneSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateAggregationPipeline>( hLib , "CAPI_CreateAggregationPipeline", this->fpCreateAggregationPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationPipeline_GetAggregationSettings>( hLib , "CAPI_AggregationPipeline_GetAggregationSettings_4A1DF691", this->fpAggregationPipeline_GetAggregationSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationPipeline_GetVisibilitySettings>( hLib , "CAPI_AggregationPipeline_GetVisibilitySettings_A66EAE96", this->fpAggregationPipeline_GetVisibilitySettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationPipeline_GetGeometryCullingSettings>( hLib , "CAPI_AggregationPipeline_GetGeometryCullingSettings_9A4013D2", this->fpAggregationPipeline_GetGeometryCullingSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationPipeline_GetVertexWeightSettings>( hLib , "CAPI_AggregationPipeline_GetVertexWeightSettings_C9DC5849", this->fpAggregationPipeline_GetVertexWeightSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_AggregationPipeline_GetGenerateLightmapTexCoordSettings>( hLib , "CAPI_AggregationPipeline_GetGenerateLightmapTexCoordSettings_CD37E1D6", this->fpAggregationPipeline_GetGenerateLightmapTexCoordSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreatePipelineSettings>( hLib , "CAPI_CreatePipelineSettings", this->fpCreatePipelineSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_SetTextureOutputPath>( hLib , "CAPI_PipelineSettings_SetTextureOutputPath_DFAFD8F8", this->fpPipelineSettings_SetTextureOutputPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_GetTextureOutputPath>( hLib , "CAPI_PipelineSettings_GetTextureOutputPath_CCBB74AB", this->fpPipelineSettings_GetTextureOutputPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_SetSimplygonBatchPath>( hLib , "CAPI_PipelineSettings_SetSimplygonBatchPath_DFAFD8F8", this->fpPipelineSettings_SetSimplygonBatchPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_GetSimplygonBatchPath>( hLib , "CAPI_PipelineSettings_GetSimplygonBatchPath_CCBB74AB", this->fpPipelineSettings_GetSimplygonBatchPath);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_SetOutputMaterialName>( hLib , "CAPI_PipelineSettings_SetOutputMaterialName_DFAFD8F8", this->fpPipelineSettings_SetOutputMaterialName);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_GetOutputMaterialName>( hLib , "CAPI_PipelineSettings_GetOutputMaterialName_CCBB74AB", this->fpPipelineSettings_GetOutputMaterialName);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_SetOutputUniqueMaterialNames>( hLib , "CAPI_PipelineSettings_SetOutputUniqueMaterialNames_8E8FF636", this->fpPipelineSettings_SetOutputUniqueMaterialNames);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_GetOutputUniqueMaterialNames>( hLib , "CAPI_PipelineSettings_GetOutputUniqueMaterialNames_C92E1C4A", this->fpPipelineSettings_GetOutputUniqueMaterialNames);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_SetEmbedReferences>( hLib , "CAPI_PipelineSettings_SetEmbedReferences_8E8FF636", this->fpPipelineSettings_SetEmbedReferences);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_GetEmbedReferences>( hLib , "CAPI_PipelineSettings_GetEmbedReferences_C92E1C4A", this->fpPipelineSettings_GetEmbedReferences);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_SetIntermediateStep>( hLib , "CAPI_PipelineSettings_SetIntermediateStep_8E8FF636", this->fpPipelineSettings_SetIntermediateStep);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_GetIntermediateStep>( hLib , "CAPI_PipelineSettings_GetIntermediateStep_C92E1C4A", this->fpPipelineSettings_GetIntermediateStep);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_SetCascadedRunMode>( hLib , "CAPI_PipelineSettings_SetCascadedRunMode_6F5D524D", this->fpPipelineSettings_SetCascadedRunMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_PipelineSettings_GetCascadedRunMode>( hLib , "CAPI_PipelineSettings_GetCascadedRunMode_D7782294", this->fpPipelineSettings_GetCascadedRunMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateRemeshingPipeline>( hLib , "CAPI_CreateRemeshingPipeline", this->fpCreateRemeshingPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingPipeline_GetRemeshingSettings>( hLib , "CAPI_RemeshingPipeline_GetRemeshingSettings_50DB93B8", this->fpRemeshingPipeline_GetRemeshingSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingPipeline_GetBoneSettings>( hLib , "CAPI_RemeshingPipeline_GetBoneSettings_AFD10D0A", this->fpRemeshingPipeline_GetBoneSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingPipeline_GetGeometryCullingSettings>( hLib , "CAPI_RemeshingPipeline_GetGeometryCullingSettings_9A4013D2", this->fpRemeshingPipeline_GetGeometryCullingSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_RemeshingPipeline_GetVisibilitySettings>( hLib , "CAPI_RemeshingPipeline_GetVisibilitySettings_A66EAE96", this->fpRemeshingPipeline_GetVisibilitySettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreatePassthroughPipeline>( hLib , "CAPI_CreatePassthroughPipeline", this->fpCreatePassthroughPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateGeometryDataCaster>( hLib , "CAPI_CreateGeometryDataCaster", this->fpCreateGeometryDataCaster);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCaster_GetGeometryDataCasterSettings>( hLib , "CAPI_GeometryDataCaster_GetGeometryDataCasterSettings_93CCEA94", this->fpGeometryDataCaster_GetGeometryDataCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateGeometryDataCasterSettings>( hLib , "CAPI_CreateGeometryDataCasterSettings", this->fpCreateGeometryDataCasterSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetGeometryDataFieldType>( hLib , "CAPI_GeometryDataCasterSettings_SetGeometryDataFieldType_68A279E8", this->fpGeometryDataCasterSettings_SetGeometryDataFieldType);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetGeometryDataFieldType>( hLib , "CAPI_GeometryDataCasterSettings_GetGeometryDataFieldType_0E146551", this->fpGeometryDataCasterSettings_GetGeometryDataFieldType);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetGeometryDataFieldIndex>( hLib , "CAPI_GeometryDataCasterSettings_SetGeometryDataFieldIndex_E4EBF20A", this->fpGeometryDataCasterSettings_SetGeometryDataFieldIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetGeometryDataFieldIndex>( hLib , "CAPI_GeometryDataCasterSettings_GetGeometryDataFieldIndex_85E4C5D5", this->fpGeometryDataCasterSettings_GetGeometryDataFieldIndex);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetMappingInfR>( hLib , "CAPI_GeometryDataCasterSettings_SetMappingInfR_74B7D40A", this->fpGeometryDataCasterSettings_SetMappingInfR);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetMappingInfR>( hLib , "CAPI_GeometryDataCasterSettings_GetMappingInfR_D67B6715", this->fpGeometryDataCasterSettings_GetMappingInfR);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetMappingSupR>( hLib , "CAPI_GeometryDataCasterSettings_SetMappingSupR_74B7D40A", this->fpGeometryDataCasterSettings_SetMappingSupR);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetMappingSupR>( hLib , "CAPI_GeometryDataCasterSettings_GetMappingSupR_D67B6715", this->fpGeometryDataCasterSettings_GetMappingSupR);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetMappingInfG>( hLib , "CAPI_GeometryDataCasterSettings_SetMappingInfG_74B7D40A", this->fpGeometryDataCasterSettings_SetMappingInfG);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetMappingInfG>( hLib , "CAPI_GeometryDataCasterSettings_GetMappingInfG_D67B6715", this->fpGeometryDataCasterSettings_GetMappingInfG);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetMappingSupG>( hLib , "CAPI_GeometryDataCasterSettings_SetMappingSupG_74B7D40A", this->fpGeometryDataCasterSettings_SetMappingSupG);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetMappingSupG>( hLib , "CAPI_GeometryDataCasterSettings_GetMappingSupG_D67B6715", this->fpGeometryDataCasterSettings_GetMappingSupG);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetMappingInfB>( hLib , "CAPI_GeometryDataCasterSettings_SetMappingInfB_74B7D40A", this->fpGeometryDataCasterSettings_SetMappingInfB);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetMappingInfB>( hLib , "CAPI_GeometryDataCasterSettings_GetMappingInfB_D67B6715", this->fpGeometryDataCasterSettings_GetMappingInfB);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetMappingSupB>( hLib , "CAPI_GeometryDataCasterSettings_SetMappingSupB_74B7D40A", this->fpGeometryDataCasterSettings_SetMappingSupB);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetMappingSupB>( hLib , "CAPI_GeometryDataCasterSettings_GetMappingSupB_D67B6715", this->fpGeometryDataCasterSettings_GetMappingSupB);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetMappingInfA>( hLib , "CAPI_GeometryDataCasterSettings_SetMappingInfA_74B7D40A", this->fpGeometryDataCasterSettings_SetMappingInfA);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetMappingInfA>( hLib , "CAPI_GeometryDataCasterSettings_GetMappingInfA_D67B6715", this->fpGeometryDataCasterSettings_GetMappingInfA);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetMappingSupA>( hLib , "CAPI_GeometryDataCasterSettings_SetMappingSupA_74B7D40A", this->fpGeometryDataCasterSettings_SetMappingSupA);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetMappingSupA>( hLib , "CAPI_GeometryDataCasterSettings_GetMappingSupA_D67B6715", this->fpGeometryDataCasterSettings_GetMappingSupA);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetMappingInf>( hLib , "CAPI_GeometryDataCasterSettings_SetMappingInf_1ED03D45", this->fpGeometryDataCasterSettings_SetMappingInf);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetMappingInf>( hLib , "CAPI_GeometryDataCasterSettings_GetMappingInf_D67B6715", this->fpGeometryDataCasterSettings_GetMappingInf);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_SetMappingSup>( hLib , "CAPI_GeometryDataCasterSettings_SetMappingSup_1ED03D45", this->fpGeometryDataCasterSettings_SetMappingSup);
		all_successfully_loaded &= LoadFunctionPointer<FP_GeometryDataCasterSettings_GetMappingSup>( hLib , "CAPI_GeometryDataCasterSettings_GetMappingSup_D67B6715", this->fpGeometryDataCasterSettings_GetMappingSup);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_SetUseVertexWeightsInReducer>( hLib , "CAPI_VertexWeightSettings_SetUseVertexWeightsInReducer_8E8FF636", this->fpVertexWeightSettings_SetUseVertexWeightsInReducer);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_GetUseVertexWeightsInReducer>( hLib , "CAPI_VertexWeightSettings_GetUseVertexWeightsInReducer_C92E1C4A", this->fpVertexWeightSettings_GetUseVertexWeightsInReducer);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_SetUseVertexWeightsInTexcoordGenerator>( hLib , "CAPI_VertexWeightSettings_SetUseVertexWeightsInTexcoordGenerator_8E8FF636", this->fpVertexWeightSettings_SetUseVertexWeightsInTexcoordGenerator);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_GetUseVertexWeightsInTexcoordGenerator>( hLib , "CAPI_VertexWeightSettings_GetUseVertexWeightsInTexcoordGenerator_C92E1C4A", this->fpVertexWeightSettings_GetUseVertexWeightsInTexcoordGenerator);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_SetWeightsFromColorName>( hLib , "CAPI_VertexWeightSettings_SetWeightsFromColorName_DFAFD8F8", this->fpVertexWeightSettings_SetWeightsFromColorName);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_GetWeightsFromColorName>( hLib , "CAPI_VertexWeightSettings_GetWeightsFromColorName_CCBB74AB", this->fpVertexWeightSettings_GetWeightsFromColorName);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_SetWeightsFromColorLevel>( hLib , "CAPI_VertexWeightSettings_SetWeightsFromColorLevel_8272B53C", this->fpVertexWeightSettings_SetWeightsFromColorLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_GetWeightsFromColorLevel>( hLib , "CAPI_VertexWeightSettings_GetWeightsFromColorLevel_CDBA2BD0", this->fpVertexWeightSettings_GetWeightsFromColorLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_SetWeightsFromColorComponent>( hLib , "CAPI_VertexWeightSettings_SetWeightsFromColorComponent_3C3709A0", this->fpVertexWeightSettings_SetWeightsFromColorComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_GetWeightsFromColorComponent>( hLib , "CAPI_VertexWeightSettings_GetWeightsFromColorComponent_5776DF3D", this->fpVertexWeightSettings_GetWeightsFromColorComponent);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_SetWeightsFromColorMultiplier>( hLib , "CAPI_VertexWeightSettings_SetWeightsFromColorMultiplier_74B7D40A", this->fpVertexWeightSettings_SetWeightsFromColorMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_GetWeightsFromColorMultiplier>( hLib , "CAPI_VertexWeightSettings_GetWeightsFromColorMultiplier_D67B6715", this->fpVertexWeightSettings_GetWeightsFromColorMultiplier);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_SetWeightsFromColorMode>( hLib , "CAPI_VertexWeightSettings_SetWeightsFromColorMode_415CAC50", this->fpVertexWeightSettings_SetWeightsFromColorMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_VertexWeightSettings_GetWeightsFromColorMode>( hLib , "CAPI_VertexWeightSettings_GetWeightsFromColorMode_55AAEFDF", this->fpVertexWeightSettings_GetWeightsFromColorMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateGenerateLightmapTexCoordSettings>( hLib , "CAPI_CreateGenerateLightmapTexCoordSettings", this->fpCreateGenerateLightmapTexCoordSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_SetGenerateLightmapTexCoord>( hLib , "CAPI_GenerateLightmapTexCoordSettings_SetGenerateLightmapTexCoord_8E8FF636", this->fpGenerateLightmapTexCoordSettings_SetGenerateLightmapTexCoord);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_GetGenerateLightmapTexCoord>( hLib , "CAPI_GenerateLightmapTexCoordSettings_GetGenerateLightmapTexCoord_C92E1C4A", this->fpGenerateLightmapTexCoordSettings_GetGenerateLightmapTexCoord);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_SetLightmapTexCoordLevel>( hLib , "CAPI_GenerateLightmapTexCoordSettings_SetLightmapTexCoordLevel_8272B53C", this->fpGenerateLightmapTexCoordSettings_SetLightmapTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_GetLightmapTexCoordLevel>( hLib , "CAPI_GenerateLightmapTexCoordSettings_GetLightmapTexCoordLevel_CDBA2BD0", this->fpGenerateLightmapTexCoordSettings_GetLightmapTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_SetLightmapTexCoordName>( hLib , "CAPI_GenerateLightmapTexCoordSettings_SetLightmapTexCoordName_DFAFD8F8", this->fpGenerateLightmapTexCoordSettings_SetLightmapTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_GetLightmapTexCoordName>( hLib , "CAPI_GenerateLightmapTexCoordSettings_GetLightmapTexCoordName_CCBB74AB", this->fpGenerateLightmapTexCoordSettings_GetLightmapTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_SetChartAggregatorMode>( hLib , "CAPI_GenerateLightmapTexCoordSettings_SetChartAggregatorMode_E3C9E21F", this->fpGenerateLightmapTexCoordSettings_SetChartAggregatorMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_GetChartAggregatorMode>( hLib , "CAPI_GenerateLightmapTexCoordSettings_GetChartAggregatorMode_4C273A13", this->fpGenerateLightmapTexCoordSettings_GetChartAggregatorMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_SetTextureWidth>( hLib , "CAPI_GenerateLightmapTexCoordSettings_SetTextureWidth_E4EBF20A", this->fpGenerateLightmapTexCoordSettings_SetTextureWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_GetTextureWidth>( hLib , "CAPI_GenerateLightmapTexCoordSettings_GetTextureWidth_85E4C5D5", this->fpGenerateLightmapTexCoordSettings_GetTextureWidth);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_SetTextureHeight>( hLib , "CAPI_GenerateLightmapTexCoordSettings_SetTextureHeight_E4EBF20A", this->fpGenerateLightmapTexCoordSettings_SetTextureHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_GetTextureHeight>( hLib , "CAPI_GenerateLightmapTexCoordSettings_GetTextureHeight_85E4C5D5", this->fpGenerateLightmapTexCoordSettings_GetTextureHeight);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_SetGutterSpace>( hLib , "CAPI_GenerateLightmapTexCoordSettings_SetGutterSpace_E4EBF20A", this->fpGenerateLightmapTexCoordSettings_SetGutterSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_GenerateLightmapTexCoordSettings_GetGutterSpace>( hLib , "CAPI_GenerateLightmapTexCoordSettings_GetGutterSpace_85E4C5D5", this->fpGenerateLightmapTexCoordSettings_GetGutterSpace);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_SetChartAggregatorMode>( hLib , "CAPI_ChartAggregatorSettings_SetChartAggregatorMode_E3C9E21F", this->fpChartAggregatorSettings_SetChartAggregatorMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_GetChartAggregatorMode>( hLib , "CAPI_ChartAggregatorSettings_GetChartAggregatorMode_4C273A13", this->fpChartAggregatorSettings_GetChartAggregatorMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_SetSurfaceAreaScale>( hLib , "CAPI_ChartAggregatorSettings_SetSurfaceAreaScale_3C24E37C", this->fpChartAggregatorSettings_SetSurfaceAreaScale);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_GetSurfaceAreaScale>( hLib , "CAPI_ChartAggregatorSettings_GetSurfaceAreaScale_6653C2F4", this->fpChartAggregatorSettings_GetSurfaceAreaScale);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_SetOriginalTexCoordLevel>( hLib , "CAPI_ChartAggregatorSettings_SetOriginalTexCoordLevel_8272B53C", this->fpChartAggregatorSettings_SetOriginalTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_GetOriginalTexCoordLevel>( hLib , "CAPI_ChartAggregatorSettings_GetOriginalTexCoordLevel_CDBA2BD0", this->fpChartAggregatorSettings_GetOriginalTexCoordLevel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_SetOriginalTexCoordName>( hLib , "CAPI_ChartAggregatorSettings_SetOriginalTexCoordName_DFAFD8F8", this->fpChartAggregatorSettings_SetOriginalTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_GetOriginalTexCoordName>( hLib , "CAPI_ChartAggregatorSettings_GetOriginalTexCoordName_CCBB74AB", this->fpChartAggregatorSettings_GetOriginalTexCoordName);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_SetSeparateOverlappingCharts>( hLib , "CAPI_ChartAggregatorSettings_SetSeparateOverlappingCharts_8E8FF636", this->fpChartAggregatorSettings_SetSeparateOverlappingCharts);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_GetSeparateOverlappingCharts>( hLib , "CAPI_ChartAggregatorSettings_GetSeparateOverlappingCharts_C92E1C4A", this->fpChartAggregatorSettings_GetSeparateOverlappingCharts);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_SetOriginalChartProportionsChannel>( hLib , "CAPI_ChartAggregatorSettings_SetOriginalChartProportionsChannel_DFAFD8F8", this->fpChartAggregatorSettings_SetOriginalChartProportionsChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_GetOriginalChartProportionsChannel>( hLib , "CAPI_ChartAggregatorSettings_GetOriginalChartProportionsChannel_CCBB74AB", this->fpChartAggregatorSettings_GetOriginalChartProportionsChannel);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_SetLockUVRotation>( hLib , "CAPI_ChartAggregatorSettings_SetLockUVRotation_8E8FF636", this->fpChartAggregatorSettings_SetLockUVRotation);
		all_successfully_loaded &= LoadFunctionPointer<FP_ChartAggregatorSettings_GetLockUVRotation>( hLib , "CAPI_ChartAggregatorSettings_GetLockUVRotation_C92E1C4A", this->fpChartAggregatorSettings_GetLockUVRotation);
		all_successfully_loaded &= LoadFunctionPointer<FP_ParameterizerSettings_SetMaxStretch>( hLib , "CAPI_ParameterizerSettings_SetMaxStretch_74B7D40A", this->fpParameterizerSettings_SetMaxStretch);
		all_successfully_loaded &= LoadFunctionPointer<FP_ParameterizerSettings_GetMaxStretch>( hLib , "CAPI_ParameterizerSettings_GetMaxStretch_D67B6715", this->fpParameterizerSettings_GetMaxStretch);
		all_successfully_loaded &= LoadFunctionPointer<FP_ParameterizerSettings_SetLargeChartsImportance>( hLib , "CAPI_ParameterizerSettings_SetLargeChartsImportance_74B7D40A", this->fpParameterizerSettings_SetLargeChartsImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_ParameterizerSettings_GetLargeChartsImportance>( hLib , "CAPI_ParameterizerSettings_GetLargeChartsImportance_D67B6715", this->fpParameterizerSettings_GetLargeChartsImportance);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateBillboardCloudSettings>( hLib , "CAPI_CreateBillboardCloudSettings", this->fpCreateBillboardCloudSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetBillboardMode>( hLib , "CAPI_BillboardCloudSettings_SetBillboardMode_741AFBD4", this->fpBillboardCloudSettings_SetBillboardMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetBillboardMode>( hLib , "CAPI_BillboardCloudSettings_GetBillboardMode_A3E4B6B3", this->fpBillboardCloudSettings_GetBillboardMode);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetFavorVerticalPlanes>( hLib , "CAPI_BillboardCloudSettings_SetFavorVerticalPlanes_8E8FF636", this->fpBillboardCloudSettings_SetFavorVerticalPlanes);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetFavorVerticalPlanes>( hLib , "CAPI_BillboardCloudSettings_GetFavorVerticalPlanes_C92E1C4A", this->fpBillboardCloudSettings_GetFavorVerticalPlanes);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetTwoSided>( hLib , "CAPI_BillboardCloudSettings_SetTwoSided_8E8FF636", this->fpBillboardCloudSettings_SetTwoSided);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetTwoSided>( hLib , "CAPI_BillboardCloudSettings_GetTwoSided_C92E1C4A", this->fpBillboardCloudSettings_GetTwoSided);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetUseVisibilityWeights>( hLib , "CAPI_BillboardCloudSettings_SetUseVisibilityWeights_8E8FF636", this->fpBillboardCloudSettings_SetUseVisibilityWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetUseVisibilityWeights>( hLib , "CAPI_BillboardCloudSettings_GetUseVisibilityWeights_C92E1C4A", this->fpBillboardCloudSettings_GetUseVisibilityWeights);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetBillboardDensity>( hLib , "CAPI_BillboardCloudSettings_SetBillboardDensity_74B7D40A", this->fpBillboardCloudSettings_SetBillboardDensity);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetBillboardDensity>( hLib , "CAPI_BillboardCloudSettings_GetBillboardDensity_D67B6715", this->fpBillboardCloudSettings_GetBillboardDensity);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetMaxPlaneCount>( hLib , "CAPI_BillboardCloudSettings_SetMaxPlaneCount_E4EBF20A", this->fpBillboardCloudSettings_SetMaxPlaneCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetMaxPlaneCount>( hLib , "CAPI_BillboardCloudSettings_GetMaxPlaneCount_85E4C5D5", this->fpBillboardCloudSettings_GetMaxPlaneCount);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetGeometricComplexity>( hLib , "CAPI_BillboardCloudSettings_SetGeometricComplexity_74B7D40A", this->fpBillboardCloudSettings_SetGeometricComplexity);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetGeometricComplexity>( hLib , "CAPI_BillboardCloudSettings_GetGeometricComplexity_D67B6715", this->fpBillboardCloudSettings_GetGeometricComplexity);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetUpVector>( hLib , "CAPI_BillboardCloudSettings_SetUpVector_1ED03D45", this->fpBillboardCloudSettings_SetUpVector);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetUpVector>( hLib , "CAPI_BillboardCloudSettings_GetUpVector_D67B6715", this->fpBillboardCloudSettings_GetUpVector);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetUpVectorX>( hLib , "CAPI_BillboardCloudSettings_SetUpVectorX_74B7D40A", this->fpBillboardCloudSettings_SetUpVectorX);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetUpVectorX>( hLib , "CAPI_BillboardCloudSettings_GetUpVectorX_D67B6715", this->fpBillboardCloudSettings_GetUpVectorX);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetUpVectorY>( hLib , "CAPI_BillboardCloudSettings_SetUpVectorY_74B7D40A", this->fpBillboardCloudSettings_SetUpVectorY);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetUpVectorY>( hLib , "CAPI_BillboardCloudSettings_GetUpVectorY_D67B6715", this->fpBillboardCloudSettings_GetUpVectorY);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_SetUpVectorZ>( hLib , "CAPI_BillboardCloudSettings_SetUpVectorZ_74B7D40A", this->fpBillboardCloudSettings_SetUpVectorZ);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetUpVectorZ>( hLib , "CAPI_BillboardCloudSettings_GetUpVectorZ_D67B6715", this->fpBillboardCloudSettings_GetUpVectorZ);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudSettings_GetFoliageSettings>( hLib , "CAPI_BillboardCloudSettings_GetFoliageSettings_A46C339D", this->fpBillboardCloudSettings_GetFoliageSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateFlipbookSettings>( hLib , "CAPI_CreateFlipbookSettings", this->fpCreateFlipbookSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_SetNumberOfViews>( hLib , "CAPI_FlipbookSettings_SetNumberOfViews_E4EBF20A", this->fpFlipbookSettings_SetNumberOfViews);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_GetNumberOfViews>( hLib , "CAPI_FlipbookSettings_GetNumberOfViews_85E4C5D5", this->fpFlipbookSettings_GetNumberOfViews);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_SetViewDirection>( hLib , "CAPI_FlipbookSettings_SetViewDirection_1ED03D45", this->fpFlipbookSettings_SetViewDirection);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_GetViewDirection>( hLib , "CAPI_FlipbookSettings_GetViewDirection_D67B6715", this->fpFlipbookSettings_GetViewDirection);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_SetViewDirectionX>( hLib , "CAPI_FlipbookSettings_SetViewDirectionX_74B7D40A", this->fpFlipbookSettings_SetViewDirectionX);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_GetViewDirectionX>( hLib , "CAPI_FlipbookSettings_GetViewDirectionX_D67B6715", this->fpFlipbookSettings_GetViewDirectionX);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_SetViewDirectionY>( hLib , "CAPI_FlipbookSettings_SetViewDirectionY_74B7D40A", this->fpFlipbookSettings_SetViewDirectionY);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_GetViewDirectionY>( hLib , "CAPI_FlipbookSettings_GetViewDirectionY_D67B6715", this->fpFlipbookSettings_GetViewDirectionY);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_SetViewDirectionZ>( hLib , "CAPI_FlipbookSettings_SetViewDirectionZ_74B7D40A", this->fpFlipbookSettings_SetViewDirectionZ);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_GetViewDirectionZ>( hLib , "CAPI_FlipbookSettings_GetViewDirectionZ_D67B6715", this->fpFlipbookSettings_GetViewDirectionZ);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_SetUpVector>( hLib , "CAPI_FlipbookSettings_SetUpVector_1ED03D45", this->fpFlipbookSettings_SetUpVector);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_GetUpVector>( hLib , "CAPI_FlipbookSettings_GetUpVector_D67B6715", this->fpFlipbookSettings_GetUpVector);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_SetUpVectorX>( hLib , "CAPI_FlipbookSettings_SetUpVectorX_74B7D40A", this->fpFlipbookSettings_SetUpVectorX);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_GetUpVectorX>( hLib , "CAPI_FlipbookSettings_GetUpVectorX_D67B6715", this->fpFlipbookSettings_GetUpVectorX);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_SetUpVectorY>( hLib , "CAPI_FlipbookSettings_SetUpVectorY_74B7D40A", this->fpFlipbookSettings_SetUpVectorY);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_GetUpVectorY>( hLib , "CAPI_FlipbookSettings_GetUpVectorY_D67B6715", this->fpFlipbookSettings_GetUpVectorY);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_SetUpVectorZ>( hLib , "CAPI_FlipbookSettings_SetUpVectorZ_74B7D40A", this->fpFlipbookSettings_SetUpVectorZ);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_GetUpVectorZ>( hLib , "CAPI_FlipbookSettings_GetUpVectorZ_D67B6715", this->fpFlipbookSettings_GetUpVectorZ);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_SetVerticalAngle>( hLib , "CAPI_FlipbookSettings_SetVerticalAngle_74B7D40A", this->fpFlipbookSettings_SetVerticalAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookSettings_GetVerticalAngle>( hLib , "CAPI_FlipbookSettings_GetVerticalAngle_D67B6715", this->fpFlipbookSettings_GetVerticalAngle);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateImpostorFromSingleViewSettings>( hLib , "CAPI_CreateImpostorFromSingleViewSettings", this->fpCreateImpostorFromSingleViewSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_SetUseTightFitting>( hLib , "CAPI_ImpostorFromSingleViewSettings_SetUseTightFitting_8E8FF636", this->fpImpostorFromSingleViewSettings_SetUseTightFitting);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_GetUseTightFitting>( hLib , "CAPI_ImpostorFromSingleViewSettings_GetUseTightFitting_C92E1C4A", this->fpImpostorFromSingleViewSettings_GetUseTightFitting);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_SetTightFittingDepthOffset>( hLib , "CAPI_ImpostorFromSingleViewSettings_SetTightFittingDepthOffset_74B7D40A", this->fpImpostorFromSingleViewSettings_SetTightFittingDepthOffset);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_GetTightFittingDepthOffset>( hLib , "CAPI_ImpostorFromSingleViewSettings_GetTightFittingDepthOffset_D67B6715", this->fpImpostorFromSingleViewSettings_GetTightFittingDepthOffset);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_SetTwoSided>( hLib , "CAPI_ImpostorFromSingleViewSettings_SetTwoSided_8E8FF636", this->fpImpostorFromSingleViewSettings_SetTwoSided);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_GetTwoSided>( hLib , "CAPI_ImpostorFromSingleViewSettings_GetTwoSided_C92E1C4A", this->fpImpostorFromSingleViewSettings_GetTwoSided);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_SetViewDirection>( hLib , "CAPI_ImpostorFromSingleViewSettings_SetViewDirection_1ED03D45", this->fpImpostorFromSingleViewSettings_SetViewDirection);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_GetViewDirection>( hLib , "CAPI_ImpostorFromSingleViewSettings_GetViewDirection_D67B6715", this->fpImpostorFromSingleViewSettings_GetViewDirection);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_SetViewDirectionX>( hLib , "CAPI_ImpostorFromSingleViewSettings_SetViewDirectionX_74B7D40A", this->fpImpostorFromSingleViewSettings_SetViewDirectionX);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_GetViewDirectionX>( hLib , "CAPI_ImpostorFromSingleViewSettings_GetViewDirectionX_D67B6715", this->fpImpostorFromSingleViewSettings_GetViewDirectionX);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_SetViewDirectionY>( hLib , "CAPI_ImpostorFromSingleViewSettings_SetViewDirectionY_74B7D40A", this->fpImpostorFromSingleViewSettings_SetViewDirectionY);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_GetViewDirectionY>( hLib , "CAPI_ImpostorFromSingleViewSettings_GetViewDirectionY_D67B6715", this->fpImpostorFromSingleViewSettings_GetViewDirectionY);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_SetViewDirectionZ>( hLib , "CAPI_ImpostorFromSingleViewSettings_SetViewDirectionZ_74B7D40A", this->fpImpostorFromSingleViewSettings_SetViewDirectionZ);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_GetViewDirectionZ>( hLib , "CAPI_ImpostorFromSingleViewSettings_GetViewDirectionZ_D67B6715", this->fpImpostorFromSingleViewSettings_GetViewDirectionZ);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_SetTexCoordPadding>( hLib , "CAPI_ImpostorFromSingleViewSettings_SetTexCoordPadding_74B7D40A", this->fpImpostorFromSingleViewSettings_SetTexCoordPadding);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewSettings_GetTexCoordPadding>( hLib , "CAPI_ImpostorFromSingleViewSettings_GetTexCoordPadding_D67B6715", this->fpImpostorFromSingleViewSettings_GetTexCoordPadding);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateImpostorFromSingleViewPipeline>( hLib , "CAPI_CreateImpostorFromSingleViewPipeline", this->fpCreateImpostorFromSingleViewPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_ImpostorFromSingleViewPipeline_GetImpostorFromSingleViewSettings>( hLib , "CAPI_ImpostorFromSingleViewPipeline_GetImpostorFromSingleViewSettings_72751C3B", this->fpImpostorFromSingleViewPipeline_GetImpostorFromSingleViewSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateBillboardCloudPipeline>( hLib , "CAPI_CreateBillboardCloudPipeline", this->fpCreateBillboardCloudPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudPipeline_GetBillboardCloudSettings>( hLib , "CAPI_BillboardCloudPipeline_GetBillboardCloudSettings_17915FAF", this->fpBillboardCloudPipeline_GetBillboardCloudSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateBillboardCloudVegetationPipeline>( hLib , "CAPI_CreateBillboardCloudVegetationPipeline", this->fpCreateBillboardCloudVegetationPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_BillboardCloudVegetationPipeline_GetBillboardCloudSettings>( hLib , "CAPI_BillboardCloudVegetationPipeline_GetBillboardCloudSettings_17915FAF", this->fpBillboardCloudVegetationPipeline_GetBillboardCloudSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateFlipbookPipeline>( hLib , "CAPI_CreateFlipbookPipeline", this->fpCreateFlipbookPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_FlipbookPipeline_GetFlipbookSettings>( hLib , "CAPI_FlipbookPipeline_GetFlipbookSettings_4862095E", this->fpFlipbookPipeline_GetFlipbookSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_SetSeparateTrunkAndFoliage>( hLib , "CAPI_FoliageSettings_SetSeparateTrunkAndFoliage_8E8FF636", this->fpFoliageSettings_SetSeparateTrunkAndFoliage);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_GetSeparateTrunkAndFoliage>( hLib , "CAPI_FoliageSettings_GetSeparateTrunkAndFoliage_C92E1C4A", this->fpFoliageSettings_GetSeparateTrunkAndFoliage);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_SetSeparateFoliageTriangleRatio>( hLib , "CAPI_FoliageSettings_SetSeparateFoliageTriangleRatio_74B7D40A", this->fpFoliageSettings_SetSeparateFoliageTriangleRatio);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_GetSeparateFoliageTriangleRatio>( hLib , "CAPI_FoliageSettings_GetSeparateFoliageTriangleRatio_D67B6715", this->fpFoliageSettings_GetSeparateFoliageTriangleRatio);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_SetSeparateFoliageTriangleThreshold>( hLib , "CAPI_FoliageSettings_SetSeparateFoliageTriangleThreshold_E4EBF20A", this->fpFoliageSettings_SetSeparateFoliageTriangleThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_GetSeparateFoliageTriangleThreshold>( hLib , "CAPI_FoliageSettings_GetSeparateFoliageTriangleThreshold_85E4C5D5", this->fpFoliageSettings_GetSeparateFoliageTriangleThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_SetSeparateFoliageAreaThreshold>( hLib , "CAPI_FoliageSettings_SetSeparateFoliageAreaThreshold_74B7D40A", this->fpFoliageSettings_SetSeparateFoliageAreaThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_GetSeparateFoliageAreaThreshold>( hLib , "CAPI_FoliageSettings_GetSeparateFoliageAreaThreshold_D67B6715", this->fpFoliageSettings_GetSeparateFoliageAreaThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_SetSeparateFoliageSizeThreshold>( hLib , "CAPI_FoliageSettings_SetSeparateFoliageSizeThreshold_74B7D40A", this->fpFoliageSettings_SetSeparateFoliageSizeThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_GetSeparateFoliageSizeThreshold>( hLib , "CAPI_FoliageSettings_GetSeparateFoliageSizeThreshold_D67B6715", this->fpFoliageSettings_GetSeparateFoliageSizeThreshold);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_SetTrunkReductionRatio>( hLib , "CAPI_FoliageSettings_SetTrunkReductionRatio_74B7D40A", this->fpFoliageSettings_SetTrunkReductionRatio);
		all_successfully_loaded &= LoadFunctionPointer<FP_FoliageSettings_GetTrunkReductionRatio>( hLib , "CAPI_FoliageSettings_GetTrunkReductionRatio_D67B6715", this->fpFoliageSettings_GetTrunkReductionRatio);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateStringArray>( hLib , "CAPI_CreateStringArray", this->fpCreateStringArray);
		all_successfully_loaded &= LoadFunctionPointer<FP_StringArray_AddItem>( hLib , "CAPI_StringArray_AddItem_DFAFD8F8", this->fpStringArray_AddItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_StringArray_SetItem>( hLib , "CAPI_StringArray_SetItem_C491F659", this->fpStringArray_SetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_StringArray_GetItem>( hLib , "CAPI_StringArray_GetItem_6A043423", this->fpStringArray_GetItem);
		all_successfully_loaded &= LoadFunctionPointer<FP_CreateOcclusionMeshPipeline>( hLib , "CAPI_CreateOcclusionMeshPipeline", this->fpCreateOcclusionMeshPipeline);
		all_successfully_loaded &= LoadFunctionPointer<FP_OcclusionMeshPipeline_GetOcclusionMeshSettings>( hLib , "CAPI_OcclusionMeshPipeline_GetOcclusionMeshSettings_918C0A1B", this->fpOcclusionMeshPipeline_GetOcclusionMeshSettings);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_SetErrorHandler>( hLib , "CAPI_Simplygon_SetErrorHandler", this->fpSimplygon_SetErrorHandler);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_GetVersion>( hLib , "CAPI_Simplygon_GetVersion", this->fpSimplygon_GetVersion);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_SendTelemetry>( hLib , "CAPI_Simplygon_SendTelemetry", this->fpSimplygon_SendTelemetry);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_WarningOccurred>( hLib , "CAPI_Simplygon_WarningOccurred", this->fpSimplygon_WarningOccurred);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_ErrorOccurred>( hLib , "CAPI_Simplygon_ErrorOccurred", this->fpSimplygon_ErrorOccurred);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_GetWarningMessages>( hLib , "CAPI_Simplygon_GetWarningMessages", this->fpSimplygon_GetWarningMessages);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_GetErrorMessages>( hLib , "CAPI_Simplygon_GetErrorMessages", this->fpSimplygon_GetErrorMessages);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_ClearWarningMessages>( hLib , "CAPI_Simplygon_ClearWarningMessages", this->fpSimplygon_ClearWarningMessages);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_ClearErrorMessages>( hLib , "CAPI_Simplygon_ClearErrorMessages", this->fpSimplygon_ClearErrorMessages);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_SetGlobalBoolSetting>( hLib , "CAPI_Simplygon_SetGlobalBoolSetting", this->fpSimplygon_SetGlobalBoolSetting);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_SetGlobalIntSetting>( hLib , "CAPI_Simplygon_SetGlobalIntSetting", this->fpSimplygon_SetGlobalIntSetting);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_SetGlobalFloatSetting>( hLib , "CAPI_Simplygon_SetGlobalFloatSetting", this->fpSimplygon_SetGlobalFloatSetting);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_SetGlobalStringSetting>( hLib , "CAPI_Simplygon_SetGlobalStringSetting", this->fpSimplygon_SetGlobalStringSetting);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_GetGlobalBoolSetting>( hLib , "CAPI_Simplygon_GetGlobalBoolSetting", this->fpSimplygon_GetGlobalBoolSetting);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_GetGlobalIntSetting>( hLib , "CAPI_Simplygon_GetGlobalIntSetting", this->fpSimplygon_GetGlobalIntSetting);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_GetGlobalFloatSetting>( hLib , "CAPI_Simplygon_GetGlobalFloatSetting", this->fpSimplygon_GetGlobalFloatSetting);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_GetGlobalStringSetting>( hLib , "CAPI_Simplygon_GetGlobalStringSetting", this->fpSimplygon_GetGlobalStringSetting);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_SetThreadLocalStringSetting>( hLib , "CAPI_Simplygon_SetThreadLocalStringSetting", this->fpSimplygon_SetThreadLocalStringSetting);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_GetThreadLocalStringSetting>( hLib , "CAPI_Simplygon_GetThreadLocalStringSetting", this->fpSimplygon_GetThreadLocalStringSetting);
		all_successfully_loaded &= LoadFunctionPointer<FP_Simplygon_EnableLogToFile>( hLib , "CAPI_Simplygon_EnableLogToFile", this->fpSimplygon_EnableLogToFile);
		return all_successfully_loaded;
	}
	/**
	 * Returns the API interface version hash as a string
	 * @return the API interface version hash
	 */
	inline const char *GetInterfaceVersionHash()
	{
		return "6B9768B53676B1ADCE3C811D205BDF21B55C6CC40FAF5A87CA96B2EE459D617C";
	}

	/**
	 * Returns the SDK version number of the header file as a string. This may not match the .dll, because headers and .dll files that have the same interface will work properly.
	 * @return the API version string
	 */
	inline const char *GetHeaderVersion()
	{
		return "9.2.1400";
	}

};

#ifdef _WIN32
#pragma warning( pop )
#endif
#endif//_SIMPLYGON_H_
