# Simplygon Python wrapper, generated by SWIG (www.swig.org). Simplygon Copyright (c) Microsoft. All rights reserved.

from __future__ import annotations

from sys import version_info as _swig_python_version_info
if _swig_python_version_info < (2, 7, 0):
    raise RuntimeError("Python 2.7 or later required")

if __package__ or "." in __name__:
    from . import _Simplygon
else:
    import _Simplygon

try:
    import builtins as __builtin__
except ImportError:
    import __builtin__

def _swig_repr(self):
    try:
        strthis = "proxy of " + self.this.__repr__()
    except __builtin__.Exception:
        strthis = ""
    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)


def _swig_setattr_nondynamic_instance_variable(set):
    def set_instance_attr(self, name, value):
        if name == "thisown":
            self.this.own(value)
        elif name == "this":
            set(self, name, value)
        elif hasattr(self, name) and isinstance(getattr(type(self), name), property):
            set(self, name, value)
        else:
            raise AttributeError("You cannot add instance attributes to %s" % self)
    return set_instance_attr


def _swig_setattr_nondynamic_class_variable(set):
    def set_class_attr(cls, name, value):
        if hasattr(cls, name) and not isinstance(getattr(cls, name), property):
            set(cls, name, value)
        else:
            raise AttributeError("You cannot add class attributes to %s" % cls)
    return set_class_attr


def _swig_add_metaclass(metaclass):
    """Class decorator for adding a metaclass to a SWIG wrapped class - a slimmed down version of six.add_metaclass"""
    def wrapper(cls):
        return metaclass(cls.__name__, cls.__bases__, cls.__dict__.copy())
    return wrapper


class _SwigNonDynamicMeta(type):
    """Meta class to enforce nondynamic attributes (no new attributes) for a class"""
    __setattr__ = _swig_setattr_nondynamic_class_variable(type.__setattr__)


import weakref


SG_MATERIAL_CHANNEL_AMBIENT = "Ambient"
SG_MATERIAL_CHANNEL_DIFFUSE = "Diffuse"
SG_MATERIAL_CHANNEL_SPECULAR = "Specular"
SG_MATERIAL_CHANNEL_SHININESS = "Shininess"
SG_MATERIAL_CHANNEL_OPACITY = "Opacity"
SG_MATERIAL_CHANNEL_EMISSIVE = "Emissive"
SG_MATERIAL_CHANNEL_NORMALS = "Normals"
SG_MATERIAL_CHANNEL_GROUPIDS = "GroupIds"
SG_MATERIAL_CHANNEL_DISPLACEMENT = "Displacement"
SG_MATERIAL_CHANNEL_BASECOLOR = "Basecolor"
SG_MATERIAL_CHANNEL_ROUGHNESS = "Roughness"
SG_MATERIAL_CHANNEL_METALNESS = "Metalness"
SG_MATERIAL_CHANNEL_OCCLUSION = "Occlusion"
SG_IMAGEDATA_FORMAT_L = "L"
SG_IMAGEDATA_FORMAT_RGB = "RGB"
SG_IMAGEDATA_FORMAT_RGBA = "RGBA"

Simplygon_VERSION = _Simplygon.Simplygon_VERSION
EBaseTypes_TYPES_ID_BOOL = _Simplygon.EBaseTypes_TYPES_ID_BOOL
EBaseTypes_TYPES_ID_CHAR = _Simplygon.EBaseTypes_TYPES_ID_CHAR
EBaseTypes_TYPES_ID_UCHAR = _Simplygon.EBaseTypes_TYPES_ID_UCHAR
EBaseTypes_TYPES_ID_SHORT = _Simplygon.EBaseTypes_TYPES_ID_SHORT
EBaseTypes_TYPES_ID_USHORT = _Simplygon.EBaseTypes_TYPES_ID_USHORT
EBaseTypes_TYPES_ID_INT = _Simplygon.EBaseTypes_TYPES_ID_INT
EBaseTypes_TYPES_ID_UINT = _Simplygon.EBaseTypes_TYPES_ID_UINT
EBaseTypes_TYPES_ID_LONG = _Simplygon.EBaseTypes_TYPES_ID_LONG
EBaseTypes_TYPES_ID_ULONG = _Simplygon.EBaseTypes_TYPES_ID_ULONG
EBaseTypes_TYPES_ID_FLOAT = _Simplygon.EBaseTypes_TYPES_ID_FLOAT
EBaseTypes_TYPES_ID_DOUBLE = _Simplygon.EBaseTypes_TYPES_ID_DOUBLE
EBaseTypes_TYPES_ID_REAL = _Simplygon.EBaseTypes_TYPES_ID_REAL
EBaseTypes_TYPES_ID_RID = _Simplygon.EBaseTypes_TYPES_ID_RID
EBaseTypes_TYPES_ID_RCHAR = _Simplygon.EBaseTypes_TYPES_ID_RCHAR
EBaseTypes_TYPES_ID_RHANDLE = _Simplygon.EBaseTypes_TYPES_ID_RHANDLE
EBaseTypes_TYPES_ID_STRING = _Simplygon.EBaseTypes_TYPES_ID_STRING
EBaseTypes_TYPES_ID_OBJECT = _Simplygon.EBaseTypes_TYPES_ID_OBJECT
EErrorCodes_NoError = _Simplygon.EErrorCodes_NoError
EErrorCodes_NoLicense = _Simplygon.EErrorCodes_NoLicense
EErrorCodes_NotInitialized = _Simplygon.EErrorCodes_NotInitialized
EErrorCodes_AlreadyInitialized = _Simplygon.EErrorCodes_AlreadyInitialized
EErrorCodes_DLLOrDependenciesNotFound = _Simplygon.EErrorCodes_DLLOrDependenciesNotFound
EErrorCodes_InvalidInputParam = _Simplygon.EErrorCodes_InvalidInputParam
EErrorCodes_FailedTesting = _Simplygon.EErrorCodes_FailedTesting
EErrorCodes_DLLAndHeaderFileIsNotMatching = _Simplygon.EErrorCodes_DLLAndHeaderFileIsNotMatching
EErrorCodes_DLLFailedToLoad = _Simplygon.EErrorCodes_DLLFailedToLoad
EErrorCodes_LicenseNotForThisApplication = _Simplygon.EErrorCodes_LicenseNotForThisApplication
EErrorCodes_LicenseNotForThisPlatform = _Simplygon.EErrorCodes_LicenseNotForThisPlatform
EErrorCodes_LicenseNotForThisVersion = _Simplygon.EErrorCodes_LicenseNotForThisVersion
EErrorCodes_FailedToCreatePipelineSerializer = _Simplygon.EErrorCodes_FailedToCreatePipelineSerializer
EErrorCodes_FailedToRunPipeline = _Simplygon.EErrorCodes_FailedToRunPipeline
EErrorCodes_UnhandledException = _Simplygon.EErrorCodes_UnhandledException
EErrorCodes_FailedToUploadFreeLicenseAsset = _Simplygon.EErrorCodes_FailedToUploadFreeLicenseAsset
EErrorCodes_FailedToResolveLicenseServerHostName = _Simplygon.EErrorCodes_FailedToResolveLicenseServerHostName
EErrorCodes_FailedToConnectToLicenseServer = _Simplygon.EErrorCodes_FailedToConnectToLicenseServer
EErrorCodes_FailedToConnectToLicenseServerAndSendData = _Simplygon.EErrorCodes_FailedToConnectToLicenseServerAndSendData
EErrorCodes_FailedToConnectToLicenseServerAndReceiveData = _Simplygon.EErrorCodes_FailedToConnectToLicenseServerAndReceiveData
EErrorCodes_DataFromLicenseServerIsCorrupt = _Simplygon.EErrorCodes_DataFromLicenseServerIsCorrupt
EErrorCodes_LicenseHasExpired = _Simplygon.EErrorCodes_LicenseHasExpired
EErrorCodes_LicenseIsInvalid = _Simplygon.EErrorCodes_LicenseIsInvalid
EErrorCodes_LicenseNotForThisProduct = _Simplygon.EErrorCodes_LicenseNotForThisProduct
EErrorCodes_NoNetworkCardFound = _Simplygon.EErrorCodes_NoNetworkCardFound
EErrorCodes_LicenseDecodeFailed = _Simplygon.EErrorCodes_LicenseDecodeFailed
EErrorCodes_LicenseLockNotMatchingMachine = _Simplygon.EErrorCodes_LicenseLockNotMatchingMachine
EErrorCodes_ConnectionToLicenseServerLost = _Simplygon.EErrorCodes_ConnectionToLicenseServerLost
EErrorCodes_LicenseHashDataCorrupt = _Simplygon.EErrorCodes_LicenseHashDataCorrupt
EErrorCodes_LicenseExpired = _Simplygon.EErrorCodes_LicenseExpired
EErrorCodes_LicenseNotLockedForThisMachine = _Simplygon.EErrorCodes_LicenseNotLockedForThisMachine
EErrorCodes_YourLicenseRequiresLatestWindows10 = _Simplygon.EErrorCodes_YourLicenseRequiresLatestWindows10
EErrorCodes_LicenseServerReturnedBadRequest = _Simplygon.EErrorCodes_LicenseServerReturnedBadRequest
EErrorCodes_UnknownLicenseKey = _Simplygon.EErrorCodes_UnknownLicenseKey
EErrorCodes_LicenseIsNotActive = _Simplygon.EErrorCodes_LicenseIsNotActive
EErrorCodes_MaxNodesReachForThisLicense = _Simplygon.EErrorCodes_MaxNodesReachForThisLicense
EErrorCodes_YourLicenseRequiresLatestSimplygon = _Simplygon.EErrorCodes_YourLicenseRequiresLatestSimplygon
EErrorCodes_LicenseServerReturnServerError = _Simplygon.EErrorCodes_LicenseServerReturnServerError
EProcessStatus_Finished = _Simplygon.EProcessStatus_Finished
EProcessStatus_Skipped = _Simplygon.EProcessStatus_Skipped
EGeometryValidationCodes_NoError = _Simplygon.EGeometryValidationCodes_NoError
EGeometryValidationCodes_NanFloat = _Simplygon.EGeometryValidationCodes_NanFloat
EGeometryValidationCodes_IllegalTriangleCount = _Simplygon.EGeometryValidationCodes_IllegalTriangleCount
EGeometryValidationCodes_IllegalVertexCount = _Simplygon.EGeometryValidationCodes_IllegalVertexCount
EGeometryValidationCodes_IllegalIndices = _Simplygon.EGeometryValidationCodes_IllegalIndices
EGeometryValidationCodes_IllegalTriangle = _Simplygon.EGeometryValidationCodes_IllegalTriangle
EGeometryValidationCodes_IllegalFieldItemCount = _Simplygon.EGeometryValidationCodes_IllegalFieldItemCount
EGeometryValidationCodes_IllegalFieldTupleCount = _Simplygon.EGeometryValidationCodes_IllegalFieldTupleCount
EGeometryValidationCodes_IllegalFieldTupleSize = _Simplygon.EGeometryValidationCodes_IllegalFieldTupleSize
EGeometryValidationCodes_IllegalFieldItemValue = _Simplygon.EGeometryValidationCodes_IllegalFieldItemValue
EGeometryValidationCodes_ZeroAreaTriangle = _Simplygon.EGeometryValidationCodes_ZeroAreaTriangle
EGeometryValidationCodes_IllegalBoneTupleSize = _Simplygon.EGeometryValidationCodes_IllegalBoneTupleSize
EGeometryValidationCodes_MissingObject = _Simplygon.EGeometryValidationCodes_MissingObject
EGeometryValidationCodes_IllegalBone = _Simplygon.EGeometryValidationCodes_IllegalBone
EGeometryValidationCodes_ZeroLengthNormal = _Simplygon.EGeometryValidationCodes_ZeroLengthNormal
EGeometryValidationCodes_LargeFloat = _Simplygon.EGeometryValidationCodes_LargeFloat
EGeometryValidationCodes_DenormalFloat = _Simplygon.EGeometryValidationCodes_DenormalFloat
EGeometryValidationCodes_IllegalSceneNodeGuid = _Simplygon.EGeometryValidationCodes_IllegalSceneNodeGuid
EStopCondition_Any = _Simplygon.EStopCondition_Any
EStopCondition_All = _Simplygon.EStopCondition_All
EReductionHeuristics_Fast = _Simplygon.EReductionHeuristics_Fast
EReductionHeuristics_Consistent = _Simplygon.EReductionHeuristics_Consistent
EDataCreationPreferences_OnlyUseOriginalData = _Simplygon.EDataCreationPreferences_OnlyUseOriginalData
EDataCreationPreferences_PreferOriginalData = _Simplygon.EDataCreationPreferences_PreferOriginalData
EDataCreationPreferences_PreferOptimizedResult = _Simplygon.EDataCreationPreferences_PreferOptimizedResult
ESurfaceTransferMode_Fast = _Simplygon.ESurfaceTransferMode_Fast
ESurfaceTransferMode_Accurate = _Simplygon.ESurfaceTransferMode_Accurate
EAtlasFillMode_Interpolate = _Simplygon.EAtlasFillMode_Interpolate
EAtlasFillMode_NearestNeighbor = _Simplygon.EAtlasFillMode_NearestNeighbor
EAtlasFillMode_NoFill = _Simplygon.EAtlasFillMode_NoFill
EDitherPatterns_NoDither = _Simplygon.EDitherPatterns_NoDither
EDitherPatterns_FloydSteinberg = _Simplygon.EDitherPatterns_FloydSteinberg
EDitherPatterns_JarvisJudiceNinke = _Simplygon.EDitherPatterns_JarvisJudiceNinke
EDitherPatterns_Sierra = _Simplygon.EDitherPatterns_Sierra
EOcclusionMode_Occluder = _Simplygon.EOcclusionMode_Occluder
EOcclusionMode_Occludee = _Simplygon.EOcclusionMode_Occludee
EOcclusionMode_Standard = _Simplygon.EOcclusionMode_Standard
ETangentSpaceMethod_OrthonormalRightHanded = _Simplygon.ETangentSpaceMethod_OrthonormalRightHanded
ETangentSpaceMethod_Autodesk3dsMax = _Simplygon.ETangentSpaceMethod_Autodesk3dsMax
ETangentSpaceMethod_OrthonormalLeftHanded = _Simplygon.ETangentSpaceMethod_OrthonormalLeftHanded
ETangentSpaceMethod_MikkTSpace = _Simplygon.ETangentSpaceMethod_MikkTSpace
EValidationFrequency_Normal = _Simplygon.EValidationFrequency_Normal
EValidationFrequency_Core = _Simplygon.EValidationFrequency_Core
EValidationFrequency_Ultra = _Simplygon.EValidationFrequency_Ultra
ETextureBlendType_Replace = _Simplygon.ETextureBlendType_Replace
ETextureBlendType_Add = _Simplygon.ETextureBlendType_Add
ETextureBlendType_Subtract = _Simplygon.ETextureBlendType_Subtract
ETextureBlendType_Multiply = _Simplygon.ETextureBlendType_Multiply
ETextureBlendType_Alpha = _Simplygon.ETextureBlendType_Alpha
ETextureBlendType_PreMultipliedAlpha = _Simplygon.ETextureBlendType_PreMultipliedAlpha
ETextureBlendType_Over = _Simplygon.ETextureBlendType_Over
ETextureBlendType_In = _Simplygon.ETextureBlendType_In
ETextureBlendType_Out = _Simplygon.ETextureBlendType_Out
ETextureBlendType_AddWAlpha = _Simplygon.ETextureBlendType_AddWAlpha
ETextureBlendType_SubtractWAlpha = _Simplygon.ETextureBlendType_SubtractWAlpha
ETextureBlendType_MultiplyWAlpha = _Simplygon.ETextureBlendType_MultiplyWAlpha
ETextureWrapMode_Wrap = _Simplygon.ETextureWrapMode_Wrap
ETextureWrapMode_Clamp = _Simplygon.ETextureWrapMode_Clamp
ETextureWrapMode_Mirror = _Simplygon.ETextureWrapMode_Mirror
EMaterialBlendMode_Opaque = _Simplygon.EMaterialBlendMode_Opaque
EMaterialBlendMode_Mask = _Simplygon.EMaterialBlendMode_Mask
EMaterialBlendMode_Blend = _Simplygon.EMaterialBlendMode_Blend
EImageInputFormat_Unsupported = _Simplygon.EImageInputFormat_Unsupported
EImageInputFormat_BMP = _Simplygon.EImageInputFormat_BMP
EImageInputFormat_DDS = _Simplygon.EImageInputFormat_DDS
EImageInputFormat_GIF = _Simplygon.EImageInputFormat_GIF
EImageInputFormat_JPEG = _Simplygon.EImageInputFormat_JPEG
EImageInputFormat_PNG = _Simplygon.EImageInputFormat_PNG
EImageInputFormat_TGA = _Simplygon.EImageInputFormat_TGA
EImageInputFormat_TIFF = _Simplygon.EImageInputFormat_TIFF
EImageInputFormat_PSD = _Simplygon.EImageInputFormat_PSD
EImageInputFormat_EXR = _Simplygon.EImageInputFormat_EXR
EImageOutputFormat_BMP = _Simplygon.EImageOutputFormat_BMP
EImageOutputFormat_DDS = _Simplygon.EImageOutputFormat_DDS
EImageOutputFormat_JPEG = _Simplygon.EImageOutputFormat_JPEG
EImageOutputFormat_PNG = _Simplygon.EImageOutputFormat_PNG
EImageOutputFormat_TGA = _Simplygon.EImageOutputFormat_TGA
EImageOutputFormat_TIFF = _Simplygon.EImageOutputFormat_TIFF
EImageOutputFormat_EXR = _Simplygon.EImageOutputFormat_EXR
EDDSCompressionType_NoCompression = _Simplygon.EDDSCompressionType_NoCompression
EDDSCompressionType_BC1 = _Simplygon.EDDSCompressionType_BC1
EDDSCompressionType_BC2 = _Simplygon.EDDSCompressionType_BC2
EDDSCompressionType_BC3 = _Simplygon.EDDSCompressionType_BC3
EDDSCompressionType_BC4 = _Simplygon.EDDSCompressionType_BC4
EDDSCompressionType_BC5 = _Simplygon.EDDSCompressionType_BC5
ETexcoordGeneratorType_Parameterizer = _Simplygon.ETexcoordGeneratorType_Parameterizer
ETexcoordGeneratorType_ChartAggregator = _Simplygon.ETexcoordGeneratorType_ChartAggregator
EChartAggregatorMode_TextureSizeProportions = _Simplygon.EChartAggregatorMode_TextureSizeProportions
EChartAggregatorMode_SurfaceArea = _Simplygon.EChartAggregatorMode_SurfaceArea
EChartAggregatorMode_OriginalPixelDensity = _Simplygon.EChartAggregatorMode_OriginalPixelDensity
EChartAggregatorMode_UVSizeProportions = _Simplygon.EChartAggregatorMode_UVSizeProportions
ESurfaceAreaScale_LargestInstance = _Simplygon.ESurfaceAreaScale_LargestInstance
ESurfaceAreaScale_SmallestInstance = _Simplygon.ESurfaceAreaScale_SmallestInstance
ESurfaceAreaScale_Average = _Simplygon.ESurfaceAreaScale_Average
EFlipFacesAndNormals_NoFlip = _Simplygon.EFlipFacesAndNormals_NoFlip
EFlipFacesAndNormals_Automatic = _Simplygon.EFlipFacesAndNormals_Automatic
EFlipFacesAndNormals_MakeDoubleSided = _Simplygon.EFlipFacesAndNormals_MakeDoubleSided
EFlipFacesAndNormals_InvertFaces = _Simplygon.EFlipFacesAndNormals_InvertFaces
EFlipFacesAndNormals_InvertNormals = _Simplygon.EFlipFacesAndNormals_InvertNormals
EFlipFacesAndNormals_InvertFacesAndNormals = _Simplygon.EFlipFacesAndNormals_InvertFacesAndNormals
ECameraType_Perspective = _Simplygon.ECameraType_Perspective
ECameraType_Orthographic = _Simplygon.ECameraType_Orthographic
ECameraType_Omnidirectional = _Simplygon.ECameraType_Omnidirectional
EComputeVisibilityMode_DirectX = _Simplygon.EComputeVisibilityMode_DirectX
EComputeVisibilityMode_Software = _Simplygon.EComputeVisibilityMode_Software
EMaterialType_Standard = _Simplygon.EMaterialType_Standard
EMaterialType_Flipbook = _Simplygon.EMaterialType_Flipbook
EMaterialType_BillboardCloud = _Simplygon.EMaterialType_BillboardCloud
ESettingValueType_Invalid = _Simplygon.ESettingValueType_Invalid
ESettingValueType_Bool = _Simplygon.ESettingValueType_Bool
ESettingValueType_Int = _Simplygon.ESettingValueType_Int
ESettingValueType_Uint = _Simplygon.ESettingValueType_Uint
ESettingValueType_Double = _Simplygon.ESettingValueType_Double
ESettingValueType_String = _Simplygon.ESettingValueType_String
ESettingValueType_EPipelineRunMode = _Simplygon.ESettingValueType_EPipelineRunMode
ESettingValueType_EChartAggregatorMode = _Simplygon.ESettingValueType_EChartAggregatorMode
ESettingValueType_ETexcoordGeneratorType = _Simplygon.ESettingValueType_ETexcoordGeneratorType
ESettingValueType_EOcclusionMode = _Simplygon.ESettingValueType_EOcclusionMode
ESettingValueType_EStopCondition = _Simplygon.ESettingValueType_EStopCondition
ESettingValueType_EDataCreationPreferences = _Simplygon.ESettingValueType_EDataCreationPreferences
ESettingValueType_EReductionHeuristics = _Simplygon.ESettingValueType_EReductionHeuristics
ESettingValueType_EWeightsFromColorMode = _Simplygon.ESettingValueType_EWeightsFromColorMode
ESettingValueType_ESurfaceTransferMode = _Simplygon.ESettingValueType_ESurfaceTransferMode
ESettingValueType_ERemeshingMode = _Simplygon.ESettingValueType_ERemeshingMode
ESettingValueType_ETangentSpaceMethod = _Simplygon.ESettingValueType_ETangentSpaceMethod
ESettingValueType_EGeometryDataFieldType = _Simplygon.ESettingValueType_EGeometryDataFieldType
ESettingValueType_EAtlasFillMode = _Simplygon.ESettingValueType_EAtlasFillMode
ESettingValueType_EDitherPatterns = _Simplygon.ESettingValueType_EDitherPatterns
ESettingValueType_EComputeVisibilityMode = _Simplygon.ESettingValueType_EComputeVisibilityMode
ESettingValueType_ESurfaceAreaScale = _Simplygon.ESettingValueType_ESurfaceAreaScale
ESettingValueType_EImpostorType = _Simplygon.ESettingValueType_EImpostorType
ESettingValueType_ESymmetryAxis = _Simplygon.ESettingValueType_ESymmetryAxis
ESettingValueType_EPixelFormat = _Simplygon.ESettingValueType_EPixelFormat
ESettingValueType_EColorComponent = _Simplygon.ESettingValueType_EColorComponent
ESettingValueType_EHoleFilling = _Simplygon.ESettingValueType_EHoleFilling
ESettingValueType_EImageInputFormat = _Simplygon.ESettingValueType_EImageInputFormat
ESettingValueType_EImageOutputFormat = _Simplygon.ESettingValueType_EImageOutputFormat
ESettingValueType_EDDSCompressionType = _Simplygon.ESettingValueType_EDDSCompressionType
ESettingValueType_EBillboardMode = _Simplygon.ESettingValueType_EBillboardMode
ESettingValueType_EOpacityType = _Simplygon.ESettingValueType_EOpacityType
ESettingValueType_EInputSceneValidationActionType = _Simplygon.ESettingValueType_EInputSceneValidationActionType
EPipelineRunMode_RunInThisProcess = _Simplygon.EPipelineRunMode_RunInThisProcess
EPipelineRunMode_RunInNewProcess = _Simplygon.EPipelineRunMode_RunInNewProcess
EPipelineRunMode_RunDistributedUsingSimplygonGrid = _Simplygon.EPipelineRunMode_RunDistributedUsingSimplygonGrid
EPipelineRunMode_RunDistributedUsingIncredibuild = _Simplygon.EPipelineRunMode_RunDistributedUsingIncredibuild
EPipelineRunMode_RunDistributedUsingFastbuild = _Simplygon.EPipelineRunMode_RunDistributedUsingFastbuild
EGeometryDataFieldType_Coords = _Simplygon.EGeometryDataFieldType_Coords
EGeometryDataFieldType_TexCoords = _Simplygon.EGeometryDataFieldType_TexCoords
EGeometryDataFieldType_Normals = _Simplygon.EGeometryDataFieldType_Normals
EGeometryDataFieldType_Tangents = _Simplygon.EGeometryDataFieldType_Tangents
EGeometryDataFieldType_Bitangents = _Simplygon.EGeometryDataFieldType_Bitangents
EGeometryDataFieldType_Colors = _Simplygon.EGeometryDataFieldType_Colors
EGeometryDataFieldType_TriangleIds = _Simplygon.EGeometryDataFieldType_TriangleIds
EGeometryDataFieldType_MaterialIds = _Simplygon.EGeometryDataFieldType_MaterialIds
EWeightsFromColorMode_Standard = _Simplygon.EWeightsFromColorMode_Standard
EWeightsFromColorMode_High = _Simplygon.EWeightsFromColorMode_High
EWeightsFromColorMode_Low = _Simplygon.EWeightsFromColorMode_Low
ERemeshingMode_Outside = _Simplygon.ERemeshingMode_Outside
ERemeshingMode_Inside = _Simplygon.ERemeshingMode_Inside
ERemeshingMode_Manual = _Simplygon.ERemeshingMode_Manual
EHoleFilling_Disabled = _Simplygon.EHoleFilling_Disabled
EHoleFilling_Low = _Simplygon.EHoleFilling_Low
EHoleFilling_Medium = _Simplygon.EHoleFilling_Medium
EHoleFilling_High = _Simplygon.EHoleFilling_High
EImpostorType_BillboardCloud = _Simplygon.EImpostorType_BillboardCloud
EImpostorType_Flipbook = _Simplygon.EImpostorType_Flipbook
EImpostorType_FromSingleView = _Simplygon.EImpostorType_FromSingleView
ESymmetryAxis_X = _Simplygon.ESymmetryAxis_X
ESymmetryAxis_Y = _Simplygon.ESymmetryAxis_Y
ESymmetryAxis_Z = _Simplygon.ESymmetryAxis_Z
EPixelFormat_R8G8B8A8 = _Simplygon.EPixelFormat_R8G8B8A8
EPixelFormat_R8G8B8 = _Simplygon.EPixelFormat_R8G8B8
EPixelFormat_R8 = _Simplygon.EPixelFormat_R8
EPixelFormat_R16G16B16A16 = _Simplygon.EPixelFormat_R16G16B16A16
EPixelFormat_R16G16B16 = _Simplygon.EPixelFormat_R16G16B16
EPixelFormat_R16 = _Simplygon.EPixelFormat_R16
EPixelFormat_R32G32B32A32F = _Simplygon.EPixelFormat_R32G32B32A32F
EColorComponent_Red = _Simplygon.EColorComponent_Red
EColorComponent_Green = _Simplygon.EColorComponent_Green
EColorComponent_Blue = _Simplygon.EColorComponent_Blue
EColorComponent_Alpha = _Simplygon.EColorComponent_Alpha
EShaderLanguage_HLSL_4_0 = _Simplygon.EShaderLanguage_HLSL_4_0
EShaderLanguage_GLSL_4_0 = _Simplygon.EShaderLanguage_GLSL_4_0
EBillboardMode_OuterShell = _Simplygon.EBillboardMode_OuterShell
EBillboardMode_Foliage = _Simplygon.EBillboardMode_Foliage
EOpacityType_Opacity = _Simplygon.EOpacityType_Opacity
EOpacityType_Transparency = _Simplygon.EOpacityType_Transparency
ELogDecoration_NoDecorations = _Simplygon.ELogDecoration_NoDecorations
ELogDecoration_Timestamp = _Simplygon.ELogDecoration_Timestamp
ELogDecoration_Thread = _Simplygon.ELogDecoration_Thread
ELogDecoration_Category = _Simplygon.ELogDecoration_Category
ELogDecoration_AllDecorations = _Simplygon.ELogDecoration_AllDecorations
ELogLevel_Fatal = _Simplygon.ELogLevel_Fatal
ELogLevel_Error = _Simplygon.ELogLevel_Error
ELogLevel_Warning = _Simplygon.ELogLevel_Warning
ELogLevel_Info = _Simplygon.ELogLevel_Info
ELogLevel_Debug = _Simplygon.ELogLevel_Debug
EInputSceneValidationActionType_Ignore = _Simplygon.EInputSceneValidationActionType_Ignore
EInputSceneValidationActionType_LogOnlyFatal = _Simplygon.EInputSceneValidationActionType_LogOnlyFatal
EInputSceneValidationActionType_LogAll = _Simplygon.EInputSceneValidationActionType_LogAll
EInputSceneValidationActionType_Skip = _Simplygon.EInputSceneValidationActionType_Skip
EInputSceneValidationActionType_RaiseError = _Simplygon.EInputSceneValidationActionType_RaiseError
class ColorStruct(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr
    r = property(_Simplygon.ColorStruct_r_get, _Simplygon.ColorStruct_r_set)
    g = property(_Simplygon.ColorStruct_g_get, _Simplygon.ColorStruct_g_set)
    b = property(_Simplygon.ColorStruct_b_get, _Simplygon.ColorStruct_b_set)
    a = property(_Simplygon.ColorStruct_a_get, _Simplygon.ColorStruct_a_set)

    def __init__(self):
        _Simplygon.ColorStruct_swiginit(self, _Simplygon.new_ColorStruct())
    __swig_destroy__ = _Simplygon.delete_ColorStruct

_Simplygon.ColorStruct_swigregister(ColorStruct)
cvar = _Simplygon.cvar
SG_NUM_SUPPORTED_TEXTURE_CHANNELS = cvar.SG_NUM_SUPPORTED_TEXTURE_CHANNELS
SG_NUM_SUPPORTED_COLOR_CHANNELS = cvar.SG_NUM_SUPPORTED_COLOR_CHANNELS
SG_NUM_SUPPORTED_BONES_PER_VERTEX = cvar.SG_NUM_SUPPORTED_BONES_PER_VERTEX
SG_NUM_SUPPORTED_MAPPING_LAYERS = cvar.SG_NUM_SUPPORTED_MAPPING_LAYERS
SG_NUM_SUPPORTED_CUSTOM_NODE_INPUTS = cvar.SG_NUM_SUPPORTED_CUSTOM_NODE_INPUTS
SG_SUPPORTED_CUSTOM_NODE_SHADER_CODE_SIZE = cvar.SG_SUPPORTED_CUSTOM_NODE_SHADER_CODE_SIZE
SG_MAXIMUM_IMPORTANCE_VALUE = cvar.SG_MAXIMUM_IMPORTANCE_VALUE
SG_MAXIMUM_MAPPING_IMAGE_INPUT_MATERIAL_COUNT = cvar.SG_MAXIMUM_MAPPING_IMAGE_INPUT_MATERIAL_COUNT
SG_MAXIMUM_MAPPING_IMAGE_OUTPUT_MATERIAL_COUNT = cvar.SG_MAXIMUM_MAPPING_IMAGE_OUTPUT_MATERIAL_COUNT
SG_MAXIMUM_PARAMETERIZER_OUTPUT_MATERIAL_COUNT = cvar.SG_MAXIMUM_PARAMETERIZER_OUTPUT_MATERIAL_COUNT
SG_MAXIMUM_CHART_AGGREGATOR_OUTPUT_MATERIAL_COUNT = cvar.SG_MAXIMUM_CHART_AGGREGATOR_OUTPUT_MATERIAL_COUNT
REAL_MIN = cvar.REAL_MIN
REAL_MAX = cvar.REAL_MAX

class ShadingColor(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.ShadingColor_swiginit(self, _Simplygon.new_ShadingColor(*args))
    r = property(_Simplygon.ShadingColor_r_get, _Simplygon.ShadingColor_r_set)
    g = property(_Simplygon.ShadingColor_g_get, _Simplygon.ShadingColor_g_set)
    b = property(_Simplygon.ShadingColor_b_get, _Simplygon.ShadingColor_b_set)
    a = property(_Simplygon.ShadingColor_a_get, _Simplygon.ShadingColor_a_set)
    __swig_destroy__ = _Simplygon.delete_ShadingColor

_Simplygon.ShadingColor_swigregister(ShadingColor)

class spBoolData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spBoolData_swiginit(self, _Simplygon.new_spBoolData(*args))

    def Data(self):
        return _Simplygon.spBoolData_Data(self)

    def GetItem(self, index: int) -> bool:
        return _Simplygon.spBoolData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spBoolData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spBoolData

_Simplygon.spBoolData_swigregister(spBoolData)

class spCharData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spCharData_swiginit(self, _Simplygon.new_spCharData(*args))

    def Data(self) -> str:
        return _Simplygon.spCharData_Data(self)

    def GetItem(self, index: int) -> int:
        return _Simplygon.spCharData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spCharData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spCharData

_Simplygon.spCharData_swigregister(spCharData)

class spUnsignedCharData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spUnsignedCharData_swiginit(self, _Simplygon.new_spUnsignedCharData(*args))

    def Data(self):
        return _Simplygon.spUnsignedCharData_Data(self)

    def GetItem(self, index: int) -> int:
        return _Simplygon.spUnsignedCharData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spUnsignedCharData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spUnsignedCharData

_Simplygon.spUnsignedCharData_swigregister(spUnsignedCharData)

class spShortData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spShortData_swiginit(self, _Simplygon.new_spShortData(*args))

    def Data(self):
        return _Simplygon.spShortData_Data(self)

    def GetItem(self, index: int) -> int:
        return _Simplygon.spShortData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spShortData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spShortData

_Simplygon.spShortData_swigregister(spShortData)

class spUnsignedShortData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spUnsignedShortData_swiginit(self, _Simplygon.new_spUnsignedShortData(*args))

    def Data(self):
        return _Simplygon.spUnsignedShortData_Data(self)

    def GetItem(self, index: int) -> int:
        return _Simplygon.spUnsignedShortData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spUnsignedShortData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spUnsignedShortData

_Simplygon.spUnsignedShortData_swigregister(spUnsignedShortData)

class spIntData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spIntData_swiginit(self, _Simplygon.new_spIntData(*args))

    def Data(self):
        return _Simplygon.spIntData_Data(self)

    def GetItem(self, index: int) -> int:
        return _Simplygon.spIntData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spIntData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spIntData

_Simplygon.spIntData_swigregister(spIntData)

class spUnsignedIntData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spUnsignedIntData_swiginit(self, _Simplygon.new_spUnsignedIntData(*args))

    def Data(self):
        return _Simplygon.spUnsignedIntData_Data(self)

    def GetItem(self, index: int) -> int:
        return _Simplygon.spUnsignedIntData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spUnsignedIntData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spUnsignedIntData

_Simplygon.spUnsignedIntData_swigregister(spUnsignedIntData)

class spLongData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spLongData_swiginit(self, _Simplygon.new_spLongData(*args))

    def Data(self):
        return _Simplygon.spLongData_Data(self)

    def GetItem(self, index: int) -> int:
        return _Simplygon.spLongData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spLongData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spLongData

_Simplygon.spLongData_swigregister(spLongData)

class spUnsignedLongData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spUnsignedLongData_swiginit(self, _Simplygon.new_spUnsignedLongData(*args))

    def Data(self):
        return _Simplygon.spUnsignedLongData_Data(self)

    def GetItem(self, index: int) -> int:
        return _Simplygon.spUnsignedLongData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spUnsignedLongData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spUnsignedLongData

_Simplygon.spUnsignedLongData_swigregister(spUnsignedLongData)

class spFloatData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spFloatData_swiginit(self, _Simplygon.new_spFloatData(*args))

    def Data(self):
        return _Simplygon.spFloatData_Data(self)

    def GetItem(self, index: int) -> float:
        return _Simplygon.spFloatData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spFloatData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spFloatData

_Simplygon.spFloatData_swigregister(spFloatData)

class spDoubleData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spDoubleData_swiginit(self, _Simplygon.new_spDoubleData(*args))

    def Data(self):
        return _Simplygon.spDoubleData_Data(self)

    def GetItem(self, index: int) -> float:
        return _Simplygon.spDoubleData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spDoubleData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spDoubleData

_Simplygon.spDoubleData_swigregister(spDoubleData)

class spRealData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spRealData_swiginit(self, _Simplygon.new_spRealData(*args))

    def Data(self):
        return _Simplygon.spRealData_Data(self)

    def GetItem(self, index: int) -> float:
        return _Simplygon.spRealData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spRealData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spRealData

_Simplygon.spRealData_swigregister(spRealData)

class spRidData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spRidData_swiginit(self, _Simplygon.new_spRidData(*args))

    def Data(self):
        return _Simplygon.spRidData_Data(self)

    def GetItem(self, index: int) -> int:
        return _Simplygon.spRidData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spRidData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spRidData

_Simplygon.spRidData_swigregister(spRidData)

class spRhandleData(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def __init__(self, *args):
        _Simplygon.spRhandleData_swiginit(self, _Simplygon.new_spRhandleData(*args))

    def Data(self):
        return _Simplygon.spRhandleData_Data(self)

    def GetItem(self, index: int):
        return _Simplygon.spRhandleData_GetItem(self, index)

    def GetItemCount(self) -> int:
        return _Simplygon.spRhandleData_GetItemCount(self)
    __swig_destroy__ = _Simplygon.delete_spRhandleData

_Simplygon.spRhandleData_swigregister(spRhandleData)

class spObject(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr
    __swig_destroy__ = _Simplygon.delete_spObject

    def IsNull(self) -> bool:
        return _Simplygon.spObject_IsNull(self)

    def IsSameObjectAs(self, p: spObject) -> bool:
        return _Simplygon.spObject_IsSameObjectAs(self, p)

    def GetClass(self) -> str:
        return _Simplygon.spObject_GetClass(self)

    def IsA(self, type: str) -> bool:
        return _Simplygon.spObject_IsA(self, type)

    @staticmethod
    def IsClassA(type: str) -> bool:
        return _Simplygon.spObject_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spObject:
        return _Simplygon.spObject_SafeCast(other)

    def PrintInfo(self) -> None:
        return _Simplygon.spObject_PrintInfo(self)

    def SetName(self, Name: str) -> None:
        return _Simplygon.spObject_SetName(self, Name)

    def GetName(self) -> str:
        return _Simplygon.spObject_GetName(self)

    def AddObserver(self, observer) -> int:
        return _Simplygon.spObject_AddObserver(self, observer)

    def RemoveObserver(self, observerId: int) -> None:
        return _Simplygon.spObject_RemoveObserver(self, observerId)

    def SetUserData(self, name: str, data, size: int) -> None:
        return _Simplygon.spObject_SetUserData(self, name, data, size)

    def GetUserData(self, name: str) -> spUnsignedCharData:
        return _Simplygon.spObject_GetUserData(self, name)

    def _GetAPI(self):
        return _Simplygon.spObject__GetAPI(self)

    def _GetHandle(self):
        return _Simplygon.spObject__GetHandle(self)

_Simplygon.spObject_swigregister(spObject)

def spObject_IsClassA(type: str) -> bool:
    return _Simplygon.spObject_IsClassA(type)

def spObject_SafeCast(other: spObject) -> spObject:
    return _Simplygon.spObject_SafeCast(other)

class spArray(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spArray:
        """! * 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 
        """

        return _Simplygon.spArray_SafeCast(other)

    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spArray_GetAlternativeName(self)

    __swig_destroy__ = _Simplygon.delete_spArray

_Simplygon.spArray_swigregister(spArray)

def spArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spArray_IsClassA(type)

def spArray_SafeCast(other: spObject) -> spArray:
    """! * 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 
    """

    return _Simplygon.spArray_SafeCast(other)

class spValueArray(spArray):
    """!ValueArray adds methods to arrays to generically add, set and get tuples, through real values."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spValueArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spValueArray:
        """! * 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 
        """

        return _Simplygon.spValueArray_SafeCast(other)

    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spValueArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spValueArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spValueArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spValueArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spValueArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spValueArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spValueArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spValueArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spValueArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spValueArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spValueArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spValueArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spValueArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spValueArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spValueArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spValueArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spValueArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spValueArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spValueArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spValueArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spValueArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spValueArray_GetAlternativeName(self)


    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spValueArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spValueArray_GetRealItem(self, id)

    __swig_destroy__ = _Simplygon.delete_spValueArray

_Simplygon.spValueArray_swigregister(spValueArray)

def spValueArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spValueArray_IsClassA(type)

def spValueArray_SafeCast(other: spObject) -> spValueArray:
    """! * 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 
    """

    return _Simplygon.spValueArray_SafeCast(other)

class spBoolArray(spValueArray):
    """!BoolArray is the bool implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spBoolArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spBoolArray:
        """! * 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 
        """

        return _Simplygon.spBoolArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spBoolArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spBoolArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spBoolArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spBoolArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spBoolArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spBoolArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spBoolArray_GetAlternativeName(self)


    def AddItem(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_AddItem(self, value)


    def SetItem(self, id: int, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> bool:
        """! * 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(). 
        """

        return _Simplygon.spBoolArray_GetItem(self, id)


    def AddTuple(self, tuple_boolInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_AddTuple(self, tuple_boolInputDataPtr)


    def SetTuple(self, id: int, tuple_boolInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_SetTuple(self, id, tuple_boolInputDataPtr)


    def GetTuple(self, id: int) -> spBoolData:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_GetTuple(self, id)


    def GetData(self) -> spBoolData:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spBoolData:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_boolInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_SetData(self, source_items_boolInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_boolInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_SetDataRange(self, start_tuple_id, source_items_boolInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoolArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spBoolArray

_Simplygon.spBoolArray_swigregister(spBoolArray)

def spBoolArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spBoolArray_IsClassA(type)

def spBoolArray_SafeCast(other: spObject) -> spBoolArray:
    """! * 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 
    """

    return _Simplygon.spBoolArray_SafeCast(other)

class spCharArray(spValueArray):
    """!CharArray is the char implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spCharArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spCharArray:
        """! * 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 
        """

        return _Simplygon.spCharArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spCharArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spCharArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spCharArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spCharArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spCharArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spCharArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spCharArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spCharArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spCharArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spCharArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spCharArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spCharArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spCharArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spCharArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spCharArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spCharArray_GetAlternativeName(self)


    def AddItem(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_AddItem(self, value)


    def SetItem(self, id: int, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> int:
        """! * 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(). 
        """

        return _Simplygon.spCharArray_GetItem(self, id)


    def AddTuple(self, tuple_charInputDataPtr: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_AddTuple(self, tuple_charInputDataPtr)


    def SetTuple(self, id: int, tuple_charInputDataPtr: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_SetTuple(self, id, tuple_charInputDataPtr)


    def GetTuple(self, id: int) -> spCharData:
        """! * 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. 
        """

        return _Simplygon.spCharArray_GetTuple(self, id)


    def GetData(self) -> spCharData:
        """! * 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. 
        """

        return _Simplygon.spCharArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spCharData:
        """! * 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. 
        """

        return _Simplygon.spCharArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_charInputDataPtr: str, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_SetData(self, source_items_charInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_charInputDataPtr: str, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_SetDataRange(self, start_tuple_id, source_items_charInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spCharArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spCharArray

_Simplygon.spCharArray_swigregister(spCharArray)

def spCharArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spCharArray_IsClassA(type)

def spCharArray_SafeCast(other: spObject) -> spCharArray:
    """! * 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 
    """

    return _Simplygon.spCharArray_SafeCast(other)

class spDoubleArray(spValueArray):
    """!DoubleArray is the double implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spDoubleArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spDoubleArray:
        """! * 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 
        """

        return _Simplygon.spDoubleArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spDoubleArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spDoubleArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spDoubleArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spDoubleArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spDoubleArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spDoubleArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spDoubleArray_GetAlternativeName(self)


    def AddItem(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_AddItem(self, value)


    def SetItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> float:
        """! * 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(). 
        """

        return _Simplygon.spDoubleArray_GetItem(self, id)


    def AddTuple(self, tuple_doubleInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_AddTuple(self, tuple_doubleInputDataPtr)


    def SetTuple(self, id: int, tuple_doubleInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_SetTuple(self, id, tuple_doubleInputDataPtr)


    def GetTuple(self, id: int) -> spDoubleData:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_GetTuple(self, id)


    def GetData(self) -> spDoubleData:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spDoubleData:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_doubleInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_SetData(self, source_items_doubleInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_doubleInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_SetDataRange(self, start_tuple_id, source_items_doubleInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDoubleArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spDoubleArray

_Simplygon.spDoubleArray_swigregister(spDoubleArray)

def spDoubleArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spDoubleArray_IsClassA(type)

def spDoubleArray_SafeCast(other: spObject) -> spDoubleArray:
    """! * 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 
    """

    return _Simplygon.spDoubleArray_SafeCast(other)

class spFloatArray(spValueArray):
    """!FloatArray is the float implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spFloatArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spFloatArray:
        """! * 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 
        """

        return _Simplygon.spFloatArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spFloatArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spFloatArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spFloatArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spFloatArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spFloatArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spFloatArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spFloatArray_GetAlternativeName(self)


    def AddItem(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_AddItem(self, value)


    def SetItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> float:
        """! * 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(). 
        """

        return _Simplygon.spFloatArray_GetItem(self, id)


    def AddTuple(self, tuple_floatInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_AddTuple(self, tuple_floatInputDataPtr)


    def SetTuple(self, id: int, tuple_floatInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_SetTuple(self, id, tuple_floatInputDataPtr)


    def GetTuple(self, id: int) -> spFloatData:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_GetTuple(self, id)


    def GetData(self) -> spFloatData:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spFloatData:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_floatInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_SetData(self, source_items_floatInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_floatInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_SetDataRange(self, start_tuple_id, source_items_floatInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFloatArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spFloatArray

_Simplygon.spFloatArray_swigregister(spFloatArray)

def spFloatArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spFloatArray_IsClassA(type)

def spFloatArray_SafeCast(other: spObject) -> spFloatArray:
    """! * 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 
    """

    return _Simplygon.spFloatArray_SafeCast(other)

class spIntArray(spValueArray):
    """!IntArray is the int implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spIntArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spIntArray:
        """! * 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 
        """

        return _Simplygon.spIntArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spIntArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spIntArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spIntArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spIntArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spIntArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spIntArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spIntArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spIntArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spIntArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spIntArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spIntArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spIntArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spIntArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spIntArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spIntArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spIntArray_GetAlternativeName(self)


    def AddItem(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_AddItem(self, value)


    def SetItem(self, id: int, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> int:
        """! * 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(). 
        """

        return _Simplygon.spIntArray_GetItem(self, id)


    def AddTuple(self, tuple_intInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_AddTuple(self, tuple_intInputDataPtr)


    def SetTuple(self, id: int, tuple_intInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_SetTuple(self, id, tuple_intInputDataPtr)


    def GetTuple(self, id: int) -> spIntData:
        """! * 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. 
        """

        return _Simplygon.spIntArray_GetTuple(self, id)


    def GetData(self) -> spIntData:
        """! * 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. 
        """

        return _Simplygon.spIntArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spIntData:
        """! * 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. 
        """

        return _Simplygon.spIntArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_intInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_SetData(self, source_items_intInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_intInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_SetDataRange(self, start_tuple_id, source_items_intInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spIntArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spIntArray

_Simplygon.spIntArray_swigregister(spIntArray)

def spIntArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spIntArray_IsClassA(type)

def spIntArray_SafeCast(other: spObject) -> spIntArray:
    """! * 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 
    """

    return _Simplygon.spIntArray_SafeCast(other)

class spLongArray(spValueArray):
    """!LongArray is the long implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spLongArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spLongArray:
        """! * 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 
        """

        return _Simplygon.spLongArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spLongArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spLongArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spLongArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spLongArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spLongArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spLongArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spLongArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spLongArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spLongArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spLongArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spLongArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spLongArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spLongArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spLongArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spLongArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spLongArray_GetAlternativeName(self)


    def AddItem(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_AddItem(self, value)


    def SetItem(self, id: int, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> int:
        """! * 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(). 
        """

        return _Simplygon.spLongArray_GetItem(self, id)


    def AddTuple(self, tuple_longInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_AddTuple(self, tuple_longInputDataPtr)


    def SetTuple(self, id: int, tuple_longInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_SetTuple(self, id, tuple_longInputDataPtr)


    def GetTuple(self, id: int) -> spLongData:
        """! * 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. 
        """

        return _Simplygon.spLongArray_GetTuple(self, id)


    def GetData(self) -> spLongData:
        """! * 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. 
        """

        return _Simplygon.spLongArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spLongData:
        """! * 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. 
        """

        return _Simplygon.spLongArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_longInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_SetData(self, source_items_longInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_longInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_SetDataRange(self, start_tuple_id, source_items_longInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spLongArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spLongArray

_Simplygon.spLongArray_swigregister(spLongArray)

def spLongArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spLongArray_IsClassA(type)

def spLongArray_SafeCast(other: spObject) -> spLongArray:
    """! * 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 
    """

    return _Simplygon.spLongArray_SafeCast(other)

class spRealArray(spValueArray):
    """!RealArray is the real implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spRealArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spRealArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spRealArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spRealArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spRealArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRealArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRealArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRealArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spRealArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spRealArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRealArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRealArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spRealArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spRealArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spRealArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spRealArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spRealArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spRealArray_GetAlternativeName(self)


    def AddItem(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_AddItem(self, value)


    def SetItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> float:
        """! * 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(). 
        """

        return _Simplygon.spRealArray_GetItem(self, id)


    def AddTuple(self, tuple_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_AddTuple(self, tuple_realInputDataPtr)


    def SetTuple(self, id: int, tuple_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_SetTuple(self, id, tuple_realInputDataPtr)


    def GetTuple(self, id: int) -> spRealData:
        """! * 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. 
        """

        return _Simplygon.spRealArray_GetTuple(self, id)


    def GetData(self) -> spRealData:
        """! * 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. 
        """

        return _Simplygon.spRealArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spRealData:
        """! * 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. 
        """

        return _Simplygon.spRealArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_realInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_SetData(self, source_items_realInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_realInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_SetDataRange(self, start_tuple_id, source_items_realInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRealArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spRealArray

_Simplygon.spRealArray_swigregister(spRealArray)

def spRealArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spRealArray_IsClassA(type)

def spRealArray_SafeCast(other: spObject) -> spRealArray:
    """! * 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 
    """

    return _Simplygon.spRealArray_SafeCast(other)

class spRidArray(spValueArray):
    """!RidArray is the rid implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spRidArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spRidArray:
        """! * 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 
        """

        return _Simplygon.spRidArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spRidArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spRidArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spRidArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRidArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRidArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRidArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spRidArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spRidArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRidArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRidArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spRidArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spRidArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spRidArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spRidArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spRidArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spRidArray_GetAlternativeName(self)


    def AddItem(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_AddItem(self, value)


    def SetItem(self, id: int, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> int:
        """! * 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(). 
        """

        return _Simplygon.spRidArray_GetItem(self, id)


    def AddTuple(self, tuple_ridInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_AddTuple(self, tuple_ridInputDataPtr)


    def SetTuple(self, id: int, tuple_ridInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_SetTuple(self, id, tuple_ridInputDataPtr)


    def GetTuple(self, id: int) -> spRidData:
        """! * 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. 
        """

        return _Simplygon.spRidArray_GetTuple(self, id)


    def GetData(self) -> spRidData:
        """! * 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. 
        """

        return _Simplygon.spRidArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spRidData:
        """! * 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. 
        """

        return _Simplygon.spRidArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_ridInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_SetData(self, source_items_ridInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_ridInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_SetDataRange(self, start_tuple_id, source_items_ridInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRidArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spRidArray

_Simplygon.spRidArray_swigregister(spRidArray)

def spRidArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spRidArray_IsClassA(type)

def spRidArray_SafeCast(other: spObject) -> spRidArray:
    """! * 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 
    """

    return _Simplygon.spRidArray_SafeCast(other)

class spShortArray(spValueArray):
    """!ShortArray is the short implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShortArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShortArray:
        """! * 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 
        """

        return _Simplygon.spShortArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spShortArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spShortArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spShortArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spShortArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spShortArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spShortArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spShortArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spShortArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spShortArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spShortArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spShortArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spShortArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spShortArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spShortArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spShortArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spShortArray_GetAlternativeName(self)


    def AddItem(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_AddItem(self, value)


    def SetItem(self, id: int, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> int:
        """! * 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(). 
        """

        return _Simplygon.spShortArray_GetItem(self, id)


    def AddTuple(self, tuple_shortInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_AddTuple(self, tuple_shortInputDataPtr)


    def SetTuple(self, id: int, tuple_shortInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_SetTuple(self, id, tuple_shortInputDataPtr)


    def GetTuple(self, id: int) -> spShortData:
        """! * 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. 
        """

        return _Simplygon.spShortArray_GetTuple(self, id)


    def GetData(self) -> spShortData:
        """! * 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. 
        """

        return _Simplygon.spShortArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spShortData:
        """! * 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. 
        """

        return _Simplygon.spShortArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_shortInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_SetData(self, source_items_shortInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_shortInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_SetDataRange(self, start_tuple_id, source_items_shortInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShortArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spShortArray

_Simplygon.spShortArray_swigregister(spShortArray)

def spShortArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShortArray_IsClassA(type)

def spShortArray_SafeCast(other: spObject) -> spShortArray:
    """! * 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 
    """

    return _Simplygon.spShortArray_SafeCast(other)

class spUnsignedCharArray(spValueArray):
    """!UnsignedCharArray is the uchar implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spUnsignedCharArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spUnsignedCharArray:
        """! * 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 
        """

        return _Simplygon.spUnsignedCharArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spUnsignedCharArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spUnsignedCharArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spUnsignedCharArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spUnsignedCharArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spUnsignedCharArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spUnsignedCharArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spUnsignedCharArray_GetAlternativeName(self)


    def AddItem(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_AddItem(self, value)


    def SetItem(self, id: int, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> int:
        """! * 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(). 
        """

        return _Simplygon.spUnsignedCharArray_GetItem(self, id)


    def AddTuple(self, tuple_ucharInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_AddTuple(self, tuple_ucharInputDataPtr)


    def SetTuple(self, id: int, tuple_ucharInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_SetTuple(self, id, tuple_ucharInputDataPtr)


    def GetTuple(self, id: int) -> spUnsignedCharData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_GetTuple(self, id)


    def GetData(self) -> spUnsignedCharData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spUnsignedCharData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_ucharInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_SetData(self, source_items_ucharInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_ucharInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_SetDataRange(self, start_tuple_id, source_items_ucharInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedCharArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spUnsignedCharArray

_Simplygon.spUnsignedCharArray_swigregister(spUnsignedCharArray)

def spUnsignedCharArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spUnsignedCharArray_IsClassA(type)

def spUnsignedCharArray_SafeCast(other: spObject) -> spUnsignedCharArray:
    """! * 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 
    """

    return _Simplygon.spUnsignedCharArray_SafeCast(other)

class spUnsignedIntArray(spValueArray):
    """!UnsignedIntArray is the uint implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spUnsignedIntArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spUnsignedIntArray:
        """! * 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 
        """

        return _Simplygon.spUnsignedIntArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spUnsignedIntArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spUnsignedIntArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spUnsignedIntArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spUnsignedIntArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spUnsignedIntArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spUnsignedIntArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spUnsignedIntArray_GetAlternativeName(self)


    def AddItem(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_AddItem(self, value)


    def SetItem(self, id: int, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> int:
        """! * 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(). 
        """

        return _Simplygon.spUnsignedIntArray_GetItem(self, id)


    def AddTuple(self, tuple_uintInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_AddTuple(self, tuple_uintInputDataPtr)


    def SetTuple(self, id: int, tuple_uintInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_SetTuple(self, id, tuple_uintInputDataPtr)


    def GetTuple(self, id: int) -> spUnsignedIntData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_GetTuple(self, id)


    def GetData(self) -> spUnsignedIntData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spUnsignedIntData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_uintInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_SetData(self, source_items_uintInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_uintInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_SetDataRange(self, start_tuple_id, source_items_uintInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedIntArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spUnsignedIntArray

_Simplygon.spUnsignedIntArray_swigregister(spUnsignedIntArray)

def spUnsignedIntArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spUnsignedIntArray_IsClassA(type)

def spUnsignedIntArray_SafeCast(other: spObject) -> spUnsignedIntArray:
    """! * 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 
    """

    return _Simplygon.spUnsignedIntArray_SafeCast(other)

class spUnsignedLongArray(spValueArray):
    """!UnsignedLongArray is the ulong implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spUnsignedLongArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spUnsignedLongArray:
        """! * 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 
        """

        return _Simplygon.spUnsignedLongArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spUnsignedLongArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spUnsignedLongArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spUnsignedLongArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spUnsignedLongArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spUnsignedLongArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spUnsignedLongArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spUnsignedLongArray_GetAlternativeName(self)


    def AddItem(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_AddItem(self, value)


    def SetItem(self, id: int, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> int:
        """! * 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(). 
        """

        return _Simplygon.spUnsignedLongArray_GetItem(self, id)


    def AddTuple(self, tuple_ulongInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_AddTuple(self, tuple_ulongInputDataPtr)


    def SetTuple(self, id: int, tuple_ulongInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_SetTuple(self, id, tuple_ulongInputDataPtr)


    def GetTuple(self, id: int) -> spUnsignedLongData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_GetTuple(self, id)


    def GetData(self) -> spUnsignedLongData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spUnsignedLongData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_ulongInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_SetData(self, source_items_ulongInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_ulongInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_SetDataRange(self, start_tuple_id, source_items_ulongInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedLongArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spUnsignedLongArray

_Simplygon.spUnsignedLongArray_swigregister(spUnsignedLongArray)

def spUnsignedLongArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spUnsignedLongArray_IsClassA(type)

def spUnsignedLongArray_SafeCast(other: spObject) -> spUnsignedLongArray:
    """! * 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 
    """

    return _Simplygon.spUnsignedLongArray_SafeCast(other)

class spUnsignedShortArray(spValueArray):
    """!UnsignedShortArray is the ushort implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spUnsignedShortArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spUnsignedShortArray:
        """! * 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 
        """

        return _Simplygon.spUnsignedShortArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spUnsignedShortArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spUnsignedShortArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spUnsignedShortArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spUnsignedShortArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spUnsignedShortArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spUnsignedShortArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spUnsignedShortArray_GetAlternativeName(self)


    def AddItem(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_AddItem(self, value)


    def SetItem(self, id: int, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> int:
        """! * 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(). 
        """

        return _Simplygon.spUnsignedShortArray_GetItem(self, id)


    def AddTuple(self, tuple_ushortInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_AddTuple(self, tuple_ushortInputDataPtr)


    def SetTuple(self, id: int, tuple_ushortInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_SetTuple(self, id, tuple_ushortInputDataPtr)


    def GetTuple(self, id: int) -> spUnsignedShortData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_GetTuple(self, id)


    def GetData(self) -> spUnsignedShortData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_GetData(self)


    def GetDataRange(self, start_tuple_id: int, tuple_count: int) -> spUnsignedShortData:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_GetDataRange(self, start_tuple_id, tuple_count)


    def SetData(self, source_items_ushortInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_SetData(self, source_items_ushortInputDataPtr, source_item_count)


    def SetDataRange(self, start_tuple_id: int, source_items_ushortInputDataPtr, source_item_count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_SetDataRange(self, start_tuple_id, source_items_ushortInputDataPtr, source_item_count)


    def SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count: int, item_stride: int, tuple_stride: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spUnsignedShortArray_SetDataFromMemoryPtr(self, mem_area_voidInputDataPtr, source_tuple_count, item_stride, tuple_stride)

    __swig_destroy__ = _Simplygon.delete_spUnsignedShortArray

_Simplygon.spUnsignedShortArray_swigregister(spUnsignedShortArray)

def spUnsignedShortArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spUnsignedShortArray_IsClassA(type)

def spUnsignedShortArray_SafeCast(other: spObject) -> spUnsignedShortArray:
    """! * 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 
    """

    return _Simplygon.spUnsignedShortArray_SafeCast(other)

class spChunkedImageData(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spChunkedImageData_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spChunkedImageData:
        """! * 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 
        """

        return _Simplygon.spChunkedImageData_SafeCast(other)

    def NewCopy(self, copy_data: bool) -> spChunkedImageData:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_NewCopy(self, copy_data)


    def DeepCopy(self, source: spChunkedImageData, copy_data: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spChunkedImageData_DeepCopy(self, source, copy_data)


    def SetTemplateImage(self, _template: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_SetTemplateImage(self, _template)


    def GetTemplateXSize(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spChunkedImageData_GetTemplateXSize(self)


    def GetTemplateYSize(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spChunkedImageData_GetTemplateYSize(self)


    def GetTemplateZSize(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spChunkedImageData_GetTemplateZSize(self)


    def GetXSize(self) -> int:
        """! * The number of image chunks in the X dimension. 
         * @return The number of image chunks in the X dimension. 
        """

        return _Simplygon.spChunkedImageData_GetXSize(self)


    def GetYSize(self) -> int:
        """! * The number of image chunks in the Y dimension. 
         * @return The number of image chunks in the Y dimension. 
        """

        return _Simplygon.spChunkedImageData_GetYSize(self)


    def GetZSize(self) -> int:
        """! * The number of image chunks in the Z dimension. 
         * @return The number of image chunks in the Z dimension. 
        """

        return _Simplygon.spChunkedImageData_GetZSize(self)


    def Set1DSize(self, _xs: int) -> None:
        """! * The number of image chunks in the X dimension. 
         * @param _xs The desired number of chunks in the X dimension. 
        """

        return _Simplygon.spChunkedImageData_Set1DSize(self, _xs)


    def Set2DSize(self, _xs: int, _ys: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_Set2DSize(self, _xs, _ys)


    def Set3DSize(self, _xs: int, _ys: int, _zs: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_Set3DSize(self, _xs, _ys, _zs)


    def GetTotalXSize(self) -> int:
        """! * The total X dimension size of the full image. 
         * @return The total X dimension size of the full image. 
        """

        return _Simplygon.spChunkedImageData_GetTotalXSize(self)


    def GetTotalYSize(self) -> int:
        """! * The total Y dimension size of the full image. 
         * @return The total Y dimension size of the full image. 
        """

        return _Simplygon.spChunkedImageData_GetTotalYSize(self)


    def GetTotalZSize(self) -> int:
        """! * The total Z dimension size of the full image. 
         * @return The total Z dimension size of the full image. 
        """

        return _Simplygon.spChunkedImageData_GetTotalZSize(self)


    def Reset(self) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spChunkedImageData_Reset(self)


    def LockChunk1D(self, x: int) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_LockChunk1D(self, x)


    def LockChunk2D(self, x: int, y: int) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_LockChunk2D(self, x, y)


    def LockChunk3D(self, x: int, y: int, z: int) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_LockChunk3D(self, x, y, z)


    def IsChunkLocked1D(self, x: int) -> bool:
        """! * Returns true if a chunk is locked. The method is thread-safe. 
         * @param x X coordinate of the chunk. 
        """

        return _Simplygon.spChunkedImageData_IsChunkLocked1D(self, x)


    def IsChunkLocked2D(self, x: int, y: int) -> bool:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_IsChunkLocked2D(self, x, y)


    def IsChunkLocked3D(self, x: int, y: int, z: int) -> bool:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_IsChunkLocked3D(self, x, y, z)


    def UnlockChunk1D(self, x: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_UnlockChunk1D(self, x)


    def UnlockChunk2D(self, x: int, y: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_UnlockChunk2D(self, x, y)


    def UnlockChunk3D(self, x: int, y: int, z: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spChunkedImageData_UnlockChunk3D(self, x, y, z)

    __swig_destroy__ = _Simplygon.delete_spChunkedImageData

_Simplygon.spChunkedImageData_swigregister(spChunkedImageData)

def spChunkedImageData_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spChunkedImageData_IsClassA(type)

def spChunkedImageData_SafeCast(other: spObject) -> spChunkedImageData:
    """! * 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 
    """

    return _Simplygon.spChunkedImageData_SafeCast(other)

class spDirectXRenderer(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spDirectXRenderer_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spDirectXRenderer:
        """! * 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 
        """

        return _Simplygon.spDirectXRenderer_SafeCast(other)

    def CreatePreviewer(self, _width: int, _height: int) -> bool:
        """! * 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. 
        """

        return _Simplygon.spDirectXRenderer_CreatePreviewer(self, _width, _height)


    def RenderAlongCameraPathAndStorePics(self, cameraSelectionSetID: int, file_name_base: str, format: str) -> None:
        """! * 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). 
        """

        return _Simplygon.spDirectXRenderer_RenderAlongCameraPathAndStorePics(self, cameraSelectionSetID, file_name_base, format)


    def SetRenderWireFrameMode(self, flag: bool) -> None:
        """! * The render mode to wire frame. 
         * @param flag True if render mode should be enabled. 
        """

        return _Simplygon.spDirectXRenderer_SetRenderWireFrameMode(self, flag)


    def SetBackgroundColor(self, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spDirectXRenderer_SetBackgroundColor(self, r, g, b, a)


    def GetBackgroundColor(self) -> spRealData:
        """! * The current background color of the renderer. 
         * @return The returned data array. The array contains 4 items. 
        """

        return _Simplygon.spDirectXRenderer_GetBackgroundColor(self)


    def SetUseInMemoryShaderGeneration(self, flag: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spDirectXRenderer_SetUseInMemoryShaderGeneration(self, flag)


    def GetUseInMemoryShaderGeneration(self) -> bool:
        """! * Use in-memory shader generation instead of creating a temporary .fx file on disk. 
         * Needs to be called after CreatePreviewer to have any effect. 
        """

        return _Simplygon.spDirectXRenderer_GetUseInMemoryShaderGeneration(self)


    def LoadGeometryData(self, geom: spGeometryData, materials: spMaterialTable) -> bool:
        """! * @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. 
        """

        return _Simplygon.spDirectXRenderer_LoadGeometryData(self, geom, materials)


    def LoadGeometryDataWithMaterialShadingNetwork(self, _scene: spScene) -> bool:
        """! * @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. 
        """

        return _Simplygon.spDirectXRenderer_LoadGeometryDataWithMaterialShadingNetwork(self, _scene)


    def SetScene(self, _scene: spScene) -> None:
        """! * 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. 
        """

        return _Simplygon.spDirectXRenderer_SetScene(self, _scene)


    def InitializeSceneRenderData(self) -> bool:
        """! * Initialize scene geometry's and generates material shaders for rendering. 
         * @return True if the scene render data was correctly initialized. 
        """

        return _Simplygon.spDirectXRenderer_InitializeSceneRenderData(self)

    __swig_destroy__ = _Simplygon.delete_spDirectXRenderer

_Simplygon.spDirectXRenderer_swigregister(spDirectXRenderer)

def spDirectXRenderer_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spDirectXRenderer_IsClassA(type)

def spDirectXRenderer_SafeCast(other: spObject) -> spDirectXRenderer:
    """! * 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 
    """

    return _Simplygon.spDirectXRenderer_SafeCast(other)

class spFieldData(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spFieldData_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spFieldData:
        """! * 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 
        """

        return _Simplygon.spFieldData_SafeCast(other)

    def NewCopy(self, copy_data: bool) -> spFieldData:
        """! * 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. 
        """

        return _Simplygon.spFieldData_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spFieldData:
        """! * 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. 
        """

        return _Simplygon.spFieldData_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spFieldData, copy_data: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_DeepCopy(self, source, copy_data)


    def IsSetupIdenticalTo(self, other: spFieldData) -> bool:
        """! * 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. 
        """

        return _Simplygon.spFieldData_IsSetupIdenticalTo(self, other)


    def IndexedCopy(self, source: spFieldData, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_IndexedCopy(self, source, idtable, startId)


    def IndexedCombine(self, source: spFieldData, idtable: spRidArray, blendtable: spRealArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_IndexedCombine(self, source, idtable, blendtable, startId)


    def IndexedCombine3(self, source: spFieldData, idtable: spRidArray, blendtable: spRealArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_IndexedCombine3(self, source, idtable, blendtable, startId)


    def Clear(self) -> None:
        """! * Clears all tuples from the fields. The fields, however, are not removed. 
        """

        return _Simplygon.spFieldData_Clear(self)


    def RemoveAllFields(self) -> None:
        """! * Clears all fields from the object. Releases all data in the object. 
        """

        return _Simplygon.spFieldData_RemoveAllFields(self)


    def IsEmpty(self) -> int:
        """! * Returns 1 if no tuples exist in the field data. 
         * @return 1 if empty, else 0 
        """

        return _Simplygon.spFieldData_IsEmpty(self)


    def AppendTuples(self, other: spFieldData, add_missing_fields: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_AppendTuples(self, other, add_missing_fields)


    def ExtractTuples(self, dest: spFieldData, start: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_ExtractTuples(self, dest, start, count)


    def AddField(self, field: spValueArray) -> None:
        """! * Adds a field. The field must have a unique name set. 
         * @param field The array to add to the field data. 
        """

        return _Simplygon.spFieldData_AddField(self, field)


    def AddBaseTypeField(self, base_type, tuple_size: int, name: str) -> spValueArray:
        """! * 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 
        """

        return _Simplygon.spFieldData_AddBaseTypeField(self, base_type, tuple_size, name)


    def GetField(self, name: str) -> spValueArray:
        """! * 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. 
        """

        return _Simplygon.spFieldData_GetField(self, name)


    def GetFieldWithId(self, id: int) -> spValueArray:
        """! * 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. 
        """

        return _Simplygon.spFieldData_GetFieldWithId(self, id)


    def RemoveField(self, name: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_RemoveField(self, name)


    def SafeRemoveField(self, name: str) -> None:
        """! * Removes a field. Removing a field causes the remaining fields to be remapped 
         * to new ids. 
         * @param name The name of the field. 
        """

        return _Simplygon.spFieldData_SafeRemoveField(self, name)


    def GetFieldCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spFieldData_GetFieldCount(self)


    def GetMaxFieldId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spFieldData_GetMaxFieldId(self)


    def GetFirstFieldHandle(self):
        """! * Returns the handle of the first field, or null if no fields are added to the 
         * object. 
         * @return The handle of the first field. 
        """

        return _Simplygon.spFieldData_GetFirstFieldHandle(self)


    def GetNextFieldHandle(self, hand):
        """! * 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. 
        """

        return _Simplygon.spFieldData_GetNextFieldHandle(self, hand)


    def GetFieldWithHandle(self, hand) -> spValueArray:
        """! * Returns the field associated with the specified handle. 
         * @param hand The handle to the requested field. 
         * @return The requested field 
        """

        return _Simplygon.spFieldData_GetFieldWithHandle(self, hand)


    def SetTupleCount(self, tuplecount: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_SetTupleCount(self, tuplecount)


    def GetTupleCount(self) -> int:
        """! * Resizes/Gets the list to the specified tuple count. If the list is enlarged, 
         * the new tuples will contain unspecified data. 
        """

        return _Simplygon.spFieldData_GetTupleCount(self)


    def AddTupleCount(self, tuplecount: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_AddTupleCount(self, tuplecount)


    def GetMaxTupleId(self) -> int:
        """! * 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 
        """

        return _Simplygon.spFieldData_GetMaxTupleId(self)


    def CopyTuple(self, source: spFieldData, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_CopyTuple(self, source, dest_id, src_id)


    def CopyCombineTuples(self, source: spFieldData, dest_id: int, src_id_1: int, src_id_2: int, alpha: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_CopyCombineTuples(self, source, dest_id, src_id_1, src_id_2, alpha)


    def CopyCombine3Tuples(self, source: spFieldData, dest_id: int, src_id_1: int, src_id_2: int, src_id_3: int, alpha_1: float, alpha_2: float) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spFieldData_CopyCombine3Tuples(self, source, dest_id, src_id_1, src_id_2, src_id_3, alpha_1, alpha_2)


    def CopyRange(self, source: spFieldData, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFieldData_CopyRange(self, source, start_dest_id, start_src_id, count)

    __swig_destroy__ = _Simplygon.delete_spFieldData

_Simplygon.spFieldData_swigregister(spFieldData)

def spFieldData_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spFieldData_IsClassA(type)

def spFieldData_SafeCast(other: spObject) -> spFieldData:
    """! * 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 
    """

    return _Simplygon.spFieldData_SafeCast(other)

class spGeometryData(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGeometryData_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGeometryData:
        """! * 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 
        """

        return _Simplygon.spGeometryData_SafeCast(other)

    def NewCopy(self, copy_data: bool) -> spGeometryData:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_NewCopy(self, copy_data)


    def NewPackedCopy(self) -> spPackedGeometryData:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_NewPackedCopy(self)


    def DeepCopy(self, source: spGeometryData, copy_data: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spGeometryData_DeepCopy(self, source, copy_data)


    def SetVertexCount(self, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_SetVertexCount(self, count)


    def GetVertexCount(self) -> int:
        """! * The number of vertices in the geometry. 
        """

        return _Simplygon.spGeometryData_GetVertexCount(self)


    def AddVertices(self, count: int) -> None:
        """! * Increases the vertex count by the specified value. 
         * @param count The number of vertices to add. 
        """

        return _Simplygon.spGeometryData_AddVertices(self, count)


    def SetTriangleCount(self, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_SetTriangleCount(self, count)


    def GetTriangleCount(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spGeometryData_GetTriangleCount(self)


    def AddTriangles(self, count: int) -> None:
        """! * AddTriangles increases the triangle count by the specified value. 
         * @param count The number of new triangles to add. 
        """

        return _Simplygon.spGeometryData_AddTriangles(self, count)


    def FindEdgeIdsFromVertexPairs(self, vertex_pairs: spRidArray, edge_ids: spRidArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_FindEdgeIdsFromVertexPairs(self, vertex_pairs, edge_ids)


    def GetCoords(self) -> spRealArray:
        """! * The Coords field in the vertices. (Field name: "Coords", Tuple size: 3 , Stored 
         * as: Vertex attribute) 
         * @return The array of coords. 
        """

        return _Simplygon.spGeometryData_GetCoords(self)


    def AddVertexLocks(self) -> None:
        """! * 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) 
        """

        return _Simplygon.spGeometryData_AddVertexLocks(self)


    def RemoveVertexLocks(self) -> None:
        """! * 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) 
        """

        return _Simplygon.spGeometryData_RemoveVertexLocks(self)


    def GetVertexLocks(self) -> spBoolArray:
        """! * 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 _Simplygon.spGeometryData_GetVertexLocks(self)


    def AddBoneWeights(self, tuplesize: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_AddBoneWeights(self, tuplesize)


    def RemoveBoneWeights(self) -> None:
        """! * 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) 
        """

        return _Simplygon.spGeometryData_RemoveBoneWeights(self)


    def GetBoneWeights(self) -> spRealArray:
        """! * The BoneWeights field in the vertices. (Field name: "BoneWeights", Tuple size: 
         * varying , Stored as: Vertex attribute) 
         * @return The array containing the bone weights 
        """

        return _Simplygon.spGeometryData_GetBoneWeights(self)


    def GetBoneIds(self) -> spRidArray:
        """! * 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 
        """

        return _Simplygon.spGeometryData_GetBoneIds(self)


    def AddVertexWeights(self) -> None:
        """! * 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) 
         *  
        """

        return _Simplygon.spGeometryData_AddVertexWeights(self)


    def RemoveVertexWeights(self) -> None:
        """! * 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) 
         *  
        """

        return _Simplygon.spGeometryData_RemoveVertexWeights(self)


    def GetVertexWeights(self) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spGeometryData_GetVertexWeights(self)


    def AddUserVertexField(self, field: spValueArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_AddUserVertexField(self, field)


    def RemoveUserVertexField(self, name: str) -> None:
        """! * Removes a user-specified vertex field. 
         * @param name The name of the user vertex field to be removed from the GeometryData 
         * object. 
        """

        return _Simplygon.spGeometryData_RemoveUserVertexField(self, name)


    def GetUserVertexField(self, name: str) -> spValueArray:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_GetUserVertexField(self, name)


    def AddBaseTypeUserVertexField(self, base_type, name: str, tuple_size: int) -> spValueArray:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_AddBaseTypeUserVertexField(self, base_type, name, tuple_size)


    def CopyVertex(self, source: spGeometryData, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CopyVertex(self, source, dest_id, src_id)


    def CopyCombineVertices(self, source: spGeometryData, dest_id: int, src_id_1: int, src_id_2: int, alpha: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CopyCombineVertices(self, source, dest_id, src_id_1, src_id_2, alpha)


    def CopyCombine3Vertices(self, source: spGeometryData, dest_id: int, src_id_1: int, src_id_2: int, src_id_3: int, alpha_1: float, alpha_2: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CopyCombine3Vertices(self, source, dest_id, src_id_1, src_id_2, src_id_3, alpha_1, alpha_2)


    def GetVertices(self) -> spFieldData:
        """! * Retrieves the IFieldData object that contains the vertex fields. 
         * @return The vertex fields. 
        """

        return _Simplygon.spGeometryData_GetVertices(self)


    def GetVertexIds(self) -> spRidArray:
        """! * The VertexIds field in the corners. 
         * @return The VertexIds field. 
        """

        return _Simplygon.spGeometryData_GetVertexIds(self)


    def AddTexCoords(self, level: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_AddTexCoords(self, level)


    def AddNamedTexCoords(self, alternative_name: str) -> int:
        """! * 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'. 
        """

        return _Simplygon.spGeometryData_AddNamedTexCoords(self, alternative_name)


    def RemoveTexCoords(self, level: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_RemoveTexCoords(self, level)


    def RemoveNamedTexCoords(self, alternative_name: str) -> bool:
        """! * 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'. 
        """

        return _Simplygon.spGeometryData_RemoveNamedTexCoords(self, alternative_name)


    def GetTexCoords(self, level: int) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spGeometryData_GetTexCoords(self, level)


    def GetNamedTexCoords(self, alternative_name: str) -> spRealArray:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_GetNamedTexCoords(self, alternative_name)


    def AddTangents(self, level: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_AddTangents(self, level)


    def RemoveTangents(self, level: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_RemoveTangents(self, level)


    def GetTangents(self, level: int) -> spRealArray:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_GetTangents(self, level)


    def GetBitangents(self, level: int) -> spRealArray:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_GetBitangents(self, level)


    def AddNormals(self) -> None:
        """! * Adds the Normals field in the corners. (Field name: "Normals" , Tuple size: 3 
         * , Stored as: Corner attribute) 
        """

        return _Simplygon.spGeometryData_AddNormals(self)


    def RemoveNormals(self) -> None:
        """! * Removes the Normals field in the corners. (Field name: "Normals" , Tuple size: 
         * 3 , Stored as: Corner attribute) 
        """

        return _Simplygon.spGeometryData_RemoveNormals(self)


    def GetNormals(self) -> spRealArray:
        """! * The Normals field in the corners. (Field name: "Normals" , Tuple size: 3 , Stored 
         * as: Corner attribute) 
         * @return The normals field 
        """

        return _Simplygon.spGeometryData_GetNormals(self)


    def AddColors(self, channel: int) -> None:
        """! * 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) 
        """

        return _Simplygon.spGeometryData_AddColors(self, channel)


    def AddNamedColors(self, alternative_name: str) -> int:
        """! * 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". 
        """

        return _Simplygon.spGeometryData_AddNamedColors(self, alternative_name)


    def RemoveColors(self, level: int) -> None:
        """! * 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) 
        """

        return _Simplygon.spGeometryData_RemoveColors(self, level)


    def RemoveNamedColors(self, alternative_name: str) -> bool:
        """! * 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". 
        """

        return _Simplygon.spGeometryData_RemoveNamedColors(self, alternative_name)


    def GetColors(self, level: int) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spGeometryData_GetColors(self, level)


    def GetNamedColors(self, alternative_name: str) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spGeometryData_GetNamedColors(self, alternative_name)


    def AddUserCornerField(self, field: spValueArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_AddUserCornerField(self, field)


    def RemoveUserCornerField(self, name: str) -> None:
        """! * Removes a user-specified corner field. 
         * @param name The name of the field to remove from the GeometryData object. 
        """

        return _Simplygon.spGeometryData_RemoveUserCornerField(self, name)


    def GetUserCornerField(self, name: str) -> spValueArray:
        """! * Gets a user-specified corner field. 
         * @param name The name of the field to get. 
         * @return The requested field 
        """

        return _Simplygon.spGeometryData_GetUserCornerField(self, name)


    def AddBaseTypeUserCornerField(self, base_type, name: str, tuple_size: int) -> spValueArray:
        """! * 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 
        """

        return _Simplygon.spGeometryData_AddBaseTypeUserCornerField(self, base_type, name, tuple_size)


    def CopyCorner(self, source: spGeometryData, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CopyCorner(self, source, dest_id, src_id)


    def CopyCombineCorners(self, source: spGeometryData, dest_id: int, src_id_1: int, src_id_2: int, alpha: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CopyCombineCorners(self, source, dest_id, src_id_1, src_id_2, alpha)


    def CopyCombine3Corners(self, source: spGeometryData, dest_id: int, src_id_1: int, src_id_2: int, src_id_3: int, alpha_1: float, alpha_2: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CopyCombine3Corners(self, source, dest_id, src_id_1, src_id_2, src_id_3, alpha_1, alpha_2)


    def GetCorners(self) -> spFieldData:
        """! * Retrieves the IFieldData object that contains the corner fields. 
         * @return The corner IFieldData 
        """

        return _Simplygon.spGeometryData_GetCorners(self)


    def AddMaterialIds(self) -> None:
        """! * Adds the MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple 
         * size: 1 , Stored as: triangle attribute) 
        """

        return _Simplygon.spGeometryData_AddMaterialIds(self)


    def RemoveMaterialIds(self) -> None:
        """! * Removes the MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple 
         * size: 1 , Stored as: triangle attribute) 
        """

        return _Simplygon.spGeometryData_RemoveMaterialIds(self)


    def GetMaterialIds(self) -> spRidArray:
        """! * The MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple size: 
         * 1 , Stored as: triangle attribute) 
         * @return The MaterialIds field 
        """

        return _Simplygon.spGeometryData_GetMaterialIds(self)


    def AddGroupIds(self) -> None:
        """! * Adds the GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 
         * 1 , Stored as: triangle attribute) 
        """

        return _Simplygon.spGeometryData_AddGroupIds(self)


    def RemoveGroupIds(self) -> None:
        """! * Removes the GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 
         * 1 , Stored as: triangle attribute) 
        """

        return _Simplygon.spGeometryData_RemoveGroupIds(self)


    def GetGroupIds(self) -> spRidArray:
        """! * The GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 1 , 
         * Stored as: triangle attribute) 
        """

        return _Simplygon.spGeometryData_GetGroupIds(self)


    def AddUserTriangleField(self, field: spValueArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_AddUserTriangleField(self, field)


    def RemoveUserTriangleField(self, name: str) -> None:
        """! * Removes a user-specified triangle field. 
         * @param name The name of the triangle field to remove from the GeometryData object. 
         *  
        """

        return _Simplygon.spGeometryData_RemoveUserTriangleField(self, name)


    def GetUserTriangleField(self, name: str) -> spValueArray:
        """! * 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 
        """

        return _Simplygon.spGeometryData_GetUserTriangleField(self, name)


    def AddBaseTypeUserTriangleField(self, base_type, name: str, tuple_size: int) -> spValueArray:
        """! * 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 
        """

        return _Simplygon.spGeometryData_AddBaseTypeUserTriangleField(self, base_type, name, tuple_size)


    def CopyTriangle(self, source: spGeometryData, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CopyTriangle(self, source, dest_id, src_id)


    def CopyCombineTriangles(self, source: spGeometryData, dest_id: int, src_id_1: int, src_id_2: int, alpha: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CopyCombineTriangles(self, source, dest_id, src_id_1, src_id_2, alpha)


    def CopyCombine3Triangles(self, source: spGeometryData, dest_id: int, src_id_1: int, src_id_2: int, src_id_3: int, alpha_1: float, alpha_2: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CopyCombine3Triangles(self, source, dest_id, src_id_1, src_id_2, src_id_3, alpha_1, alpha_2)


    def GetTriangles(self) -> spFieldData:
        """! * Retrieves the IFieldData object that contains the triangle fields. 
         * @return The triangle field data object. 
        """

        return _Simplygon.spGeometryData_GetTriangles(self)


    def AddCustomField(self, field: spValueArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_AddCustomField(self, field)


    def RemoveCustomField(self, name: str) -> None:
        """! * Removes a custom field. 
         * @param name The name of the custom field to remove from the GeometryData object. 
         *  
        """

        return _Simplygon.spGeometryData_RemoveCustomField(self, name)


    def GetCustomField(self, name: str) -> spValueArray:
        """! * Gets a custom field. 
         * @param name The name of the custom field to get from the GeometryData object. 
         *  
         * @return The requested custom field 
        """

        return _Simplygon.spGeometryData_GetCustomField(self, name)


    def AddBaseTypeCustomField(self, base_type, name: str, tuple_size: int) -> spValueArray:
        """! * 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 
        """

        return _Simplygon.spGeometryData_AddBaseTypeCustomField(self, base_type, name, tuple_size)


    def CleanupNanValues(self) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CleanupNanValues(self)


    def CleanupInvalidTriangles(self) -> None:
        """! * 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(). 
        """

        return _Simplygon.spGeometryData_CleanupInvalidTriangles(self)


    def FindNamedTexCoordsIndex(self, field_name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spGeometryData_FindNamedTexCoordsIndex(self, field_name)


    def FindNamedColorsIndex(self, field_name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spGeometryData_FindNamedColorsIndex(self, field_name)


    def CreateAABB(self) -> spGeometryData:
        """! * Returns an axis aligned bounding box GeometryData of this geometry. 
         * @return The AABB GeometryData 
        """

        return _Simplygon.spGeometryData_CreateAABB(self)


    def ExpandVertices(self) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_ExpandVertices(self)


    def ExtractRange(self, dest: spGeometryData, start_tri_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_ExtractRange(self, dest, start_tri_id, count)


    def ExtractTriangles(self, dest: spGeometryData, triangle_ids: spRidArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_ExtractTriangles(self, dest, triangle_ids)


    def AppendGeometry(self, source: spGeometryData) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_AppendGeometry(self, source)


    def Compact(self, only_compact_triangles: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_Compact(self, only_compact_triangles)


    def Weld(self, threshold: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_Weld(self, threshold)


    def GetInf(self) -> spRealData:
        """! * The inferior (minimum) extent of the geometry. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spGeometryData_GetInf(self)


    def SetInf(self, vec_realInputDataPtr) -> None:
        """! * The inferior (minimum) extent of the geometry. 
         * @param vec_realInputDataPtr The new inferior. 
        """

        return _Simplygon.spGeometryData_SetInf(self, vec_realInputDataPtr)


    def GetSup(self) -> spRealData:
        """! * The superior (maximum) extent of the geometry. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spGeometryData_GetSup(self)


    def SetSup(self, vec_realInputDataPtr) -> None:
        """! * The superior (maximum) extent of the geometry. 
         * @param vec_realInputDataPtr The new superior. 
        """

        return _Simplygon.spGeometryData_SetSup(self, vec_realInputDataPtr)


    def CalculateExtents(self, only_triangles: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_CalculateExtents(self, only_triangles)


    def ExtentsContainCoords(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spGeometryData_ExtentsContainCoords(self)


    def Transform(self, transformation: spMatrix4x4) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_Transform(self, transformation)


    def DetectEdgeNeighbours(self) -> None:
        """! * Detect triangle edge neighbors. Neighbor ids are stored in the "SgEdgeNeighbours" 
         * Corner field. 
        """

        return _Simplygon.spGeometryData_DetectEdgeNeighbours(self)


    def ConvertHandedness(self) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryData_ConvertHandedness(self)


    def ChangeWinding(self) -> None:
        """! * Change winding. 
        """

        return _Simplygon.spGeometryData_ChangeWinding(self)

    __swig_destroy__ = _Simplygon.delete_spGeometryData

_Simplygon.spGeometryData_swigregister(spGeometryData)

def spGeometryData_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGeometryData_IsClassA(type)

def spGeometryData_SafeCast(other: spObject) -> spGeometryData:
    """! * 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 
    """

    return _Simplygon.spGeometryData_SafeCast(other)

class spPackedGeometryData(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spPackedGeometryData:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_SafeCast(other)

    def NewCopy(self, copy_data: bool) -> spPackedGeometryData:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_NewCopy(self, copy_data)


    def NewUnpackedCopy(self) -> spGeometryData:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_NewUnpackedCopy(self)


    def DeepCopy(self, source: spPackedGeometryData, copy_data: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_DeepCopy(self, source, copy_data)


    def AppendPackedGeometry(self, source: spGeometryData, NewVertexIds: spRidArray, collapseToOriginalVertices: bool) -> int:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_AppendPackedGeometry(self, source, NewVertexIds, collapseToOriginalVertices)


    def SetVertexCount(self, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_SetVertexCount(self, count)


    def GetVertexCount(self) -> int:
        """! * The number of vertices in the geometry. 
        """

        return _Simplygon.spPackedGeometryData_GetVertexCount(self)


    def AddVertices(self, count: int) -> None:
        """! * AddVertices increases the vertex count by the specified value. 
         * @param count The number of vertices to add. 
        """

        return _Simplygon.spPackedGeometryData_AddVertices(self, count)


    def SetTriangleCount(self, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_SetTriangleCount(self, count)


    def GetTriangleCount(self) -> int:
        """! * The number of triangles in the geometry. 
        """

        return _Simplygon.spPackedGeometryData_GetTriangleCount(self)


    def AddTriangles(self, count: int) -> None:
        """! * Increases the triangle count by the specified value. 
         * @param count The number of triangles to add. 
         * @return The current triangle count 
        """

        return _Simplygon.spPackedGeometryData_AddTriangles(self, count)


    def GetCoords(self) -> spRealArray:
        """! * The Coords field in the vertices. (Field name: "Coords", Tuple size: 3 , Stored 
         * as: Vertex attribute) 
         * @return The vertex coords array 
        """

        return _Simplygon.spPackedGeometryData_GetCoords(self)


    def AddVertexLocks(self) -> None:
        """! * 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) 
        """

        return _Simplygon.spPackedGeometryData_AddVertexLocks(self)


    def RemoveVertexLocks(self) -> None:
        """! * 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) 
        """

        return _Simplygon.spPackedGeometryData_RemoveVertexLocks(self)


    def GetVertexLocks(self) -> spBoolArray:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_GetVertexLocks(self)


    def AddBoneWeights(self, tuplesize: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spPackedGeometryData_AddBoneWeights(self, tuplesize)


    def RemoveBoneWeights(self) -> None:
        """! * 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) 
        """

        return _Simplygon.spPackedGeometryData_RemoveBoneWeights(self)


    def GetBoneWeights(self) -> spRealArray:
        """! * The BoneWeights field. (Field name: "BoneWeights", Tuple size: varying , Stored 
         * as: Vertex attribute) 
         * @return The bone weights array 
        """

        return _Simplygon.spPackedGeometryData_GetBoneWeights(self)


    def GetBoneIds(self) -> spRidArray:
        """! * The BoneIds field. (Field name: "BoneIds", Tuple size: varying , Stored as: Vertex 
         * attribute) 
         * @return The bone id array 
        """

        return _Simplygon.spPackedGeometryData_GetBoneIds(self)


    def AddVertexWeighting(self) -> None:
        """! * Adds the VertexWeighting field for the vertices. (Field name: "VertexWeights", 
         * Tuple size: 1 , Stored as: Vertex attribute) 
        """

        return _Simplygon.spPackedGeometryData_AddVertexWeighting(self)


    def RemoveVertexWeighting(self) -> None:
        """! * Removes the VertexWeighting field for the vertices. (Field name: "VertexWeights", 
         * Tuple size: 1 , Stored as: Vertex attribute) 
        """

        return _Simplygon.spPackedGeometryData_RemoveVertexWeighting(self)


    def GetVertexWeighting(self) -> spRealArray:
        """! * The VertexWeighting field for the vertices. (Field name: "VertexWeights", Tuple 
         * size: 1 , Stored as: Vertex attribute) 
         * @return The vertex weighting array 
        """

        return _Simplygon.spPackedGeometryData_GetVertexWeighting(self)


    def AddVertexWeights(self) -> None:
        """! * Adds the VertexWeights field for the vertices. (Field name: "VertexWeights", 
         * Tuple size: 1 , Stored as: Vertex attribute) 
        """

        return _Simplygon.spPackedGeometryData_AddVertexWeights(self)


    def RemoveVertexWeights(self) -> None:
        """! * Removes the VertexWeights field for the vertices. (Field name: "VertexWeights", 
         * Tuple size: 1 , Stored as: Vertex attribute) 
        """

        return _Simplygon.spPackedGeometryData_RemoveVertexWeights(self)


    def GetVertexWeights(self) -> spRealArray:
        """! * The VertexWeights field for the vertices. (Field name: "VertexWeights", Tuple 
         * size: 1 , Stored as: Vertex attribute) 
         * @return The vertex weighting array 
        """

        return _Simplygon.spPackedGeometryData_GetVertexWeights(self)


    def AddTexCoords(self, level: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_AddTexCoords(self, level)


    def AddNamedTexCoords(self, alternative_name: str) -> int:
        """! * 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'. 
        """

        return _Simplygon.spPackedGeometryData_AddNamedTexCoords(self, alternative_name)


    def RemoveTexCoords(self, level: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_RemoveTexCoords(self, level)


    def RemoveNamedTexCoords(self, alternative_name: str) -> bool:
        """! * 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'. 
        """

        return _Simplygon.spPackedGeometryData_RemoveNamedTexCoords(self, alternative_name)


    def GetTexCoords(self, level: int) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_GetTexCoords(self, level)


    def GetNamedTexCoords(self, alternative_name: str) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_GetNamedTexCoords(self, alternative_name)


    def AddTangents(self, level: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_AddTangents(self, level)


    def RemoveTangents(self, level: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_RemoveTangents(self, level)


    def GetTangents(self, level: int) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_GetTangents(self, level)


    def GetBitangents(self, level: int) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_GetBitangents(self, level)


    def AddNormals(self) -> None:
        """! * Adds the Normals field in the vertices. (Field name: "Normals" , Tuple size: 
         * 3 , Stored as: Vertex attribute) 
        """

        return _Simplygon.spPackedGeometryData_AddNormals(self)


    def RemoveNormals(self) -> None:
        """! * Removes the Normals field in the vertices. (Field name: "Normals" , Tuple size: 
         * 3 , Stored as: Vertex attribute) 
        """

        return _Simplygon.spPackedGeometryData_RemoveNormals(self)


    def GetNormals(self) -> spRealArray:
        """! * The Normals field in the vertices. (Field name: "Normals" , Tuple size: 3 , Stored 
         * as: Vertex attribute) 
         * @return The normals array 
        """

        return _Simplygon.spPackedGeometryData_GetNormals(self)


    def AddColors(self, level: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_AddColors(self, level)


    def AddNamedColors(self, alternative_name: str) -> int:
        """! * 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". 
        """

        return _Simplygon.spPackedGeometryData_AddNamedColors(self, alternative_name)


    def RemoveColors(self, level: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_RemoveColors(self, level)


    def RemoveNamedColors(self, alternative_name: str) -> bool:
        """! * 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". 
        """

        return _Simplygon.spPackedGeometryData_RemoveNamedColors(self, alternative_name)


    def GetColors(self, level: int) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_GetColors(self, level)


    def GetNamedColors(self, alternative_name: str) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_GetNamedColors(self, alternative_name)


    def AddUserVertexField(self, field: spValueArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_AddUserVertexField(self, field)


    def RemoveUserVertexField(self, name: str) -> None:
        """! * Removes a user-specified vertex field. 
         * @param name The name of the field that is to be removed. 
        """

        return _Simplygon.spPackedGeometryData_RemoveUserVertexField(self, name)


    def GetUserVertexField(self, name: str) -> spValueArray:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_GetUserVertexField(self, name)


    def AddBaseTypeUserVertexField(self, base_type, name: str, tuple_size: int) -> spValueArray:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_AddBaseTypeUserVertexField(self, base_type, name, tuple_size)


    def GetVertices(self) -> spFieldData:
        """! * Retrieves the FieldData object that contains the vertex fields. 
         * @return The vertex fields data 
        """

        return _Simplygon.spPackedGeometryData_GetVertices(self)


    def GetVertexIds(self) -> spRidArray:
        """! * The VertexIds field in the triangles. 
         * @return The vertex ids array 
        """

        return _Simplygon.spPackedGeometryData_GetVertexIds(self)


    def AddMaterialIds(self) -> None:
        """! * Adds the MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple 
         * size: 1 , Stored as: triangle attribute) 
        """

        return _Simplygon.spPackedGeometryData_AddMaterialIds(self)


    def RemoveMaterialIds(self) -> None:
        """! * Removes the MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple 
         * size: 1 , Stored as: triangle attribute) 
        """

        return _Simplygon.spPackedGeometryData_RemoveMaterialIds(self)


    def GetMaterialIds(self) -> spRidArray:
        """! * The MaterialIds field in the triangles. (Field name: "MaterialIds", Tuple size: 
         * 1 , Stored as: triangle attribute) 
         * @return The material ids array 
        """

        return _Simplygon.spPackedGeometryData_GetMaterialIds(self)


    def AddGroupIds(self) -> None:
        """! * Adds the GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 
         * 1 , Stored as: triangle attribute) 
        """

        return _Simplygon.spPackedGeometryData_AddGroupIds(self)


    def RemoveGroupIds(self) -> None:
        """! * Removes the GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 
         * 1 , Stored as: triangle attribute) 
        """

        return _Simplygon.spPackedGeometryData_RemoveGroupIds(self)


    def GetGroupIds(self) -> spRidArray:
        """! * The GroupIds field in the triangles. (Field name: "GroupIds", Tuple size: 1 , 
         * Stored as: triangle attribute) 
         * @return The material ids array 
        """

        return _Simplygon.spPackedGeometryData_GetGroupIds(self)


    def AddUserTriangleField(self, field: spValueArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_AddUserTriangleField(self, field)


    def RemoveUserTriangleField(self, name: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_RemoveUserTriangleField(self, name)


    def GetUserTriangleField(self, name: str) -> spValueArray:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_GetUserTriangleField(self, name)


    def AddBaseTypeUserTriangleField(self, base_type, name: str, tuple_size: int) -> spValueArray:
        """! * 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 
        """

        return _Simplygon.spPackedGeometryData_AddBaseTypeUserTriangleField(self, base_type, name, tuple_size)


    def GetTriangles(self) -> spFieldData:
        """! * Retrieves the ReFieldData object that contains the triangle fields. 
         * @return The triangle fields data 
        """

        return _Simplygon.spPackedGeometryData_GetTriangles(self)


    def GetInf(self) -> spRealData:
        """! * The inferior (minimum) extent of the geometry. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spPackedGeometryData_GetInf(self)


    def SetInf(self, vec_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_SetInf(self, vec_realInputDataPtr)


    def GetSup(self) -> spRealData:
        """! * The superior (maximum) extent of the geometry. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spPackedGeometryData_GetSup(self)


    def SetSup(self, vec_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spPackedGeometryData_SetSup(self, vec_realInputDataPtr)

    __swig_destroy__ = _Simplygon.delete_spPackedGeometryData

_Simplygon.spPackedGeometryData_swigregister(spPackedGeometryData)

def spPackedGeometryData_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spPackedGeometryData_IsClassA(type)

def spPackedGeometryData_SafeCast(other: spObject) -> spPackedGeometryData:
    """! * 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 
    """

    return _Simplygon.spPackedGeometryData_SafeCast(other)

class spImageData(spObject):
    """!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)"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spImageData_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spImageData:
        """! * 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 
        """

        return _Simplygon.spImageData_SafeCast(other)

    def NewCopy(self, copy_data: bool) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spImageData_NewCopy(self, copy_data)


    def DeepCopy(self, source: spImageData, copy_data: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageData_DeepCopy(self, source, copy_data)


    def AddColors(self, valuetype, format: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageData_AddColors(self, valuetype, format)


    def RemoveColors(self) -> None:
        """! * Removes the Colors field. 
        """

        return _Simplygon.spImageData_RemoveColors(self)


    def GetColors(self) -> spValueArray:
        """! * The Colors field. 
         * @return The value array used by the colors field. 
        """

        return _Simplygon.spImageData_GetColors(self)


    def GetColorsValueType(self):
        """! * The base type used by the colors field. 
         * @return The base type used by the colors field. 
        """

        return _Simplygon.spImageData_GetColorsValueType(self)


    def HasColors(self) -> bool:
        """! * Checks if the image has a color field. 
         * @return True if the image has a color field 
        """

        return _Simplygon.spImageData_HasColors(self)


    def GetColorsFormat(self) -> str:
        """! * The color field format specification. 
         * @return The format specification string 
        """

        return _Simplygon.spImageData_GetColorsFormat(self)


    def AddField(self, name: str, valuetype, tuplesize: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageData_AddField(self, name, valuetype, tuplesize)


    def RemoveField(self, name: str) -> None:
        """! * Removes a field. 
         * @param name The name of the field to remove. 
        """

        return _Simplygon.spImageData_RemoveField(self, name)


    def GetField(self, name: str) -> spValueArray:
        """! * Gets a field. 
         * @param name The name of the field to get. 
         * @return The requested field 
        """

        return _Simplygon.spImageData_GetField(self, name)


    def GetFieldValueType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spImageData_GetFieldValueType(self, name)


    def HasField(self, name: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spImageData_HasField(self, name)


    def GetType(self) -> int:
        """! * The type of this image data. 
         * @return The type of this image data 
        """

        return _Simplygon.spImageData_GetType(self)


    def GetXSize(self) -> int:
        """! * The X dimension size of this image data. 
         * @return The X dimension size of this image data. 
        """

        return _Simplygon.spImageData_GetXSize(self)


    def GetYSize(self) -> int:
        """! * The Y dimension size of this image data. 
         * @return The Y dimension size of this image data. 
        """

        return _Simplygon.spImageData_GetYSize(self)


    def GetZSize(self) -> int:
        """! * The Z dimension size of this image data. 
         * @return The Z dimension size of this image data. 
        """

        return _Simplygon.spImageData_GetZSize(self)


    def Set1DSize(self, _xs: int) -> None:
        """! * The X dimension size of this image data. 
         * @param _xs The desired X dimension size of this image data. 
        """

        return _Simplygon.spImageData_Set1DSize(self, _xs)


    def Set2DSize(self, _xs: int, _ys: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageData_Set2DSize(self, _xs, _ys)


    def Set3DSize(self, _xs: int, _ys: int, _zs: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageData_Set3DSize(self, _xs, _ys, _zs)


    def SetCubeSize(self, _xs: int, _ys: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spImageData_SetCubeSize(self, _xs, _ys)


    def Reset(self) -> None:
        """! * Clears all data from the image, and removes all data fields. The type is reset 
         * to 2D. 
        """

        return _Simplygon.spImageData_Reset(self)


    def GetImageFields(self) -> spFieldData:
        """! * The ImageFields field data object, that holds all fields within the image. 
         * @return The ImageFields field data object. 
        """

        return _Simplygon.spImageData_GetImageFields(self)

    __swig_destroy__ = _Simplygon.delete_spImageData

_Simplygon.spImageData_swigregister(spImageData)

def spImageData_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spImageData_IsClassA(type)

def spImageData_SafeCast(other: spObject) -> spImageData:
    """! * 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 
    """

    return _Simplygon.spImageData_SafeCast(other)

class spTable(spObject):
    """!Table is the base class for tables objects, where items are added into an id-indexed array of objects. """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spTable_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spTable:
        """! * 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 
        """

        return _Simplygon.spTable_SafeCast(other)

    def AddItem(self, item: spObject) -> int:
        """! * 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 
        """

        return _Simplygon.spTable_AddItem(self, item)


    def SetItem(self, id: int, item: spObject) -> None:
        """! * 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. 
        """

        return _Simplygon.spTable_SetItem(self, id, item)


    def FindItem(self, name: str) -> spObject:
        """! * 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 
        """

        return _Simplygon.spTable_FindItem(self, name)


    def FindItemId(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spTable_FindItemId(self, name)


    def GetItem(self, id: int) -> spObject:
        """! * Returns the i:th item, using the id of the item. 
         * @param id Is the id of the requested object. 
         * @return the found object 
        """

        return _Simplygon.spTable_GetItem(self, id)


    def RemoveItem(self, id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spTable_RemoveItem(self, id)


    def Clear(self) -> None:
        """! * Clears the table, and removes all items. If AddItem is called after Clear, the 
         * item ids will start over from 0. 
        """

        return _Simplygon.spTable_Clear(self)


    def GetItemsCount(self) -> int:
        """! * 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 
        """

        return _Simplygon.spTable_GetItemsCount(self)


    def Copy(self, src: spTable) -> None:
        """! * Clears the current table and copies the items from a source table. 
         * @param src The table to copy. 
        """

        return _Simplygon.spTable_Copy(self, src)

    __swig_destroy__ = _Simplygon.delete_spTable

_Simplygon.spTable_swigregister(spTable)

def spTable_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spTable_IsClassA(type)

def spTable_SafeCast(other: spObject) -> spTable:
    """! * 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 
    """

    return _Simplygon.spTable_SafeCast(other)

class spMaterial(spObject):
    """!Material object that keeps material information used while rendering."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMaterial_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spMaterial:
        """! * 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 
        """

        return _Simplygon.spMaterial_SafeCast(other)

    def GetMaterialChannelCount(self) -> int:
        """! * Returns the number of material channels in the material. 
         * @return The current channel count 
        """

        return _Simplygon.spMaterial_GetMaterialChannelCount(self)


    def GetMaterialChannelFromIndex(self, index: int) -> str:
        """! * 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 
        """

        return _Simplygon.spMaterial_GetMaterialChannelFromIndex(self, index)


    def AddMaterialChannel(self, channel_name: str) -> None:
        """! * Add a material channel. 
         * @param channel_name The name of the material channel. 
        """

        return _Simplygon.spMaterial_AddMaterialChannel(self, channel_name)


    def RemoveMaterialChannel(self, channel_name: str) -> None:
        """! * Remove a material channel. 
         * @param channel_name The name of the material channel. 
        """

        return _Simplygon.spMaterial_RemoveMaterialChannel(self, channel_name)


    def HasMaterialChannel(self, channel_name: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMaterial_HasMaterialChannel(self, channel_name)


    def SetShadingNetwork(self, channel_name: str, node: spShadingNode) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterial_SetShadingNetwork(self, channel_name, node)


    def GetShadingNetwork(self, channel_name: str) -> spShadingNode:
        """! * 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 
        """

        return _Simplygon.spMaterial_GetShadingNetwork(self, channel_name)


    def LoadShadingNetworkFromXML(self, channel_name: str, in_xml: str) -> None:
        """! * 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 
        """

        return _Simplygon.spMaterial_LoadShadingNetworkFromXML(self, channel_name, in_xml)


    def SaveShadingNetworkToXML(self, channel_name: str) -> str:
        """! * Save shading network to XML. 
         * @param channel_name The name of the channel. 
         * @return The current shading network exit node 
        """

        return _Simplygon.spMaterial_SaveShadingNetworkToXML(self, channel_name)


    def SetUseTangentSpaceNormals(self, value: bool) -> None:
        """! * The UseTangentSpaceNormals flag. If set, the normal map has tangent space normals. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spMaterial_SetUseTangentSpaceNormals(self, value)


    def GetUseTangentSpaceNormals(self) -> bool:
        """! * The UseTangentSpaceNormals flag. If set, the normal map has tangent space normals. 
         *  
        """

        return _Simplygon.spMaterial_GetUseTangentSpaceNormals(self)


    def IsIdenticalTo(self, mat: spMaterial) -> bool:
        """! * Returns true if the material is setup identical to this material. 
         * @param mat The material to compare to. 
        """

        return _Simplygon.spMaterial_IsIdenticalTo(self, mat)


    def IsTransparent(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spMaterial_IsTransparent(self)


    def SetMaterialGUID(self, value: str) -> None:
        """! * The unique id for this node. 
         * @param value The node id of type string. 
        """

        return _Simplygon.spMaterial_SetMaterialGUID(self, value)


    def GetMaterialGUID(self) -> str:
        """! * The unique id for this node. 
        """

        return _Simplygon.spMaterial_GetMaterialGUID(self)


    def SetMaterialType(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterial_SetMaterialType(self, value)


    def GetMaterialType(self):
        """! * The material type, used to specify which shader should be used to render the 
         * material. 
        """

        return _Simplygon.spMaterial_GetMaterialType(self)


    def SetOpacityType(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterial_SetOpacityType(self, value)


    def GetOpacityType(self):
        """! * 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' 
        """

        return _Simplygon.spMaterial_GetOpacityType(self)


    def SetOpacityChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterial_SetOpacityChannel(self, value)


    def GetOpacityChannel(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spMaterial_GetOpacityChannel(self)


    def SetBlendMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterial_SetBlendMode(self, value)


    def GetBlendMode(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spMaterial_GetBlendMode(self)


    def SetOpacityCutoff(self, value: float) -> None:
        """! * The cutoff value for opacity when using mask blend mode. 
         * @param value The opacity cutoff value. 
        """

        return _Simplygon.spMaterial_SetOpacityCutoff(self, value)


    def GetOpacityCutoff(self) -> float:
        """! * The cutoff value for opacity when using mask blend mode. 
        """

        return _Simplygon.spMaterial_GetOpacityCutoff(self)


    def ChangeTexturePrefixPath(self, current_path_prefix: str, new_path_prefix: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterial_ChangeTexturePrefixPath(self, current_path_prefix, new_path_prefix)


    def SetOpacityFromDiffuseAlpha(self) -> None:
        """! * Maps the alpha component of the diffuse channel to all the RGBA components in 
         * the opacity channel (by using a swizzle node). 
        """

        return _Simplygon.spMaterial_SetOpacityFromDiffuseAlpha(self)


    def ConvertHandedness(self) -> None:
        """! * Converts parameters such as UVTiling and UVOffset in shading networks. 
        """

        return _Simplygon.spMaterial_ConvertHandedness(self)


    def GetMaterialChannels(self, channels: spStringArray) -> None:
        """! * Get all unique material channel names in the material. 
         * @param channels The array receiving unique channel names. 
        """

        return _Simplygon.spMaterial_GetMaterialChannels(self, channels)


    def GetMaterialChannelsWithTextureInputs(self, channels: spStringArray) -> None:
        """! * Get all unique material channel names having texture inputs in the material. 
         * @param channels The array receiving unique channel names. 
        """

        return _Simplygon.spMaterial_GetMaterialChannelsWithTextureInputs(self, channels)

    __swig_destroy__ = _Simplygon.delete_spMaterial

_Simplygon.spMaterial_swigregister(spMaterial)

def spMaterial_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spMaterial_IsClassA(type)

def spMaterial_SafeCast(other: spObject) -> spMaterial:
    """! * 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 
    """

    return _Simplygon.spMaterial_SafeCast(other)

class spMaterialTable(spTable):
    """!MaterialTable keeps information on materials used while rendering."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spMaterialTable:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_SafeCast(other)

    def AddItem(self, item: spObject) -> int:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_AddItem(self, item)


    def SetItem(self, id: int, item: spObject) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialTable_SetItem(self, id, item)


    def FindItem(self, name: str) -> spObject:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_FindItem(self, name)


    def FindItemId(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_FindItemId(self, name)


    def GetItem(self, id: int) -> spObject:
        """! * Returns the i:th item, using the id of the item. 
         * @param id Is the id of the requested object. 
         * @return the found object 
        """

        return _Simplygon.spMaterialTable_GetItem(self, id)


    def RemoveItem(self, id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialTable_RemoveItem(self, id)


    def Clear(self) -> None:
        """! * Clears the table, and removes all items. If AddItem is called after Clear, the 
         * item ids will start over from 0. 
        """

        return _Simplygon.spMaterialTable_Clear(self)


    def GetItemsCount(self) -> int:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_GetItemsCount(self)


    def Copy(self, src: spTable) -> None:
        """! * Clears the current table and copies the items from a source table. 
         * @param src The table to copy. 
        """

        return _Simplygon.spMaterialTable_Copy(self, src)


    def AddMaterial(self, material: spMaterial) -> int:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_AddMaterial(self, material)


    def FindMaterial(self, name: str) -> spMaterial:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_FindMaterial(self, name)


    def FindIdenticalMaterial(self, mat: spMaterial) -> spMaterial:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_FindIdenticalMaterial(self, mat)


    def FindMaterialId(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_FindMaterialId(self, name)


    def FindIdenticalMaterialId(self, mat: spMaterial) -> int:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_FindIdenticalMaterialId(self, mat)


    def FindIdenticalMaterialIds(self, mat: spMaterial) -> spRidArray:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_FindIdenticalMaterialIds(self, mat)


    def SetMaterial(self, id: int, material: spMaterial) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialTable_SetMaterial(self, id, material)


    def GetMaterial(self, id: int) -> spMaterial:
        """! * 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 
        """

        return _Simplygon.spMaterialTable_GetMaterial(self, id)


    def RemoveMaterial(self, id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialTable_RemoveMaterial(self, id)


    def GetMaterialsCount(self) -> int:
        """! * Returns the number of materials in the table. 
        """

        return _Simplygon.spMaterialTable_GetMaterialsCount(self)


    def ChangeTexturePrefixPath(self, current_path_prefix: str, new_path_prefix: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialTable_ChangeTexturePrefixPath(self, current_path_prefix, new_path_prefix)


    def GetMaterialChannels(self, channels: spStringArray) -> None:
        """! * Get all unique material channel names for all materials in table. 
         * @param channels The array receiving unique channel names. 
        """

        return _Simplygon.spMaterialTable_GetMaterialChannels(self, channels)


    def GetMaterialChannelsWithTextureInputs(self, channels: spStringArray) -> None:
        """! * Get all unique material channel names having texture inputs for all materials 
         * in table. 
         * @param channels The array receiving unique channel names. 
        """

        return _Simplygon.spMaterialTable_GetMaterialChannelsWithTextureInputs(self, channels)

    __swig_destroy__ = _Simplygon.delete_spMaterialTable

_Simplygon.spMaterialTable_swigregister(spMaterialTable)

def spMaterialTable_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spMaterialTable_IsClassA(type)

def spMaterialTable_SafeCast(other: spObject) -> spMaterialTable:
    """! * 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 
    """

    return _Simplygon.spMaterialTable_SafeCast(other)

class spMatrix4x4(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMatrix4x4_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spMatrix4x4:
        """! * 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 
        """

        return _Simplygon.spMatrix4x4_SafeCast(other)

    def DeepCopy(self, mtxin: spMatrix4x4) -> None:
        """! * Copies the contents of an input matrix to the current matrix. 
         * @param mtxin The source matrix. 
        """

        return _Simplygon.spMatrix4x4_DeepCopy(self, mtxin)


    def Zero(self) -> None:
        """! * Set the matrix to the zero matrix (all zeros). 
        """

        return _Simplygon.spMatrix4x4_Zero(self)


    def Identity(self) -> None:
        """! * Set the matrix to the identity matrix. 
        """

        return _Simplygon.spMatrix4x4_Identity(self)


    def GetElement(self, column: int, row: int) -> float:
        """! * Get a matrix element. 
         * @param column The column index. 
         * @param row The row index. 
         * @return The value of the element 
        """

        return _Simplygon.spMatrix4x4_GetElement(self, column, row)


    def SetElement(self, column: int, row: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spMatrix4x4_SetElement(self, column, row, value)


    def GetElements(self) -> spRealData:
        """! * The elements of the matrix. 
         * @return The returned data array. The array contains 16 items. 
         * @return an array containing all elements 
        """

        return _Simplygon.spMatrix4x4_GetElements(self)


    def SetToTranspose(self, mtxin: spMatrix4x4) -> None:
        """! * The matrix to the transpose of the input matrix. 
         * @param mtxin The input matrix. 
        """

        return _Simplygon.spMatrix4x4_SetToTranspose(self, mtxin)


    def Transpose(self) -> None:
        """! * Transpose the current matrix. 
        """

        return _Simplygon.spMatrix4x4_Transpose(self)


    def SetToInvert(self, mtxin: spMatrix4x4) -> None:
        """! * The matrix to the invert of the input matrix. 
         * @param mtxin The input matrix. 
        """

        return _Simplygon.spMatrix4x4_SetToInvert(self, mtxin)


    def Invert(self) -> None:
        """! * Invert the current matrix. 
        """

        return _Simplygon.spMatrix4x4_Invert(self)


    def Determinant3x3(self) -> float:
        """! * Returns the top 3x3 determinant. 
        """

        return _Simplygon.spMatrix4x4_Determinant3x3(self)


    def Point3ArrayMultiply(self, vecarray: spRealArray) -> None:
        """! * Multiply in-place an array with 3D points [x y z 1]. 
         * @param vecarray The vectors to be multiplied and written to. 
        """

        return _Simplygon.spMatrix4x4_Point3ArrayMultiply(self, vecarray)


    def Direction3ArrayMultiply(self, vecarray: spRealArray) -> None:
        """! * Multiply in-place an array with 3D direction vectors [x y z 0]. 
         * @param vecarray The vectors to be multiplied and written to. 
        """

        return _Simplygon.spMatrix4x4_Direction3ArrayMultiply(self, vecarray)


    def Vector4ArrayMultiply(self, vecarray: spRealArray) -> None:
        """! * Multiply in-place an array with full 4D vectors [x y z w]. 
         * @param vecarray The vectors to be multiplied and written to. 
        """

        return _Simplygon.spMatrix4x4_Vector4ArrayMultiply(self, vecarray)


    def SetToRotationTransform(self, angle: float, ax: float, ay: float, az: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spMatrix4x4_SetToRotationTransform(self, angle, ax, ay, az)


    def SetToScalingTransform(self, sx: float, sy: float, sz: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spMatrix4x4_SetToScalingTransform(self, sx, sy, sz)


    def SetToTranslationTransform(self, tx: float, ty: float, tz: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spMatrix4x4_SetToTranslationTransform(self, tx, ty, tz)

    __swig_destroy__ = _Simplygon.delete_spMatrix4x4

_Simplygon.spMatrix4x4_swigregister(spMatrix4x4)

def spMatrix4x4_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spMatrix4x4_IsClassA(type)

def spMatrix4x4_SafeCast(other: spObject) -> spMatrix4x4:
    """! * 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 
    """

    return _Simplygon.spMatrix4x4_SafeCast(other)

class spTransform3(spObject):
    """!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. """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spTransform3_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spTransform3:
        """! * 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 
        """

        return _Simplygon.spTransform3_SafeCast(other)

    def Clear(self) -> None:
        """! * Resets the transformation to the identity transform, resets the multiplication 
         * mode to PostMultiply, and clears the matrix stack. 
        """

        return _Simplygon.spTransform3_Clear(self)


    def GetMatrix(self) -> spMatrix4x4:
        """! * The matrix that is used to specify the transform. 
         * @return the transform matrix 
        """

        return _Simplygon.spTransform3_GetMatrix(self)


    def GetStack(self) -> spRealArray:
        """! * The real array that is used to store the matrix stack. 
         * @return the matrix stack array 
        """

        return _Simplygon.spTransform3_GetStack(self)


    def PostMultiply(self) -> None:
        """! * The transform concatenation mode to post-multiply, any added transform will be 
         * concatenated using this mode. 
        """

        return _Simplygon.spTransform3_PostMultiply(self)


    def PreMultiply(self) -> None:
        """! * The transform concatenation mode to pre-multiply, any added transform will be 
         * concatenated using this mode. 
        """

        return _Simplygon.spTransform3_PreMultiply(self)


    def IsPostMultiply(self) -> bool:
        """! * The transform concatenation mode. 
         * @return true if the mode is set to post-multiply, false otherwise 
        """

        return _Simplygon.spTransform3_IsPostMultiply(self)


    def IsPreMultiply(self) -> bool:
        """! * The transform concatenation mode. 
         * @return true if the mode is set to pre-multiply, false otherwise 
        """

        return _Simplygon.spTransform3_IsPreMultiply(self)


    def AddRotation(self, angle: float, rx: float, ry: float, rz: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spTransform3_AddRotation(self, angle, rx, ry, rz)


    def AddScaling(self, sx: float, sy: float, sz: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spTransform3_AddScaling(self, sx, sy, sz)


    def AddTranslation(self, tx: float, ty: float, tz: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spTransform3_AddTranslation(self, tx, ty, tz)


    def AddTransformation(self, transform: spMatrix4x4) -> None:
        """! * Concatenates a generic transform to the current transform. 
         * @param transform The input transform matrix. 
        """

        return _Simplygon.spTransform3_AddTransformation(self, transform)


    def Push(self) -> None:
        """! * Pushes the current transform onto the matrix stack. 
        """

        return _Simplygon.spTransform3_Push(self)


    def Pop(self) -> None:
        """! * Pops the topmost matrix on the the matrix stack, and replaces the current transform 
         * with the popped matrix. 
        """

        return _Simplygon.spTransform3_Pop(self)

    __swig_destroy__ = _Simplygon.delete_spTransform3

_Simplygon.spTransform3_swigregister(spTransform3)

def spTransform3_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spTransform3_IsClassA(type)

def spTransform3_SafeCast(other: spObject) -> spTransform3:
    """! * 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 
    """

    return _Simplygon.spTransform3_SafeCast(other)

class spMappingImage(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMappingImage_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spMappingImage_SafeCast(other)

    def NewQuartersizeCopy(self) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spMappingImage_NewQuartersizeCopy(self)


    def GetWidth(self) -> int:
        """! * The width of the mapping texture. 
         * @return The Width of the mapping texture 
        """

        return _Simplygon.spMappingImage_GetWidth(self)


    def GetHeight(self) -> int:
        """! * The height of the mapping texture. 
         * @return The Height of the mapping texture 
        """

        return _Simplygon.spMappingImage_GetHeight(self)


    def GetLayerCount(self) -> int:
        """! * The number of layers of the mapping texture. 
         * @return The LayerCount of the mapping texture 
        """

        return _Simplygon.spMappingImage_GetLayerCount(self)


    def GetMultisamplingWidth(self) -> int:
        """! * The multi sampling width of the mapping texture. 
         * @return The multi sampling width 
        """

        return _Simplygon.spMappingImage_GetMultisamplingWidth(self)


    def GetMultisamplingHeight(self) -> int:
        """! * The multi sampling height of the mapping texture. 
         * @return The multi sampling height 
        """

        return _Simplygon.spMappingImage_GetMultisamplingHeight(self)


    def GetImageData(self) -> spChunkedImageData:
        """! * The ImageData object, which stores the mapping data. 
         * @return The ImageData object. 
        """

        return _Simplygon.spMappingImage_GetImageData(self)


    def GetMappingMeshData(self) -> spMappingImageMeshData:
        """! * 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. 
        """

        return _Simplygon.spMappingImage_GetMappingMeshData(self)

    __swig_destroy__ = _Simplygon.delete_spMappingImage

_Simplygon.spMappingImage_swigregister(spMappingImage)

def spMappingImage_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spMappingImage_IsClassA(type)

def spMappingImage_SafeCast(other: spObject) -> spMappingImage:
    """! * 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 
    """

    return _Simplygon.spMappingImage_SafeCast(other)

class spProcessingObject(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spProcessingObject_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spProcessingObject:
        """! * 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 
        """

        return _Simplygon.spProcessingObject_SafeCast(other)

    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spProcessingObject_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spProcessingObject_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spProcessingObject_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spProcessingObject_ToJSON(self)

    __swig_destroy__ = _Simplygon.delete_spProcessingObject

_Simplygon.spProcessingObject_swigregister(spProcessingObject)

def spProcessingObject_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spProcessingObject_IsClassA(type)

def spProcessingObject_SafeCast(other: spObject) -> spProcessingObject:
    """! * 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 
    """

    return _Simplygon.spProcessingObject_SafeCast(other)

class spParameterizer(spObject):
    """!Computes texture coordinates for arbitrary geometry."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spParameterizer_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spParameterizer:
        """! * 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 
        """

        return _Simplygon.spParameterizer_SafeCast(other)

    def Parameterize(self, geom: spGeometryData, arr: spRealArray) -> bool:
        """! * 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 
        """

        return _Simplygon.spParameterizer_Parameterize(self, geom, arr)


    def SetMaxStretch(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_SetMaxStretch(self, value)


    def GetMaxStretch(self) -> float:
        """! * The maximum allowed texture stretch. Range 0->1. 
        """

        return _Simplygon.spParameterizer_GetMaxStretch(self)


    def SetLargeChartsImportance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_SetLargeChartsImportance(self, value)


    def GetLargeChartsImportance(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_GetLargeChartsImportance(self)


    def SetInputMaterialCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_SetInputMaterialCount(self, value)


    def GetInputMaterialCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_GetInputMaterialCount(self)


    def SetOutputMaterialCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_SetOutputMaterialCount(self, value)


    def GetOutputMaterialCount(self) -> int:
        """! * The number of output mapping images that are to be generated. Setup the mapping 
         * between input and output materials with SetInputOutputMaterialMapping. 
        """

        return _Simplygon.spParameterizer_GetOutputMaterialCount(self)


    def SetInputOutputMaterialMapping(self, InMaterialId: int, OutMaterialId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_SetInputOutputMaterialMapping(self, InMaterialId, OutMaterialId)


    def GetInputOutputMaterialMapping(self, InMaterialId: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_GetInputOutputMaterialMapping(self, InMaterialId)


    def SetTextureWidth(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_SetTextureWidth(self, value)


    def GetTextureWidth(self) -> int:
        """! * The width of the texture to use for mapping image index 0. Use SetTextureWidthForImageIndex 
         * to set for another mapping image index. 
        """

        return _Simplygon.spParameterizer_GetTextureWidth(self)


    def SetTextureWidthForImageIndex(self, id: int, value: int) -> None:
        """! * The width of the texture to use. 
         * @param id The output material index. 
         * @param value The new output texture width. 
        """

        return _Simplygon.spParameterizer_SetTextureWidthForImageIndex(self, id, value)


    def GetTextureWidthForImageIndex(self, id: int) -> int:
        """! * The width of the texture to use. 
         * @param id The material id of the output material. 
         * @return The current texture width 
        """

        return _Simplygon.spParameterizer_GetTextureWidthForImageIndex(self, id)


    def SetTextureHeight(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_SetTextureHeight(self, value)


    def GetTextureHeight(self) -> int:
        """! * The height of the texture to use for mapping image index 0. Use SetTextureHeightForImageIndex 
         * to set for another mapping image index. 
        """

        return _Simplygon.spParameterizer_GetTextureHeight(self)


    def SetTextureHeightForImageIndex(self, id: int, value: int) -> None:
        """! * The height of the texture to use. 
         * @param id The output material id. 
         * @param value The new output texture height. 
        """

        return _Simplygon.spParameterizer_SetTextureHeightForImageIndex(self, id, value)


    def GetTextureHeightForImageIndex(self, id: int) -> int:
        """! * The height of the texture to use. 
         * @param id The output material id. 
         * @return The current texture height 
        """

        return _Simplygon.spParameterizer_GetTextureHeightForImageIndex(self, id)


    def SetGutterSpace(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_SetGutterSpace(self, value)


    def GetGutterSpace(self) -> int:
        """! * The minimum number of pixels between charts for mapping image index 0. Use SetGutterSpaceForImageIndex 
         * to set for another mapping image index. 
        """

        return _Simplygon.spParameterizer_GetGutterSpace(self)


    def SetGutterSpaceForImageIndex(self, id: int, value: int) -> None:
        """! * The minimum number of pixels between charts. 
         * @param id The output material id. 
         * @param value The desired value to which GutterSpace will be set. 
        """

        return _Simplygon.spParameterizer_SetGutterSpaceForImageIndex(self, id, value)


    def GetGutterSpaceForImageIndex(self, id: int) -> int:
        """! * The minimum number of pixels between charts. 
         * @param id The output material id. 
         * @return The current value of GutterSpace 
        """

        return _Simplygon.spParameterizer_GetGutterSpaceForImageIndex(self, id)


    def SetFeatureFlagsMask(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_SetFeatureFlagsMask(self, value)


    def GetFeatureFlagsMask(self) -> int:
        """! * The FeatureFlagsMask. Any edge that has one of the flags present as a feature 
         * edge, will have the edge forced as a parameterization feature. 
        """

        return _Simplygon.spParameterizer_GetFeatureFlagsMask(self)


    def SetUseAutomaticTextureSize(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizer_SetUseAutomaticTextureSize(self, value)


    def GetUseAutomaticTextureSize(self) -> bool:
        """! * The automatic_texture_size flag. If true, then texture sizes will be computed 
         * for the reduced mesh depending on its pixel size on screen. 
        """

        return _Simplygon.spParameterizer_GetUseAutomaticTextureSize(self)


    def SetAutomaticTextureSizeMultiplier(self, value: float) -> None:
        """! * Set/Get a texture dimension length multiplier for the automatic texture size. 
         * @param value The desired multiplier. 
        """

        return _Simplygon.spParameterizer_SetAutomaticTextureSizeMultiplier(self, value)


    def GetAutomaticTextureSizeMultiplier(self) -> float:
        """! * Set/Get a texture dimension length multiplier for the automatic texture size. 
         *  
        """

        return _Simplygon.spParameterizer_GetAutomaticTextureSizeMultiplier(self)


    def SetForcePower2Texture(self, value: bool) -> None:
        """! * If automatic_texture_size is enabled, then force the texture sizes to be a power 
         * of 2. 
         * @param value The desired flag. 
        """

        return _Simplygon.spParameterizer_SetForcePower2Texture(self, value)


    def GetForcePower2Texture(self) -> bool:
        """! * If automatic_texture_size is enabled, then force the texture sizes to be a power 
         * of 2. 
        """

        return _Simplygon.spParameterizer_GetForcePower2Texture(self)


    def SetUseVertexWeights(self, value: bool) -> None:
        """! * If UseVertexWeights is enabled, the weights help determine the UV charts and 
         * their UV area. 
         * @param value The desired flag. 
        """

        return _Simplygon.spParameterizer_SetUseVertexWeights(self, value)


    def GetUseVertexWeights(self) -> bool:
        """! * If UseVertexWeights is enabled, the weights help determine the UV charts and 
         * their UV area. 
        """

        return _Simplygon.spParameterizer_GetUseVertexWeights(self)


    def SetUseVisibilityWeights(self, value: bool) -> None:
        """! * If UseVisibilityWeights is enabled, the weights help determine the UV charts 
         * and their UV area. 
         * @param value The desired flag. 
        """

        return _Simplygon.spParameterizer_SetUseVisibilityWeights(self, value)


    def GetUseVisibilityWeights(self) -> bool:
        """! * If UseVisibilityWeights is enabled, the weights help determine the UV charts 
         * and their UV area. 
        """

        return _Simplygon.spParameterizer_GetUseVisibilityWeights(self)

    __swig_destroy__ = _Simplygon.delete_spParameterizer

_Simplygon.spParameterizer_swigregister(spParameterizer)

def spParameterizer_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spParameterizer_IsClassA(type)

def spParameterizer_SafeCast(other: spObject) -> spParameterizer:
    """! * 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 
    """

    return _Simplygon.spParameterizer_SafeCast(other)

class spObjectCollection(spObject):
    """!ObjectCollection and its specializations handles a collection of Objects. There are methods for adding, removing and iterating through the objects."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spObjectCollection_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spObjectCollection:
        """! * 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 
        """

        return _Simplygon.spObjectCollection_SafeCast(other)

    def AddObject(self, obj: spObject):
        """! * 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 
        """

        return _Simplygon.spObjectCollection_AddObject(self, obj)


    def AddObjectSorted(self, obj: spObject, ascending: bool):
        """! * 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 
        """

        return _Simplygon.spObjectCollection_AddObjectSorted(self, obj, ascending)


    def GetFirstItem(self):
        """! * 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 
        """

        return _Simplygon.spObjectCollection_GetFirstItem(self)


    def GetNextItem(self, objhandle):
        """! * 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 
        """

        return _Simplygon.spObjectCollection_GetNextItem(self, objhandle)


    def GetItemsObject(self, objhandle) -> spObject:
        """! * The object the handle is referring to. 
         * @param objhandle The handle of an object in the collection. 
         * @return The object associated with the handle 
        """

        return _Simplygon.spObjectCollection_GetItemsObject(self, objhandle)


    def RemoveItem(self, objhandle):
        """! * 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 
        """

        return _Simplygon.spObjectCollection_RemoveItem(self, objhandle)


    def RemoveObject(self, pobj: spObject) -> None:
        """! * 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. 
        """

        return _Simplygon.spObjectCollection_RemoveObject(self, pobj)


    def RemoveAllItems(self) -> None:
        """! * Removes all items from the collection. 
        """

        return _Simplygon.spObjectCollection_RemoveAllItems(self)


    def GetItemCount(self) -> int:
        """! * The number of items in the collection. 
         * @return The number of items in the collection 
        """

        return _Simplygon.spObjectCollection_GetItemCount(self)


    def GetItem(self, index: int):
        """! * 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 
        """

        return _Simplygon.spObjectCollection_GetItem(self, index)


    def GetItemAsObject(self, index: int) -> spObject:
        """! * 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 
        """

        return _Simplygon.spObjectCollection_GetItemAsObject(self, index)


    def IsObjectInCollection(self, pobj: spObject) -> bool:
        """! * 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 
        """

        return _Simplygon.spObjectCollection_IsObjectInCollection(self, pobj)


    def IsItemInCollection(self, objhandle) -> bool:
        """! * 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 
        """

        return _Simplygon.spObjectCollection_IsItemInCollection(self, objhandle)


    def FindObject(self, name: str) -> spObject:
        """! * 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 
        """

        return _Simplygon.spObjectCollection_FindObject(self, name)

    __swig_destroy__ = _Simplygon.delete_spObjectCollection

_Simplygon.spObjectCollection_swigregister(spObjectCollection)

def spObjectCollection_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spObjectCollection_IsClassA(type)

def spObjectCollection_SafeCast(other: spObject) -> spObjectCollection:
    """! * 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 
    """

    return _Simplygon.spObjectCollection_SafeCast(other)

class spGeometryDataCollection(spObjectCollection):
    """!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)."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGeometryDataCollection:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_SafeCast(other)

    def AddObject(self, obj: spObject):
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_AddObject(self, obj)


    def AddObjectSorted(self, obj: spObject, ascending: bool):
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_AddObjectSorted(self, obj, ascending)


    def GetFirstItem(self):
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_GetFirstItem(self)


    def GetNextItem(self, objhandle):
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_GetNextItem(self, objhandle)


    def GetItemsObject(self, objhandle) -> spObject:
        """! * The object the handle is referring to. 
         * @param objhandle The handle of an object in the collection. 
         * @return The object associated with the handle 
        """

        return _Simplygon.spGeometryDataCollection_GetItemsObject(self, objhandle)


    def RemoveItem(self, objhandle):
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_RemoveItem(self, objhandle)


    def RemoveObject(self, pobj: spObject) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCollection_RemoveObject(self, pobj)


    def RemoveAllItems(self) -> None:
        """! * Removes all items from the collection. 
        """

        return _Simplygon.spGeometryDataCollection_RemoveAllItems(self)


    def GetItemCount(self) -> int:
        """! * The number of items in the collection. 
         * @return The number of items in the collection 
        """

        return _Simplygon.spGeometryDataCollection_GetItemCount(self)


    def GetItem(self, index: int):
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_GetItem(self, index)


    def GetItemAsObject(self, index: int) -> spObject:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_GetItemAsObject(self, index)


    def IsObjectInCollection(self, pobj: spObject) -> bool:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_IsObjectInCollection(self, pobj)


    def IsItemInCollection(self, objhandle) -> bool:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_IsItemInCollection(self, objhandle)


    def FindObject(self, name: str) -> spObject:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_FindObject(self, name)


    def AddGeometryData(self, obj: spGeometryData):
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_AddGeometryData(self, obj)


    def GetGeometryData(self, objhandle) -> spGeometryData:
        """! * The object the handle is referring to. 
         * @param objhandle The handle of the geometry data object to fetch. 
         * @return The requested GeometryData object. 
        """

        return _Simplygon.spGeometryDataCollection_GetGeometryData(self, objhandle)


    def RemoveGeometryData(self, pobj: spGeometryData) -> None:
        """! * Removes an object from the collection. Only the first occurrence of the object 
         * is removed. 
         * @param pobj The GeometryData to remove from the collection. 
        """

        return _Simplygon.spGeometryDataCollection_RemoveGeometryData(self, pobj)


    def FindGeometryData(self, name: str) -> spGeometryData:
        """! * Finds a named object. 
         * @param name The name of the geometry object. 
         * @return The requested GeometryData object. 
        """

        return _Simplygon.spGeometryDataCollection_FindGeometryData(self, name)


    def GetNextItemAsGeometryData(self, phandle_rhandleInputDataPtr) -> spGeometryData:
        """! * Returns the object of the next item. 
         * @param phandle_rhandleInputDataPtr The handle to the geometry object. 
        """

        return _Simplygon.spGeometryDataCollection_GetNextItemAsGeometryData(self, phandle_rhandleInputDataPtr)


    def IsGeometryDataInCollection(self, pobj: spGeometryData) -> bool:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCollection_IsGeometryDataInCollection(self, pobj)

    __swig_destroy__ = _Simplygon.delete_spGeometryDataCollection

_Simplygon.spGeometryDataCollection_swigregister(spGeometryDataCollection)

def spGeometryDataCollection_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGeometryDataCollection_IsClassA(type)

def spGeometryDataCollection_SafeCast(other: spObject) -> spGeometryDataCollection:
    """! * 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 
    """

    return _Simplygon.spGeometryDataCollection_SafeCast(other)

class spGraphicsImporter(spObject):
    """!Base class for graphics import classes"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGraphicsImporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGraphicsImporter:
        """! * 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 
        """

        return _Simplygon.spGraphicsImporter_SafeCast(other)

    def SetImportFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spGraphicsImporter_SetImportFilePath(self, value)


    def GetImportFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spGraphicsImporter_GetImportFilePath(self)


    def RunImport(self) -> bool:
        """! * Runs the import. Note that all parameters must be setup before importing. 
         * @return True if the import was successful, false otherwise 
        """

        return _Simplygon.spGraphicsImporter_RunImport(self)


    def Clear(self) -> None:
        """! * Close any open file or stream, release any allocated data. 
        """

        return _Simplygon.spGraphicsImporter_Clear(self)


    def GetScene(self) -> spScene:
        """! * The the scene loaded from the importer. 
         * @return The loaded scene 
        """

        return _Simplygon.spGraphicsImporter_GetScene(self)

    __swig_destroy__ = _Simplygon.delete_spGraphicsImporter

_Simplygon.spGraphicsImporter_swigregister(spGraphicsImporter)

def spGraphicsImporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGraphicsImporter_IsClassA(type)

def spGraphicsImporter_SafeCast(other: spObject) -> spGraphicsImporter:
    """! * 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 
    """

    return _Simplygon.spGraphicsImporter_SafeCast(other)

class spWavefrontImporter(spGraphicsImporter):
    """!OBJ scene importer"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spWavefrontImporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spWavefrontImporter:
        """! * 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 
        """

        return _Simplygon.spWavefrontImporter_SafeCast(other)

    def SetImportFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spWavefrontImporter_SetImportFilePath(self, value)


    def GetImportFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spWavefrontImporter_GetImportFilePath(self)


    def RunImport(self) -> bool:
        """! * Runs the import. Note that all parameters must be setup before importing. 
         * @return True if the import was successful, false otherwise 
        """

        return _Simplygon.spWavefrontImporter_RunImport(self)


    def Clear(self) -> None:
        """! * Close any open file or stream, release any allocated data. 
        """

        return _Simplygon.spWavefrontImporter_Clear(self)


    def GetScene(self) -> spScene:
        """! * The the scene loaded from the importer. 
         * @return The loaded scene 
        """

        return _Simplygon.spWavefrontImporter_GetScene(self)


    def SetMaterialFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spWavefrontImporter_SetMaterialFilePath(self, value)


    def GetMaterialFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spWavefrontImporter_GetMaterialFilePath(self)


    def SetExtractGroups(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spWavefrontImporter_SetExtractGroups(self, value)


    def GetExtractGroups(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spWavefrontImporter_GetExtractGroups(self)


    def SetUseAlphaAsOpacity(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spWavefrontImporter_SetUseAlphaAsOpacity(self, value)


    def GetUseAlphaAsOpacity(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spWavefrontImporter_GetUseAlphaAsOpacity(self)


    def SetUseFallbackDiffuse(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spWavefrontImporter_SetUseFallbackDiffuse(self, value)


    def GetUseFallbackDiffuse(self) -> bool:
        """! * The UseFallbackDiffuse boolean. If set to true and the material is missing the 
         * diffuse channel, a default, bright diffuse will be used. 
        """

        return _Simplygon.spWavefrontImporter_GetUseFallbackDiffuse(self)

    __swig_destroy__ = _Simplygon.delete_spWavefrontImporter

_Simplygon.spWavefrontImporter_swigregister(spWavefrontImporter)

def spWavefrontImporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spWavefrontImporter_IsClassA(type)

def spWavefrontImporter_SafeCast(other: spObject) -> spWavefrontImporter:
    """! * 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 
    """

    return _Simplygon.spWavefrontImporter_SafeCast(other)

class spGLTFImporter(spGraphicsImporter):
    """!glTF scene importer"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGLTFImporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGLTFImporter:
        """! * 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 
        """

        return _Simplygon.spGLTFImporter_SafeCast(other)

    def SetImportFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spGLTFImporter_SetImportFilePath(self, value)


    def GetImportFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spGLTFImporter_GetImportFilePath(self)


    def RunImport(self) -> bool:
        """! * Runs the import. Note that all parameters must be setup before importing. 
         * @return True if the import was successful, false otherwise 
        """

        return _Simplygon.spGLTFImporter_RunImport(self)


    def Clear(self) -> None:
        """! * Close any open file or stream, release any allocated data. 
        """

        return _Simplygon.spGLTFImporter_Clear(self)


    def GetScene(self) -> spScene:
        """! * The the scene loaded from the importer. 
         * @return The loaded scene 
        """

        return _Simplygon.spGLTFImporter_GetScene(self)

    __swig_destroy__ = _Simplygon.delete_spGLTFImporter

_Simplygon.spGLTFImporter_swigregister(spGLTFImporter)

def spGLTFImporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGLTFImporter_IsClassA(type)

def spGLTFImporter_SafeCast(other: spObject) -> spGLTFImporter:
    """! * 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 
    """

    return _Simplygon.spGLTFImporter_SafeCast(other)

class spFBXImporter(spGraphicsImporter):
    """!FBX scene importer"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spFBXImporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spFBXImporter:
        """! * 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 
        """

        return _Simplygon.spFBXImporter_SafeCast(other)

    def SetImportFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spFBXImporter_SetImportFilePath(self, value)


    def GetImportFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spFBXImporter_GetImportFilePath(self)


    def RunImport(self) -> bool:
        """! * Runs the import. Note that all parameters must be setup before importing. 
         * @return True if the import was successful, false otherwise 
        """

        return _Simplygon.spFBXImporter_RunImport(self)


    def Clear(self) -> None:
        """! * Close any open file or stream, release any allocated data. 
        """

        return _Simplygon.spFBXImporter_Clear(self)


    def GetScene(self) -> spScene:
        """! * The the scene loaded from the importer. 
         * @return The loaded scene 
        """

        return _Simplygon.spFBXImporter_GetScene(self)

    __swig_destroy__ = _Simplygon.delete_spFBXImporter

_Simplygon.spFBXImporter_swigregister(spFBXImporter)

def spFBXImporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spFBXImporter_IsClassA(type)

def spFBXImporter_SafeCast(other: spObject) -> spFBXImporter:
    """! * 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 
    """

    return _Simplygon.spFBXImporter_SafeCast(other)

class spGraphicsExporter(spObject):
    """!Base class for graphics export classes"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGraphicsExporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGraphicsExporter:
        """! * 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 
        """

        return _Simplygon.spGraphicsExporter_SafeCast(other)

    def SetExportFilePath(self, value: str) -> None:
        """! * The main export file path. This is the main file being written to, and must always 
         * be set. 
         * @param value The desired file path. 
        """

        return _Simplygon.spGraphicsExporter_SetExportFilePath(self, value)


    def GetExportFilePath(self) -> str:
        """! * The main export file path. This is the main file being written to, and must always 
         * be set. 
        """

        return _Simplygon.spGraphicsExporter_GetExportFilePath(self)


    def SetScene(self, scene: spScene) -> None:
        """! * The scene to export. 
         * @param scene The desired scene object. 
        """

        return _Simplygon.spGraphicsExporter_SetScene(self, scene)


    def SetSelectionSet(self, exportSelectionSetID: int) -> None:
        """! * The selection set (of nodes from the scene) to export. 
         * @param exportSelectionSetID The desired selection set id to use. 
        """

        return _Simplygon.spGraphicsExporter_SetSelectionSet(self, exportSelectionSetID)


    def RunExport(self) -> bool:
        """! * Runs the export. Note that all required parameters must be setup before exporting. 
         * @return True if the export was successful, false otherwise 
        """

        return _Simplygon.spGraphicsExporter_RunExport(self)


    def SetPrimaryTexCoordName(self, name: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spGraphicsExporter_SetPrimaryTexCoordName(self, name)


    def GetPrimaryTexCoordName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spGraphicsExporter_GetPrimaryTexCoordName(self)


    def SetExportCascadedScenes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spGraphicsExporter_SetExportCascadedScenes(self, value)


    def GetExportCascadedScenes(self) -> bool:
        """! * Flag to control if cascaded scenes should be included in the export (note that 
         * not all file formats support this). 
        """

        return _Simplygon.spGraphicsExporter_GetExportCascadedScenes(self)

    __swig_destroy__ = _Simplygon.delete_spGraphicsExporter

_Simplygon.spGraphicsExporter_swigregister(spGraphicsExporter)

def spGraphicsExporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGraphicsExporter_IsClassA(type)

def spGraphicsExporter_SafeCast(other: spObject) -> spGraphicsExporter:
    """! * 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 
    """

    return _Simplygon.spGraphicsExporter_SafeCast(other)

class spWavefrontExporter(spGraphicsExporter):
    """!Wavefront .obj geometry exporter."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spWavefrontExporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spWavefrontExporter:
        """! * 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 
        """

        return _Simplygon.spWavefrontExporter_SafeCast(other)

    def SetExportFilePath(self, value: str) -> None:
        """! * The main export file path. This is the main file being written to, and must always 
         * be set. 
         * @param value The desired file path. 
        """

        return _Simplygon.spWavefrontExporter_SetExportFilePath(self, value)


    def GetExportFilePath(self) -> str:
        """! * The main export file path. This is the main file being written to, and must always 
         * be set. 
        """

        return _Simplygon.spWavefrontExporter_GetExportFilePath(self)


    def SetScene(self, scene: spScene) -> None:
        """! * The scene to export. 
         * @param scene The desired scene object. 
        """

        return _Simplygon.spWavefrontExporter_SetScene(self, scene)


    def SetSelectionSet(self, exportSelectionSetID: int) -> None:
        """! * The selection set (of nodes from the scene) to export. 
         * @param exportSelectionSetID The desired selection set id to use. 
        """

        return _Simplygon.spWavefrontExporter_SetSelectionSet(self, exportSelectionSetID)


    def RunExport(self) -> bool:
        """! * Runs the export. Note that all required parameters must be setup before exporting. 
         * @return True if the export was successful, false otherwise 
        """

        return _Simplygon.spWavefrontExporter_RunExport(self)


    def SetPrimaryTexCoordName(self, name: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spWavefrontExporter_SetPrimaryTexCoordName(self, name)


    def GetPrimaryTexCoordName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spWavefrontExporter_GetPrimaryTexCoordName(self)


    def SetExportCascadedScenes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spWavefrontExporter_SetExportCascadedScenes(self, value)


    def GetExportCascadedScenes(self) -> bool:
        """! * Flag to control if cascaded scenes should be included in the export (note that 
         * not all file formats support this). 
        """

        return _Simplygon.spWavefrontExporter_GetExportCascadedScenes(self)


    def SetMaterialFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spWavefrontExporter_SetMaterialFilePath(self, value)


    def GetMaterialFilePath(self) -> str:
        """! * 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'. 
        """

        return _Simplygon.spWavefrontExporter_GetMaterialFilePath(self)

    __swig_destroy__ = _Simplygon.delete_spWavefrontExporter

_Simplygon.spWavefrontExporter_swigregister(spWavefrontExporter)

def spWavefrontExporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spWavefrontExporter_IsClassA(type)

def spWavefrontExporter_SafeCast(other: spObject) -> spWavefrontExporter:
    """! * 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 
    """

    return _Simplygon.spWavefrontExporter_SafeCast(other)

class spFBXExporter(spGraphicsExporter):
    """!FBX scene exporter."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spFBXExporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spFBXExporter:
        """! * 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 
        """

        return _Simplygon.spFBXExporter_SafeCast(other)

    def SetExportFilePath(self, value: str) -> None:
        """! * The main export file path. This is the main file being written to, and must always 
         * be set. 
         * @param value The desired file path. 
        """

        return _Simplygon.spFBXExporter_SetExportFilePath(self, value)


    def GetExportFilePath(self) -> str:
        """! * The main export file path. This is the main file being written to, and must always 
         * be set. 
        """

        return _Simplygon.spFBXExporter_GetExportFilePath(self)


    def SetScene(self, scene: spScene) -> None:
        """! * The scene to export. 
         * @param scene The desired scene object. 
        """

        return _Simplygon.spFBXExporter_SetScene(self, scene)


    def SetSelectionSet(self, exportSelectionSetID: int) -> None:
        """! * The selection set (of nodes from the scene) to export. 
         * @param exportSelectionSetID The desired selection set id to use. 
        """

        return _Simplygon.spFBXExporter_SetSelectionSet(self, exportSelectionSetID)


    def RunExport(self) -> bool:
        """! * Runs the export. Note that all required parameters must be setup before exporting. 
         * @return True if the export was successful, false otherwise 
        """

        return _Simplygon.spFBXExporter_RunExport(self)


    def SetPrimaryTexCoordName(self, name: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spFBXExporter_SetPrimaryTexCoordName(self, name)


    def GetPrimaryTexCoordName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spFBXExporter_GetPrimaryTexCoordName(self)


    def SetExportCascadedScenes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spFBXExporter_SetExportCascadedScenes(self, value)


    def GetExportCascadedScenes(self) -> bool:
        """! * Flag to control if cascaded scenes should be included in the export (note that 
         * not all file formats support this). 
        """

        return _Simplygon.spFBXExporter_GetExportCascadedScenes(self)


    def SetEmbedReferences(self, value: bool) -> None:
        """! * Flag to control if referenced textures should be embedded in binary blob or referenced 
         * by path to external files. 
         * @param value Embed flag. 
        """

        return _Simplygon.spFBXExporter_SetEmbedReferences(self, value)


    def GetEmbedReferences(self) -> bool:
        """! * Flag to control if referenced textures should be embedded in binary blob or referenced 
         * by path to external files. 
        """

        return _Simplygon.spFBXExporter_GetEmbedReferences(self)

    __swig_destroy__ = _Simplygon.delete_spFBXExporter

_Simplygon.spFBXExporter_swigregister(spFBXExporter)

def spFBXExporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spFBXExporter_IsClassA(type)

def spFBXExporter_SafeCast(other: spObject) -> spFBXExporter:
    """! * 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 
    """

    return _Simplygon.spFBXExporter_SafeCast(other)

class spGLTFExporter(spGraphicsExporter):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGLTFExporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGLTFExporter:
        """! * 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 
        """

        return _Simplygon.spGLTFExporter_SafeCast(other)

    def SetExportFilePath(self, value: str) -> None:
        """! * The main export file path. This is the main file being written to, and must always 
         * be set. 
         * @param value The desired file path. 
        """

        return _Simplygon.spGLTFExporter_SetExportFilePath(self, value)


    def GetExportFilePath(self) -> str:
        """! * The main export file path. This is the main file being written to, and must always 
         * be set. 
        """

        return _Simplygon.spGLTFExporter_GetExportFilePath(self)


    def SetScene(self, scene: spScene) -> None:
        """! * The scene to export. 
         * @param scene The desired scene object. 
        """

        return _Simplygon.spGLTFExporter_SetScene(self, scene)


    def SetSelectionSet(self, exportSelectionSetID: int) -> None:
        """! * The selection set (of nodes from the scene) to export. 
         * @param exportSelectionSetID The desired selection set id to use. 
        """

        return _Simplygon.spGLTFExporter_SetSelectionSet(self, exportSelectionSetID)


    def RunExport(self) -> bool:
        """! * Runs the export. Note that all required parameters must be setup before exporting. 
         * @return True if the export was successful, false otherwise 
        """

        return _Simplygon.spGLTFExporter_RunExport(self)


    def SetPrimaryTexCoordName(self, name: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spGLTFExporter_SetPrimaryTexCoordName(self, name)


    def GetPrimaryTexCoordName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spGLTFExporter_GetPrimaryTexCoordName(self)


    def SetExportCascadedScenes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spGLTFExporter_SetExportCascadedScenes(self, value)


    def GetExportCascadedScenes(self) -> bool:
        """! * Flag to control if cascaded scenes should be included in the export (note that 
         * not all file formats support this). 
        """

        return _Simplygon.spGLTFExporter_GetExportCascadedScenes(self)


    def SetEmbedReferences(self, value: bool) -> None:
        """! * Flag to control if referenced textures should be embedded in binary blob or referenced 
         * by path to external files. 
         * @param value Embed flag. 
        """

        return _Simplygon.spGLTFExporter_SetEmbedReferences(self, value)


    def GetEmbedReferences(self) -> bool:
        """! * Flag to control if referenced textures should be embedded in binary blob or referenced 
         * by path to external files. 
        """

        return _Simplygon.spGLTFExporter_GetEmbedReferences(self)

    __swig_destroy__ = _Simplygon.delete_spGLTFExporter

_Simplygon.spGLTFExporter_swigregister(spGLTFExporter)

def spGLTFExporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGLTFExporter_IsClassA(type)

def spGLTFExporter_SafeCast(other: spObject) -> spGLTFExporter:
    """! * 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 
    """

    return _Simplygon.spGLTFExporter_SafeCast(other)

class spBinaryImporter(spGraphicsImporter):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spBinaryImporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spBinaryImporter:
        """! * 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 
        """

        return _Simplygon.spBinaryImporter_SafeCast(other)

    def SetImportFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spBinaryImporter_SetImportFilePath(self, value)


    def GetImportFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spBinaryImporter_GetImportFilePath(self)


    def RunImport(self) -> bool:
        """! * Runs the import. Note that all parameters must be setup before importing. 
         * @return True if the import was successful, false otherwise 
        """

        return _Simplygon.spBinaryImporter_RunImport(self)


    def Clear(self) -> None:
        """! * Close any open file or stream, release any allocated data. 
        """

        return _Simplygon.spBinaryImporter_Clear(self)


    def GetScene(self) -> spScene:
        """! * The the scene loaded from the importer. 
         * @return The loaded scene 
        """

        return _Simplygon.spBinaryImporter_GetScene(self)

    __swig_destroy__ = _Simplygon.delete_spBinaryImporter

_Simplygon.spBinaryImporter_swigregister(spBinaryImporter)

def spBinaryImporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spBinaryImporter_IsClassA(type)

def spBinaryImporter_SafeCast(other: spObject) -> spBinaryImporter:
    """! * 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 
    """

    return _Simplygon.spBinaryImporter_SafeCast(other)

class spBinaryExporter(spGraphicsExporter):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spBinaryExporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spBinaryExporter:
        """! * 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 
        """

        return _Simplygon.spBinaryExporter_SafeCast(other)

    def SetExportFilePath(self, value: str) -> None:
        """! * The main export file path. This is the main file being written to, and must always 
         * be set. 
         * @param value The desired file path. 
        """

        return _Simplygon.spBinaryExporter_SetExportFilePath(self, value)


    def GetExportFilePath(self) -> str:
        """! * The main export file path. This is the main file being written to, and must always 
         * be set. 
        """

        return _Simplygon.spBinaryExporter_GetExportFilePath(self)


    def SetScene(self, scene: spScene) -> None:
        """! * The scene to export. 
         * @param scene The desired scene object. 
        """

        return _Simplygon.spBinaryExporter_SetScene(self, scene)


    def SetSelectionSet(self, exportSelectionSetID: int) -> None:
        """! * The selection set (of nodes from the scene) to export. 
         * @param exportSelectionSetID The desired selection set id to use. 
        """

        return _Simplygon.spBinaryExporter_SetSelectionSet(self, exportSelectionSetID)


    def RunExport(self) -> bool:
        """! * Runs the export. Note that all required parameters must be setup before exporting. 
         * @return True if the export was successful, false otherwise 
        """

        return _Simplygon.spBinaryExporter_RunExport(self)


    def SetPrimaryTexCoordName(self, name: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spBinaryExporter_SetPrimaryTexCoordName(self, name)


    def GetPrimaryTexCoordName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spBinaryExporter_GetPrimaryTexCoordName(self)


    def SetExportCascadedScenes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBinaryExporter_SetExportCascadedScenes(self, value)


    def GetExportCascadedScenes(self) -> bool:
        """! * Flag to control if cascaded scenes should be included in the export (note that 
         * not all file formats support this). 
        """

        return _Simplygon.spBinaryExporter_GetExportCascadedScenes(self)

    __swig_destroy__ = _Simplygon.delete_spBinaryExporter

_Simplygon.spBinaryExporter_swigregister(spBinaryExporter)

def spBinaryExporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spBinaryExporter_IsClassA(type)

def spBinaryExporter_SafeCast(other: spObject) -> spBinaryExporter:
    """! * 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 
    """

    return _Simplygon.spBinaryExporter_SafeCast(other)

class spGeometryValidator(spObject):
    """!Checks the geometry for consistent indices, number of triangles etc."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGeometryValidator_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGeometryValidator:
        """! * 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 
        """

        return _Simplygon.spGeometryValidator_SafeCast(other)

    def ValidateGeometry(self, geom: spGeometryData) -> bool:
        """! * 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. 
         *  
        """

        return _Simplygon.spGeometryValidator_ValidateGeometry(self, geom)


    def GetErrorValue(self) -> int:
        """! * 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 
        """

        return _Simplygon.spGeometryValidator_GetErrorValue(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found for the last check that 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spGeometryValidator_GetErrorString(self)


    def SetCheckDegenerateFaceIndices(self, value: bool) -> None:
        """! * If set, faces that have the same index more than once will not be allowed. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spGeometryValidator_SetCheckDegenerateFaceIndices(self, value)


    def GetCheckDegenerateFaceIndices(self) -> bool:
        """! * If set, faces that have the same index more than once will not be allowed. 
        """

        return _Simplygon.spGeometryValidator_GetCheckDegenerateFaceIndices(self)


    def SetCheckZeroAreaFaces(self, value: bool) -> None:
        """! * If set, faces that have zero area will not be allowed. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spGeometryValidator_SetCheckZeroAreaFaces(self, value)


    def GetCheckZeroAreaFaces(self) -> bool:
        """! * If set, faces that have zero area will not be allowed. 
        """

        return _Simplygon.spGeometryValidator_GetCheckZeroAreaFaces(self)


    def SetAllowedMaterialCount(self, value: int) -> None:
        """! * This is the number of allowed materials used in the scene. Only indices within 
         * this range are allowed. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spGeometryValidator_SetAllowedMaterialCount(self, value)


    def SetAllowedBoneCount(self, value: int) -> None:
        """! * 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 
        """

        return _Simplygon.spGeometryValidator_SetAllowedBoneCount(self, value)


    def SetAllowedGroupCount(self, value: int) -> None:
        """! * 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 
        """

        return _Simplygon.spGeometryValidator_SetAllowedGroupCount(self, value)

    __swig_destroy__ = _Simplygon.delete_spGeometryValidator

_Simplygon.spGeometryValidator_swigregister(spGeometryValidator)

def spGeometryValidator_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGeometryValidator_IsClassA(type)

def spGeometryValidator_SafeCast(other: spObject) -> spGeometryValidator:
    """! * 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 
    """

    return _Simplygon.spGeometryValidator_SafeCast(other)

class spSettingsObject(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSettingsObject_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSettingsObject:
        """! * 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 
        """

        return _Simplygon.spSettingsObject_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spSettingsObject_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spSettingsObject_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spSettingsObject_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spSettingsObject_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spSettingsObject_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spSettingsObject_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spSettingsObject_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spSettingsObject_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spSettingsObject_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spSettingsObject_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spSettingsObject_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spSettingsObject_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spSettingsObject_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSettingsObject_SetValidateParameterNames(self, validate)

    __swig_destroy__ = _Simplygon.delete_spSettingsObject

_Simplygon.spSettingsObject_swigregister(spSettingsObject)

def spSettingsObject_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSettingsObject_IsClassA(type)

def spSettingsObject_SafeCast(other: spObject) -> spSettingsObject:
    """! * 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 
    """

    return _Simplygon.spSettingsObject_SafeCast(other)

class spMaterialCaster(spProcessingObject):
    """!MaterialCaster is the base interface for material casting interfaces. The interface exports methods for defining input geometries & mapping image, materials, output image paths & formats"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMaterialCaster_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spMaterialCaster_SafeCast(other)

    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spMaterialCaster_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spMaterialCaster_ToJSON(self)


    def GetMaterialCasterSettings(self) -> spMaterialCasterSettings:
        """! * The settings object. 
        """

        return _Simplygon.spMaterialCaster_GetMaterialCasterSettings(self)


    def SetSourceTextures(self, value: spTextureTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_SetSourceTextures(self, value)


    def GetSourceTextures(self) -> spTextureTable:
        """! * The SourceTextures object. The SourceTextures object contains all textures of 
         * the the source geometry. 
        """

        return _Simplygon.spMaterialCaster_GetSourceTextures(self)


    def SetSourceMaterials(self, value: spMaterialTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_SetSourceMaterials(self, value)


    def GetSourceMaterials(self) -> spMaterialTable:
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_GetSourceMaterials(self)


    def SetDestMaterialId(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_SetDestMaterialId(self, value)


    def GetDestMaterialId(self) -> int:
        """! * The DestMaterialId object. If set, only the parts of the destination map that. 
         * To disable, set to -1. 
        """

        return _Simplygon.spMaterialCaster_GetDestMaterialId(self)


    def SetMappingImage(self, value: spMappingImage) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_SetMappingImage(self, value)


    def GetMappingImage(self) -> spMappingImage:
        """! * The MappingImage object. The MappingImage object contains the mapping between 
         * the Geometry and SourceGeometry objects. 
        """

        return _Simplygon.spMaterialCaster_GetMappingImage(self)


    def SetOutputFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_SetOutputFilePath(self, value)


    def GetOutputFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_GetOutputFilePath(self)


    def SetOutputImage(self, value: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_SetOutputImage(self, value)


    def GetOutputImage(self) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spMaterialCaster_GetOutputImage(self)


    def NewCopy(self) -> spMaterialCaster:
        """! * Create a new clone of the material caster, copying all settings. 
        """

        return _Simplygon.spMaterialCaster_NewCopy(self)

    __swig_destroy__ = _Simplygon.delete_spMaterialCaster

_Simplygon.spMaterialCaster_swigregister(spMaterialCaster)

def spMaterialCaster_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spMaterialCaster_IsClassA(type)

def spMaterialCaster_SafeCast(other: spObject) -> spMaterialCaster:
    """! * 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 
    """

    return _Simplygon.spMaterialCaster_SafeCast(other)

class spMaterialCasterSettings(spSettingsObject):
    """!MaterialCasterSettings is the base interface for material casting settings"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMaterialCasterSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spMaterialCasterSettings:
        """! * 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 
        """

        return _Simplygon.spMaterialCasterSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spMaterialCasterSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spMaterialCasterSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMaterialCasterSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMaterialCasterSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMaterialCasterSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMaterialCasterSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMaterialCasterSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spMaterialCasterSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMaterialCasterSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMaterialCasterSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMaterialCasterSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spMaterialCasterSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spMaterialCasterSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCasterSettings_SetValidateParameterNames(self, validate)


    def SetMaterialChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCasterSettings_SetMaterialChannel(self, value)


    def GetMaterialChannel(self) -> str:
        """! * The name of the input material channel to cast. Existing user channels of any 
         * arbitrary name in the input materials can be cast. 
        """

        return _Simplygon.spMaterialCasterSettings_GetMaterialChannel(self)


    def SetOpacityChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCasterSettings_SetOpacityChannel(self, value)


    def GetOpacityChannel(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spMaterialCasterSettings_GetOpacityChannel(self)


    def SetOpacityChannelComponent(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCasterSettings_SetOpacityChannelComponent(self, value)


    def GetOpacityChannelComponent(self):
        """! * The component in the opacity channel to use as opacity value. 
        """

        return _Simplygon.spMaterialCasterSettings_GetOpacityChannelComponent(self)


    def SetDilation(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCasterSettings_SetDilation(self, value)


    def GetDilation(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spMaterialCasterSettings_GetDilation(self)


    def SetOutputPixelFormat(self, value) -> None:
        """! * The output pixel format 
         * @param value The desired value to which OutputChannels will be set. 
        """

        return _Simplygon.spMaterialCasterSettings_SetOutputPixelFormat(self, value)


    def GetOutputPixelFormat(self):
        """! * The output pixel format 
        """

        return _Simplygon.spMaterialCasterSettings_GetOutputPixelFormat(self)


    def SetDitherType(self, value) -> None:
        """! * The type of dithering to use when creating the output object. 
         * @param value The desired value of the DitherType to use. 
        """

        return _Simplygon.spMaterialCasterSettings_SetDitherType(self, value)


    def GetDitherType(self):
        """! * The type of dithering to use when creating the output object. 
        """

        return _Simplygon.spMaterialCasterSettings_GetDitherType(self)


    def SetFillMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spMaterialCasterSettings_SetFillMode(self, value)


    def GetFillMode(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spMaterialCasterSettings_GetFillMode(self)


    def SetUseMultisampling(self, value: bool) -> None:
        """! * Enable or disable multisampling. 
         * @param value The desired value of the flag. 
        """

        return _Simplygon.spMaterialCasterSettings_SetUseMultisampling(self, value)


    def GetUseMultisampling(self) -> bool:
        """! * Enable or disable multisampling. 
        """

        return _Simplygon.spMaterialCasterSettings_GetUseMultisampling(self)


    def SetOutputImageFileFormat(self, value) -> None:
        """! * File format for output texture. 
         * @param value The desired file format. 
        """

        return _Simplygon.spMaterialCasterSettings_SetOutputImageFileFormat(self, value)


    def GetOutputImageFileFormat(self):
        """! * File format for output texture. 
        """

        return _Simplygon.spMaterialCasterSettings_GetOutputImageFileFormat(self)


    def SetOutputDDSCompressionType(self, value) -> None:
        """! * DDS compression if output format is DDS. 
         * @param value The desired DDS compression type. 
        """

        return _Simplygon.spMaterialCasterSettings_SetOutputDDSCompressionType(self, value)


    def GetOutputDDSCompressionType(self):
        """! * DDS compression if output format is DDS. 
        """

        return _Simplygon.spMaterialCasterSettings_GetOutputDDSCompressionType(self)

    __swig_destroy__ = _Simplygon.delete_spMaterialCasterSettings

_Simplygon.spMaterialCasterSettings_swigregister(spMaterialCasterSettings)

def spMaterialCasterSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spMaterialCasterSettings_IsClassA(type)

def spMaterialCasterSettings_SafeCast(other: spObject) -> spMaterialCasterSettings:
    """! * 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 
    """

    return _Simplygon.spMaterialCasterSettings_SafeCast(other)

class spColorCaster(spMaterialCaster):
    """!ColorCaster is the interface used to cast basic color values. Currently supported material color value types are Ambient, Diffuse and Specular + Shininess."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spColorCaster_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spColorCaster:
        """! * 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 
        """

        return _Simplygon.spColorCaster_SafeCast(other)

    def GetMaterialCasterSettings(self) -> spMaterialCasterSettings:
        """! * The settings object. 
        """

        return _Simplygon.spColorCaster_GetMaterialCasterSettings(self)


    def SetSourceTextures(self, value: spTextureTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_SetSourceTextures(self, value)


    def GetSourceTextures(self) -> spTextureTable:
        """! * The SourceTextures object. The SourceTextures object contains all textures of 
         * the the source geometry. 
        """

        return _Simplygon.spColorCaster_GetSourceTextures(self)


    def SetSourceMaterials(self, value: spMaterialTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_SetSourceMaterials(self, value)


    def GetSourceMaterials(self) -> spMaterialTable:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_GetSourceMaterials(self)


    def SetDestMaterialId(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_SetDestMaterialId(self, value)


    def GetDestMaterialId(self) -> int:
        """! * The DestMaterialId object. If set, only the parts of the destination map that. 
         * To disable, set to -1. 
        """

        return _Simplygon.spColorCaster_GetDestMaterialId(self)


    def SetMappingImage(self, value: spMappingImage) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_SetMappingImage(self, value)


    def GetMappingImage(self) -> spMappingImage:
        """! * The MappingImage object. The MappingImage object contains the mapping between 
         * the Geometry and SourceGeometry objects. 
        """

        return _Simplygon.spColorCaster_GetMappingImage(self)


    def SetOutputFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_SetOutputFilePath(self, value)


    def GetOutputFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_GetOutputFilePath(self)


    def SetOutputImage(self, value: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_SetOutputImage(self, value)


    def GetOutputImage(self) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_GetOutputImage(self)


    def NewCopy(self) -> spMaterialCaster:
        """! * Create a new clone of the material caster, copying all settings. 
        """

        return _Simplygon.spColorCaster_NewCopy(self)


    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spColorCaster_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spColorCaster_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spColorCaster_ToJSON(self)


    def GetLastCastingWasSkipped(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spColorCaster_GetLastCastingWasSkipped(self)


    def GetColorCasterSettings(self) -> spColorCasterSettings:
        """! * The color caster settings object. 
         * @return Color caster settings object. 
        """

        return _Simplygon.spColorCaster_GetColorCasterSettings(self)

    __swig_destroy__ = _Simplygon.delete_spColorCaster

_Simplygon.spColorCaster_swigregister(spColorCaster)

def spColorCaster_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spColorCaster_IsClassA(type)

def spColorCaster_SafeCast(other: spObject) -> spColorCaster:
    """! * 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 
    """

    return _Simplygon.spColorCaster_SafeCast(other)

class spColorCasterSettings(spMaterialCasterSettings):
    """!ColorCasterSettings is the interface for basic color caster settings."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spColorCasterSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spColorCasterSettings:
        """! * 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 
        """

        return _Simplygon.spColorCasterSettings_SafeCast(other)

    def SetMaterialChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCasterSettings_SetMaterialChannel(self, value)


    def GetMaterialChannel(self) -> str:
        """! * The name of the input material channel to cast. Existing user channels of any 
         * arbitrary name in the input materials can be cast. 
        """

        return _Simplygon.spColorCasterSettings_GetMaterialChannel(self)


    def SetOpacityChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCasterSettings_SetOpacityChannel(self, value)


    def GetOpacityChannel(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spColorCasterSettings_GetOpacityChannel(self)


    def SetOpacityChannelComponent(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCasterSettings_SetOpacityChannelComponent(self, value)


    def GetOpacityChannelComponent(self):
        """! * The component in the opacity channel to use as opacity value. 
        """

        return _Simplygon.spColorCasterSettings_GetOpacityChannelComponent(self)


    def SetDilation(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCasterSettings_SetDilation(self, value)


    def GetDilation(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spColorCasterSettings_GetDilation(self)


    def SetOutputPixelFormat(self, value) -> None:
        """! * The output pixel format 
         * @param value The desired value to which OutputChannels will be set. 
        """

        return _Simplygon.spColorCasterSettings_SetOutputPixelFormat(self, value)


    def GetOutputPixelFormat(self):
        """! * The output pixel format 
        """

        return _Simplygon.spColorCasterSettings_GetOutputPixelFormat(self)


    def SetDitherType(self, value) -> None:
        """! * The type of dithering to use when creating the output object. 
         * @param value The desired value of the DitherType to use. 
        """

        return _Simplygon.spColorCasterSettings_SetDitherType(self, value)


    def GetDitherType(self):
        """! * The type of dithering to use when creating the output object. 
        """

        return _Simplygon.spColorCasterSettings_GetDitherType(self)


    def SetFillMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCasterSettings_SetFillMode(self, value)


    def GetFillMode(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spColorCasterSettings_GetFillMode(self)


    def SetUseMultisampling(self, value: bool) -> None:
        """! * Enable or disable multisampling. 
         * @param value The desired value of the flag. 
        """

        return _Simplygon.spColorCasterSettings_SetUseMultisampling(self, value)


    def GetUseMultisampling(self) -> bool:
        """! * Enable or disable multisampling. 
        """

        return _Simplygon.spColorCasterSettings_GetUseMultisampling(self)


    def SetOutputImageFileFormat(self, value) -> None:
        """! * File format for output texture. 
         * @param value The desired file format. 
        """

        return _Simplygon.spColorCasterSettings_SetOutputImageFileFormat(self, value)


    def GetOutputImageFileFormat(self):
        """! * File format for output texture. 
        """

        return _Simplygon.spColorCasterSettings_GetOutputImageFileFormat(self)


    def SetOutputDDSCompressionType(self, value) -> None:
        """! * DDS compression if output format is DDS. 
         * @param value The desired DDS compression type. 
        """

        return _Simplygon.spColorCasterSettings_SetOutputDDSCompressionType(self, value)


    def GetOutputDDSCompressionType(self):
        """! * DDS compression if output format is DDS. 
        """

        return _Simplygon.spColorCasterSettings_GetOutputDDSCompressionType(self)


    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spColorCasterSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spColorCasterSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spColorCasterSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spColorCasterSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spColorCasterSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spColorCasterSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spColorCasterSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spColorCasterSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spColorCasterSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spColorCasterSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spColorCasterSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spColorCasterSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spColorCasterSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCasterSettings_SetValidateParameterNames(self, validate)


    def SetBakeOpacityInAlpha(self, value: bool) -> None:
        """! * 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 
        """

        return _Simplygon.spColorCasterSettings_SetBakeOpacityInAlpha(self, value)


    def GetBakeOpacityInAlpha(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spColorCasterSettings_GetBakeOpacityInAlpha(self)


    def SetOutputOpacityType(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCasterSettings_SetOutputOpacityType(self, value)


    def GetOutputOpacityType(self):
        """! * 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' 
        """

        return _Simplygon.spColorCasterSettings_GetOutputOpacityType(self)


    def SetSkipCastingIfNoInputChannel(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCasterSettings_SetSkipCastingIfNoInputChannel(self, value)


    def GetSkipCastingIfNoInputChannel(self) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spColorCasterSettings_GetSkipCastingIfNoInputChannel(self)


    def SetOutputSRGB(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spColorCasterSettings_SetOutputSRGB(self, value)


    def GetOutputSRGB(self) -> bool:
        """! * 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. 
         *  
        """

        return _Simplygon.spColorCasterSettings_GetOutputSRGB(self)

    __swig_destroy__ = _Simplygon.delete_spColorCasterSettings

_Simplygon.spColorCasterSettings_swigregister(spColorCasterSettings)

def spColorCasterSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spColorCasterSettings_IsClassA(type)

def spColorCasterSettings_SafeCast(other: spObject) -> spColorCasterSettings:
    """! * 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 
    """

    return _Simplygon.spColorCasterSettings_SafeCast(other)

class spOpacityCaster(spMaterialCaster):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spOpacityCaster_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spOpacityCaster:
        """! * 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 
        """

        return _Simplygon.spOpacityCaster_SafeCast(other)

    def GetMaterialCasterSettings(self) -> spMaterialCasterSettings:
        """! * The settings object. 
        """

        return _Simplygon.spOpacityCaster_GetMaterialCasterSettings(self)


    def SetSourceTextures(self, value: spTextureTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_SetSourceTextures(self, value)


    def GetSourceTextures(self) -> spTextureTable:
        """! * The SourceTextures object. The SourceTextures object contains all textures of 
         * the the source geometry. 
        """

        return _Simplygon.spOpacityCaster_GetSourceTextures(self)


    def SetSourceMaterials(self, value: spMaterialTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_SetSourceMaterials(self, value)


    def GetSourceMaterials(self) -> spMaterialTable:
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_GetSourceMaterials(self)


    def SetDestMaterialId(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_SetDestMaterialId(self, value)


    def GetDestMaterialId(self) -> int:
        """! * The DestMaterialId object. If set, only the parts of the destination map that. 
         * To disable, set to -1. 
        """

        return _Simplygon.spOpacityCaster_GetDestMaterialId(self)


    def SetMappingImage(self, value: spMappingImage) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_SetMappingImage(self, value)


    def GetMappingImage(self) -> spMappingImage:
        """! * The MappingImage object. The MappingImage object contains the mapping between 
         * the Geometry and SourceGeometry objects. 
        """

        return _Simplygon.spOpacityCaster_GetMappingImage(self)


    def SetOutputFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_SetOutputFilePath(self, value)


    def GetOutputFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_GetOutputFilePath(self)


    def SetOutputImage(self, value: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_SetOutputImage(self, value)


    def GetOutputImage(self) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_GetOutputImage(self)


    def NewCopy(self) -> spMaterialCaster:
        """! * Create a new clone of the material caster, copying all settings. 
        """

        return _Simplygon.spOpacityCaster_NewCopy(self)


    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spOpacityCaster_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spOpacityCaster_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spOpacityCaster_ToJSON(self)


    def GetOpacityCasterSettings(self) -> spOpacityCasterSettings:
        """! * The opacity caster settings object. 
         * @return Opacity caster settings object. 
        """

        return _Simplygon.spOpacityCaster_GetOpacityCasterSettings(self)

    __swig_destroy__ = _Simplygon.delete_spOpacityCaster

_Simplygon.spOpacityCaster_swigregister(spOpacityCaster)

def spOpacityCaster_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spOpacityCaster_IsClassA(type)

def spOpacityCaster_SafeCast(other: spObject) -> spOpacityCaster:
    """! * 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 
    """

    return _Simplygon.spOpacityCaster_SafeCast(other)

class spOpacityCasterSettings(spMaterialCasterSettings):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spOpacityCasterSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spOpacityCasterSettings:
        """! * 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 
        """

        return _Simplygon.spOpacityCasterSettings_SafeCast(other)

    def SetMaterialChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCasterSettings_SetMaterialChannel(self, value)


    def GetMaterialChannel(self) -> str:
        """! * The name of the input material channel to cast. Existing user channels of any 
         * arbitrary name in the input materials can be cast. 
        """

        return _Simplygon.spOpacityCasterSettings_GetMaterialChannel(self)


    def SetOpacityChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCasterSettings_SetOpacityChannel(self, value)


    def GetOpacityChannel(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spOpacityCasterSettings_GetOpacityChannel(self)


    def SetOpacityChannelComponent(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCasterSettings_SetOpacityChannelComponent(self, value)


    def GetOpacityChannelComponent(self):
        """! * The component in the opacity channel to use as opacity value. 
        """

        return _Simplygon.spOpacityCasterSettings_GetOpacityChannelComponent(self)


    def SetDilation(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCasterSettings_SetDilation(self, value)


    def GetDilation(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spOpacityCasterSettings_GetDilation(self)


    def SetOutputPixelFormat(self, value) -> None:
        """! * The output pixel format 
         * @param value The desired value to which OutputChannels will be set. 
        """

        return _Simplygon.spOpacityCasterSettings_SetOutputPixelFormat(self, value)


    def GetOutputPixelFormat(self):
        """! * The output pixel format 
        """

        return _Simplygon.spOpacityCasterSettings_GetOutputPixelFormat(self)


    def SetDitherType(self, value) -> None:
        """! * The type of dithering to use when creating the output object. 
         * @param value The desired value of the DitherType to use. 
        """

        return _Simplygon.spOpacityCasterSettings_SetDitherType(self, value)


    def GetDitherType(self):
        """! * The type of dithering to use when creating the output object. 
        """

        return _Simplygon.spOpacityCasterSettings_GetDitherType(self)


    def SetFillMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCasterSettings_SetFillMode(self, value)


    def GetFillMode(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spOpacityCasterSettings_GetFillMode(self)


    def SetUseMultisampling(self, value: bool) -> None:
        """! * Enable or disable multisampling. 
         * @param value The desired value of the flag. 
        """

        return _Simplygon.spOpacityCasterSettings_SetUseMultisampling(self, value)


    def GetUseMultisampling(self) -> bool:
        """! * Enable or disable multisampling. 
        """

        return _Simplygon.spOpacityCasterSettings_GetUseMultisampling(self)


    def SetOutputImageFileFormat(self, value) -> None:
        """! * File format for output texture. 
         * @param value The desired file format. 
        """

        return _Simplygon.spOpacityCasterSettings_SetOutputImageFileFormat(self, value)


    def GetOutputImageFileFormat(self):
        """! * File format for output texture. 
        """

        return _Simplygon.spOpacityCasterSettings_GetOutputImageFileFormat(self)


    def SetOutputDDSCompressionType(self, value) -> None:
        """! * DDS compression if output format is DDS. 
         * @param value The desired DDS compression type. 
        """

        return _Simplygon.spOpacityCasterSettings_SetOutputDDSCompressionType(self, value)


    def GetOutputDDSCompressionType(self):
        """! * DDS compression if output format is DDS. 
        """

        return _Simplygon.spOpacityCasterSettings_GetOutputDDSCompressionType(self)


    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spOpacityCasterSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spOpacityCasterSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOpacityCasterSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOpacityCasterSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOpacityCasterSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOpacityCasterSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOpacityCasterSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spOpacityCasterSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spOpacityCasterSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spOpacityCasterSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spOpacityCasterSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spOpacityCasterSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spOpacityCasterSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCasterSettings_SetValidateParameterNames(self, validate)


    def SetOutputSRGB(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCasterSettings_SetOutputSRGB(self, value)


    def GetOutputSRGB(self) -> bool:
        """! * 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. 
         *  
        """

        return _Simplygon.spOpacityCasterSettings_GetOutputSRGB(self)


    def SetOutputOpacityType(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spOpacityCasterSettings_SetOutputOpacityType(self, value)


    def GetOutputOpacityType(self):
        """! * 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' 
        """

        return _Simplygon.spOpacityCasterSettings_GetOutputOpacityType(self)

    __swig_destroy__ = _Simplygon.delete_spOpacityCasterSettings

_Simplygon.spOpacityCasterSettings_swigregister(spOpacityCasterSettings)

def spOpacityCasterSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spOpacityCasterSettings_IsClassA(type)

def spOpacityCasterSettings_SafeCast(other: spObject) -> spOpacityCasterSettings:
    """! * 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 
    """

    return _Simplygon.spOpacityCasterSettings_SafeCast(other)

class spNormalCaster(spMaterialCaster):
    """!NormalCaster is the interface used to cast normals data onto the receiving geometry."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spNormalCaster_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spNormalCaster:
        """! * 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 
        """

        return _Simplygon.spNormalCaster_SafeCast(other)

    def GetMaterialCasterSettings(self) -> spMaterialCasterSettings:
        """! * The settings object. 
        """

        return _Simplygon.spNormalCaster_GetMaterialCasterSettings(self)


    def SetSourceTextures(self, value: spTextureTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_SetSourceTextures(self, value)


    def GetSourceTextures(self) -> spTextureTable:
        """! * The SourceTextures object. The SourceTextures object contains all textures of 
         * the the source geometry. 
        """

        return _Simplygon.spNormalCaster_GetSourceTextures(self)


    def SetSourceMaterials(self, value: spMaterialTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_SetSourceMaterials(self, value)


    def GetSourceMaterials(self) -> spMaterialTable:
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_GetSourceMaterials(self)


    def SetDestMaterialId(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_SetDestMaterialId(self, value)


    def GetDestMaterialId(self) -> int:
        """! * The DestMaterialId object. If set, only the parts of the destination map that. 
         * To disable, set to -1. 
        """

        return _Simplygon.spNormalCaster_GetDestMaterialId(self)


    def SetMappingImage(self, value: spMappingImage) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_SetMappingImage(self, value)


    def GetMappingImage(self) -> spMappingImage:
        """! * The MappingImage object. The MappingImage object contains the mapping between 
         * the Geometry and SourceGeometry objects. 
        """

        return _Simplygon.spNormalCaster_GetMappingImage(self)


    def SetOutputFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_SetOutputFilePath(self, value)


    def GetOutputFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_GetOutputFilePath(self)


    def SetOutputImage(self, value: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_SetOutputImage(self, value)


    def GetOutputImage(self) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_GetOutputImage(self)


    def NewCopy(self) -> spMaterialCaster:
        """! * Create a new clone of the material caster, copying all settings. 
        """

        return _Simplygon.spNormalCaster_NewCopy(self)


    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spNormalCaster_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spNormalCaster_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spNormalCaster_ToJSON(self)


    def GetNormalCasterSettings(self) -> spNormalCasterSettings:
        """! * The normal caster settings object. 
         * @return Normal caster settings object. 
        """

        return _Simplygon.spNormalCaster_GetNormalCasterSettings(self)

    __swig_destroy__ = _Simplygon.delete_spNormalCaster

_Simplygon.spNormalCaster_swigregister(spNormalCaster)

def spNormalCaster_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spNormalCaster_IsClassA(type)

def spNormalCaster_SafeCast(other: spObject) -> spNormalCaster:
    """! * 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 
    """

    return _Simplygon.spNormalCaster_SafeCast(other)

class spNormalCasterSettings(spMaterialCasterSettings):
    """!NormalCasterSettings is the interface used to manage settings for a normal caster"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spNormalCasterSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spNormalCasterSettings:
        """! * 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 
        """

        return _Simplygon.spNormalCasterSettings_SafeCast(other)

    def SetMaterialChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_SetMaterialChannel(self, value)


    def GetMaterialChannel(self) -> str:
        """! * The name of the input material channel to cast. Existing user channels of any 
         * arbitrary name in the input materials can be cast. 
        """

        return _Simplygon.spNormalCasterSettings_GetMaterialChannel(self)


    def SetOpacityChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_SetOpacityChannel(self, value)


    def GetOpacityChannel(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_GetOpacityChannel(self)


    def SetOpacityChannelComponent(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_SetOpacityChannelComponent(self, value)


    def GetOpacityChannelComponent(self):
        """! * The component in the opacity channel to use as opacity value. 
        """

        return _Simplygon.spNormalCasterSettings_GetOpacityChannelComponent(self)


    def SetDilation(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_SetDilation(self, value)


    def GetDilation(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spNormalCasterSettings_GetDilation(self)


    def SetOutputPixelFormat(self, value) -> None:
        """! * The output pixel format 
         * @param value The desired value to which OutputChannels will be set. 
        """

        return _Simplygon.spNormalCasterSettings_SetOutputPixelFormat(self, value)


    def GetOutputPixelFormat(self):
        """! * The output pixel format 
        """

        return _Simplygon.spNormalCasterSettings_GetOutputPixelFormat(self)


    def SetDitherType(self, value) -> None:
        """! * The type of dithering to use when creating the output object. 
         * @param value The desired value of the DitherType to use. 
        """

        return _Simplygon.spNormalCasterSettings_SetDitherType(self, value)


    def GetDitherType(self):
        """! * The type of dithering to use when creating the output object. 
        """

        return _Simplygon.spNormalCasterSettings_GetDitherType(self)


    def SetFillMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_SetFillMode(self, value)


    def GetFillMode(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spNormalCasterSettings_GetFillMode(self)


    def SetUseMultisampling(self, value: bool) -> None:
        """! * Enable or disable multisampling. 
         * @param value The desired value of the flag. 
        """

        return _Simplygon.spNormalCasterSettings_SetUseMultisampling(self, value)


    def GetUseMultisampling(self) -> bool:
        """! * Enable or disable multisampling. 
        """

        return _Simplygon.spNormalCasterSettings_GetUseMultisampling(self)


    def SetOutputImageFileFormat(self, value) -> None:
        """! * File format for output texture. 
         * @param value The desired file format. 
        """

        return _Simplygon.spNormalCasterSettings_SetOutputImageFileFormat(self, value)


    def GetOutputImageFileFormat(self):
        """! * File format for output texture. 
        """

        return _Simplygon.spNormalCasterSettings_GetOutputImageFileFormat(self)


    def SetOutputDDSCompressionType(self, value) -> None:
        """! * DDS compression if output format is DDS. 
         * @param value The desired DDS compression type. 
        """

        return _Simplygon.spNormalCasterSettings_SetOutputDDSCompressionType(self, value)


    def GetOutputDDSCompressionType(self):
        """! * DDS compression if output format is DDS. 
        """

        return _Simplygon.spNormalCasterSettings_GetOutputDDSCompressionType(self)


    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spNormalCasterSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spNormalCasterSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spNormalCasterSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spNormalCasterSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spNormalCasterSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spNormalCasterSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spNormalCasterSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spNormalCasterSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spNormalCasterSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spNormalCasterSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spNormalCasterSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spNormalCasterSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spNormalCasterSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_SetValidateParameterNames(self, validate)


    def SetFlipBackfacingNormals(self, value: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spNormalCasterSettings_SetFlipBackfacingNormals(self, value)


    def GetFlipBackfacingNormals(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_GetFlipBackfacingNormals(self)


    def SetGenerateTangentSpaceNormals(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_SetGenerateTangentSpaceNormals(self, value)


    def GetGenerateTangentSpaceNormals(self) -> bool:
        """! * If set, then the generated normal map will be in tangent space. Please note that 
         * the geometry casted to must contain tangent space fields. 
        """

        return _Simplygon.spNormalCasterSettings_GetGenerateTangentSpaceNormals(self)


    def SetFlipGreen(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_SetFlipGreen(self, value)


    def GetFlipGreen(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_GetFlipGreen(self)


    def SetCalculateBitangentPerFragment(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_SetCalculateBitangentPerFragment(self, value)


    def GetCalculateBitangentPerFragment(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_GetCalculateBitangentPerFragment(self)


    def SetNormalizeInterpolatedTangentSpace(self, value: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spNormalCasterSettings_SetNormalizeInterpolatedTangentSpace(self, value)


    def GetNormalizeInterpolatedTangentSpace(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spNormalCasterSettings_GetNormalizeInterpolatedTangentSpace(self)

    __swig_destroy__ = _Simplygon.delete_spNormalCasterSettings

_Simplygon.spNormalCasterSettings_swigregister(spNormalCasterSettings)

def spNormalCasterSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spNormalCasterSettings_IsClassA(type)

def spNormalCasterSettings_SafeCast(other: spObject) -> spNormalCasterSettings:
    """! * 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 
    """

    return _Simplygon.spNormalCasterSettings_SafeCast(other)

class spNormalRepairer(spProcessingObject):
    """!Repairs normals on a processed geometry."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spNormalRepairer_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spNormalRepairer:
        """! * 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 
        """

        return _Simplygon.spNormalRepairer_SafeCast(other)

    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spNormalRepairer_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spNormalRepairer_ToJSON(self)


    def SetScene(self, value: spScene) -> None:
        """! * The scene. 
         * @param value The scene object to use. 
        """

        return _Simplygon.spNormalRepairer_SetScene(self, value)


    def GetScene(self) -> spScene:
        """! * The scene. 
        """

        return _Simplygon.spNormalRepairer_GetScene(self)


    def SetProcessSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_SetProcessSelectionSetID(self, value)


    def GetProcessSelectionSetID(self) -> int:
        """! * The ID of the SelectionSet containing the meshes to process If the ID is -1, 
         * all meshes are selected. 
        """

        return _Simplygon.spNormalRepairer_GetProcessSelectionSetID(self)


    def SetProcessSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_SetProcessSelectionSetName(self, value)


    def GetProcessSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_GetProcessSelectionSetName(self)


    def SetRecalculateNormals(self, value: bool) -> None:
        """! * Set/Get whether to recalculate new normals. 
         * @param value The new value of RecalculateNormals. 
        """

        return _Simplygon.spNormalRepairer_SetRecalculateNormals(self, value)


    def GetRecalculateNormals(self) -> bool:
        """! * Set/Get whether to recalculate new normals. 
        """

        return _Simplygon.spNormalRepairer_GetRecalculateNormals(self)


    def SetHardEdgeAngle(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_SetHardEdgeAngle(self, value)


    def GetHardEdgeAngle(self) -> float:
        """! * The edge angle in degrees above which an edge is considered "hard". 
        """

        return _Simplygon.spNormalRepairer_GetHardEdgeAngle(self)


    def SetScaleByArea(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_SetScaleByArea(self, value)


    def GetScaleByArea(self) -> bool:
        """! * The ScaleByArea flag. If set, the influence of a triangle normal upon the vertex 
         * normals is scaled by the area of the triangle. 
        """

        return _Simplygon.spNormalRepairer_GetScaleByArea(self)


    def SetScaleByAngle(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_SetScaleByAngle(self, value)


    def GetScaleByAngle(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_GetScaleByAngle(self)


    def SetRepairOnlyInvalidNormals(self, value: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spNormalRepairer_SetRepairOnlyInvalidNormals(self, value)


    def GetRepairOnlyInvalidNormals(self) -> bool:
        """! * The RepairOnlyInvalidNormals flag If set, then only those normals that are invalid 
         * (backfacing, zero length etc) will be fixed. 
        """

        return _Simplygon.spNormalRepairer_GetRepairOnlyInvalidNormals(self)


    def SetSnapNormalsToFlatSurfaces(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_SetSnapNormalsToFlatSurfaces(self, value)


    def GetSnapNormalsToFlatSurfaces(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_GetSnapNormalsToFlatSurfaces(self)


    def SetFlipFacesAndNormals(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_SetFlipFacesAndNormals(self, value)


    def GetFlipFacesAndNormals(self):
        """! * 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. 
        """

        return _Simplygon.spNormalRepairer_GetFlipFacesAndNormals(self)


    def SetGeometry(self, value: spGeometryData) -> None:
        """! * The Geometry object. 
         * @param value The geometry that is to be repaired. 
        """

        return _Simplygon.spNormalRepairer_SetGeometry(self, value)


    def GetGeometry(self) -> spGeometryData:
        """! * The Geometry object. 
        """

        return _Simplygon.spNormalRepairer_GetGeometry(self)


    def SetAutoCorrectionAllowsDoubleSided(self, value: bool) -> None:
        """! * Set true to allow for double sided triangles. 
         * @param value The desired value of the flag. 
        """

        return _Simplygon.spNormalRepairer_SetAutoCorrectionAllowsDoubleSided(self, value)


    def SetAutoCorrectionRatioThreshold(self, value: float) -> None:
        """! * The threshold ratio for auto correction. 
         * @param value The desired threshold ratio. 
        """

        return _Simplygon.spNormalRepairer_SetAutoCorrectionRatioThreshold(self, value)


    def SetAutoCorrectionSingleSidedThreshold(self, value: float) -> None:
        """! * The threshold ratio for auto correction to treat triangle as single sided. 
         * @param value The desired threshold. 
        """

        return _Simplygon.spNormalRepairer_SetAutoCorrectionSingleSidedThreshold(self, value)

    __swig_destroy__ = _Simplygon.delete_spNormalRepairer

_Simplygon.spNormalRepairer_swigregister(spNormalRepairer)

def spNormalRepairer_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spNormalRepairer_IsClassA(type)

def spNormalRepairer_SafeCast(other: spObject) -> spNormalRepairer:
    """! * 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 
    """

    return _Simplygon.spNormalRepairer_SafeCast(other)

class spDisplacementCaster(spMaterialCaster):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spDisplacementCaster_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spDisplacementCaster:
        """! * 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 
        """

        return _Simplygon.spDisplacementCaster_SafeCast(other)

    def GetMaterialCasterSettings(self) -> spMaterialCasterSettings:
        """! * The settings object. 
        """

        return _Simplygon.spDisplacementCaster_GetMaterialCasterSettings(self)


    def SetSourceTextures(self, value: spTextureTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_SetSourceTextures(self, value)


    def GetSourceTextures(self) -> spTextureTable:
        """! * The SourceTextures object. The SourceTextures object contains all textures of 
         * the the source geometry. 
        """

        return _Simplygon.spDisplacementCaster_GetSourceTextures(self)


    def SetSourceMaterials(self, value: spMaterialTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_SetSourceMaterials(self, value)


    def GetSourceMaterials(self) -> spMaterialTable:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_GetSourceMaterials(self)


    def SetDestMaterialId(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_SetDestMaterialId(self, value)


    def GetDestMaterialId(self) -> int:
        """! * The DestMaterialId object. If set, only the parts of the destination map that. 
         * To disable, set to -1. 
        """

        return _Simplygon.spDisplacementCaster_GetDestMaterialId(self)


    def SetMappingImage(self, value: spMappingImage) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_SetMappingImage(self, value)


    def GetMappingImage(self) -> spMappingImage:
        """! * The MappingImage object. The MappingImage object contains the mapping between 
         * the Geometry and SourceGeometry objects. 
        """

        return _Simplygon.spDisplacementCaster_GetMappingImage(self)


    def SetOutputFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_SetOutputFilePath(self, value)


    def GetOutputFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_GetOutputFilePath(self)


    def SetOutputImage(self, value: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_SetOutputImage(self, value)


    def GetOutputImage(self) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_GetOutputImage(self)


    def NewCopy(self) -> spMaterialCaster:
        """! * Create a new clone of the material caster, copying all settings. 
        """

        return _Simplygon.spDisplacementCaster_NewCopy(self)


    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spDisplacementCaster_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCaster_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spDisplacementCaster_ToJSON(self)


    def GetDisplacementCasterSettings(self) -> spDisplacementCasterSettings:
        """! * The displacement caster settings object. 
         * @return Displacement caster settings object. 
        """

        return _Simplygon.spDisplacementCaster_GetDisplacementCasterSettings(self)

    __swig_destroy__ = _Simplygon.delete_spDisplacementCaster

_Simplygon.spDisplacementCaster_swigregister(spDisplacementCaster)

def spDisplacementCaster_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spDisplacementCaster_IsClassA(type)

def spDisplacementCaster_SafeCast(other: spObject) -> spDisplacementCaster:
    """! * 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 
    """

    return _Simplygon.spDisplacementCaster_SafeCast(other)

class spDisplacementCasterSettings(spMaterialCasterSettings):
    """!DisplacementCasterSettings is used to store the settings for a displacement caster"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spDisplacementCasterSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spDisplacementCasterSettings:
        """! * 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 
        """

        return _Simplygon.spDisplacementCasterSettings_SafeCast(other)

    def SetMaterialChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetMaterialChannel(self, value)


    def GetMaterialChannel(self) -> str:
        """! * The name of the input material channel to cast. Existing user channels of any 
         * arbitrary name in the input materials can be cast. 
        """

        return _Simplygon.spDisplacementCasterSettings_GetMaterialChannel(self)


    def SetOpacityChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetOpacityChannel(self, value)


    def GetOpacityChannel(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_GetOpacityChannel(self)


    def SetOpacityChannelComponent(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetOpacityChannelComponent(self, value)


    def GetOpacityChannelComponent(self):
        """! * The component in the opacity channel to use as opacity value. 
        """

        return _Simplygon.spDisplacementCasterSettings_GetOpacityChannelComponent(self)


    def SetDilation(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetDilation(self, value)


    def GetDilation(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spDisplacementCasterSettings_GetDilation(self)


    def SetOutputPixelFormat(self, value) -> None:
        """! * The output pixel format 
         * @param value The desired value to which OutputChannels will be set. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetOutputPixelFormat(self, value)


    def GetOutputPixelFormat(self):
        """! * The output pixel format 
        """

        return _Simplygon.spDisplacementCasterSettings_GetOutputPixelFormat(self)


    def SetDitherType(self, value) -> None:
        """! * The type of dithering to use when creating the output object. 
         * @param value The desired value of the DitherType to use. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetDitherType(self, value)


    def GetDitherType(self):
        """! * The type of dithering to use when creating the output object. 
        """

        return _Simplygon.spDisplacementCasterSettings_GetDitherType(self)


    def SetFillMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetFillMode(self, value)


    def GetFillMode(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spDisplacementCasterSettings_GetFillMode(self)


    def SetUseMultisampling(self, value: bool) -> None:
        """! * Enable or disable multisampling. 
         * @param value The desired value of the flag. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetUseMultisampling(self, value)


    def GetUseMultisampling(self) -> bool:
        """! * Enable or disable multisampling. 
        """

        return _Simplygon.spDisplacementCasterSettings_GetUseMultisampling(self)


    def SetOutputImageFileFormat(self, value) -> None:
        """! * File format for output texture. 
         * @param value The desired file format. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetOutputImageFileFormat(self, value)


    def GetOutputImageFileFormat(self):
        """! * File format for output texture. 
        """

        return _Simplygon.spDisplacementCasterSettings_GetOutputImageFileFormat(self)


    def SetOutputDDSCompressionType(self, value) -> None:
        """! * DDS compression if output format is DDS. 
         * @param value The desired DDS compression type. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetOutputDDSCompressionType(self, value)


    def GetOutputDDSCompressionType(self):
        """! * DDS compression if output format is DDS. 
        """

        return _Simplygon.spDisplacementCasterSettings_GetOutputDDSCompressionType(self)


    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spDisplacementCasterSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spDisplacementCasterSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spDisplacementCasterSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spDisplacementCasterSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spDisplacementCasterSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spDisplacementCasterSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spDisplacementCasterSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spDisplacementCasterSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spDisplacementCasterSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spDisplacementCasterSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spDisplacementCasterSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spDisplacementCasterSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spDisplacementCasterSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetValidateParameterNames(self, validate)


    def SetDistanceScaling(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetDistanceScaling(self, value)


    def GetDistanceScaling(self) -> float:
        """! * All the delta values are divided by this value before storing them into an image. 
         *  
        """

        return _Simplygon.spDisplacementCasterSettings_GetDistanceScaling(self)


    def SetGenerateScalarDisplacement(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetGenerateScalarDisplacement(self, value)


    def GetGenerateScalarDisplacement(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_GetGenerateScalarDisplacement(self)


    def SetGenerateTangentSpaceDisplacement(self, value: bool) -> None:
        """! * If set, the displacement vectors are transformed into the destination object 
         * tangent space. 
         * @param value The desired GenerateTangentSpaceDisplacement flag. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetGenerateTangentSpaceDisplacement(self, value)


    def GetGenerateTangentSpaceDisplacement(self) -> bool:
        """! * If set, the displacement vectors are transformed into the destination object 
         * tangent space. 
        """

        return _Simplygon.spDisplacementCasterSettings_GetGenerateTangentSpaceDisplacement(self)


    def SetNormalMapTexCoordLevel(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spDisplacementCasterSettings_SetNormalMapTexCoordLevel(self, value)


    def GetNormalMapTexCoordLevel(self) -> int:
        """! * The texture coordinate level to use for the tangent space displacement vectors. 
         *  
        """

        return _Simplygon.spDisplacementCasterSettings_GetNormalMapTexCoordLevel(self)

    __swig_destroy__ = _Simplygon.delete_spDisplacementCasterSettings

_Simplygon.spDisplacementCasterSettings_swigregister(spDisplacementCasterSettings)

def spDisplacementCasterSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spDisplacementCasterSettings_IsClassA(type)

def spDisplacementCasterSettings_SafeCast(other: spObject) -> spDisplacementCasterSettings:
    """! * 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 
    """

    return _Simplygon.spDisplacementCasterSettings_SafeCast(other)

class spTangentCalculator(spObject):
    """!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. """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spTangentCalculator_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spTangentCalculator:
        """! * 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 
        """

        return _Simplygon.spTangentCalculator_SafeCast(other)

    def CalculateTangents(self, geom: spGeometryData) -> None:
        """! * Calculates the tangents of a geometry data object. 
         * @param geom The geometry object receives new fields, as described in the class 
         * description. 
        """

        return _Simplygon.spTangentCalculator_CalculateTangents(self, geom)


    def CalculateTangentsForNodeHierarchy(self, node: spSceneNode) -> None:
        """! * 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. 
        """

        return _Simplygon.spTangentCalculator_CalculateTangentsForNodeHierarchy(self, node)


    def SetTexCoordsSetId(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spTangentCalculator_SetTexCoordsSetId(self, value)


    def GetTexCoordsSetId(self) -> int:
        """! * The TexCoords field id to use for the tangent calculation. If set to -1, all 
         * texture coordinates will get corresponding tangent fields. 
        """

        return _Simplygon.spTangentCalculator_GetTexCoordsSetId(self)


    def SetTangentCalculatorType(self, type) -> None:
        """! * Sets/Gets the tangent calculator type, types listed in TangentSpaceMethod. 
         * @param type The desired tangent calculator type. 
        """

        return _Simplygon.spTangentCalculator_SetTangentCalculatorType(self, type)


    def GetTangentCalculatorType(self):
        """! * Sets/Gets the tangent calculator type, types listed in TangentSpaceMethod. 
        """

        return _Simplygon.spTangentCalculator_GetTangentCalculatorType(self)


    def SetInvertV(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spTangentCalculator_SetInvertV(self, value)


    def GetInvertV(self) -> bool:
        """! * 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. 
         *  
        """

        return _Simplygon.spTangentCalculator_GetInvertV(self)

    __swig_destroy__ = _Simplygon.delete_spTangentCalculator

_Simplygon.spTangentCalculator_swigregister(spTangentCalculator)

def spTangentCalculator_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spTangentCalculator_IsClassA(type)

def spTangentCalculator_SafeCast(other: spObject) -> spTangentCalculator:
    """! * 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 
    """

    return _Simplygon.spTangentCalculator_SafeCast(other)

class spRepairSettings(spSettingsObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spRepairSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spRepairSettings:
        """! * 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 
        """

        return _Simplygon.spRepairSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spRepairSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spRepairSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRepairSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRepairSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRepairSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRepairSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRepairSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spRepairSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spRepairSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spRepairSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spRepairSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spRepairSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spRepairSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRepairSettings_SetValidateParameterNames(self, validate)


    def SetTJuncDist(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRepairSettings_SetTJuncDist(self, value)


    def GetTJuncDist(self) -> float:
        """! * The T-Junction distance, below which, the T-Junctions will be welded. 
        """

        return _Simplygon.spRepairSettings_GetTJuncDist(self)


    def SetUseTJunctionRemover(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRepairSettings_SetUseTJunctionRemover(self, value)


    def GetUseTJunctionRemover(self) -> bool:
        """! * If set, t-junctions will be removed. If enabled, it also requires UseWelding 
         * to be on. 
        """

        return _Simplygon.spRepairSettings_GetUseTJunctionRemover(self)


    def SetWeldDist(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRepairSettings_SetWeldDist(self, value)


    def GetWeldDist(self) -> float:
        """! * The welding distance below which the vertices will be welded. 
        """

        return _Simplygon.spRepairSettings_GetWeldDist(self)


    def SetWeldOnlyBorderVertices(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRepairSettings_SetWeldOnlyBorderVertices(self, value)


    def GetWeldOnlyBorderVertices(self) -> bool:
        """! * If set, only vertices that are on the border (as reported by the VertexBorder 
         * boolean field) are considered for the welding. 
        """

        return _Simplygon.spRepairSettings_GetWeldOnlyBorderVertices(self)


    def SetWeldOnlyWithinMaterial(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRepairSettings_SetWeldOnlyWithinMaterial(self, value)


    def GetWeldOnlyWithinMaterial(self) -> bool:
        """! * If set, only vertices that are within the same material are welded. Vertices 
         * on material borders are locked. 
        """

        return _Simplygon.spRepairSettings_GetWeldOnlyWithinMaterial(self)


    def SetWeldOnlyWithinSceneNode(self, value: bool) -> None:
        """! * If set, only vertices that are within the same scene node are welded. 
         * @param value The bool to which WeldOnlyWithinSceneNode will be set. 
        """

        return _Simplygon.spRepairSettings_SetWeldOnlyWithinSceneNode(self, value)


    def GetWeldOnlyWithinSceneNode(self) -> bool:
        """! * If set, only vertices that are within the same scene node are welded. 
        """

        return _Simplygon.spRepairSettings_GetWeldOnlyWithinSceneNode(self)


    def SetWeldOnlyBetweenSceneNodes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRepairSettings_SetWeldOnlyBetweenSceneNodes(self, value)


    def GetWeldOnlyBetweenSceneNodes(self) -> bool:
        """! * If set, only vertices that belong to different scene nodes are considered for 
         * the welding. Affects both welder and t-junction remover. 
        """

        return _Simplygon.spRepairSettings_GetWeldOnlyBetweenSceneNodes(self)


    def SetUseWelding(self, value: bool) -> None:
        """! * If set, vertices within each others welding distance will be welded together. 
         * @param value The bool to which UseWelding will be set. 
        """

        return _Simplygon.spRepairSettings_SetUseWelding(self, value)


    def GetUseWelding(self) -> bool:
        """! * If set, vertices within each others welding distance will be welded together. 
         *  
        """

        return _Simplygon.spRepairSettings_GetUseWelding(self)


    def SetProgressivePasses(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRepairSettings_SetProgressivePasses(self, value)


    def GetProgressivePasses(self) -> int:
        """! * The number of progressive passes. Minimum is 1, but higher numbers give a better 
         * quality, at the expense of longer running time. 
        """

        return _Simplygon.spRepairSettings_GetProgressivePasses(self)

    __swig_destroy__ = _Simplygon.delete_spRepairSettings

_Simplygon.spRepairSettings_swigregister(spRepairSettings)

def spRepairSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spRepairSettings_IsClassA(type)

def spRepairSettings_SafeCast(other: spObject) -> spRepairSettings:
    """! * 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 
    """

    return _Simplygon.spRepairSettings_SafeCast(other)

class spBoneSettings(spSettingsObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spBoneSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spBoneSettings:
        """! * 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 
        """

        return _Simplygon.spBoneSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spBoneSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spBoneSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBoneSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBoneSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBoneSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBoneSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBoneSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spBoneSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spBoneSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spBoneSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spBoneSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spBoneSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spBoneSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetValidateParameterNames(self, validate)


    def SetBoneReductionTargets(self, stopCondition, useBoneRatio: bool, useBoneCount: bool, useMaxDeviation: bool, useOnScreenSize: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetBoneReductionTargets(self, stopCondition, useBoneRatio, useBoneCount, useMaxDeviation, useOnScreenSize)


    def SetBoneReductionTargetBoneRatioEnabled(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetBoneReductionTargetBoneRatioEnabled(self, value)


    def GetBoneReductionTargetBoneRatioEnabled(self) -> bool:
        """! * Enable bone ratio as a reduction target. The reducer will stop when the set bone-ratio 
         * has been reached. 
        """

        return _Simplygon.spBoneSettings_GetBoneReductionTargetBoneRatioEnabled(self)


    def SetBoneReductionTargetBoneCountEnabled(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetBoneReductionTargetBoneCountEnabled(self, value)


    def GetBoneReductionTargetBoneCountEnabled(self) -> bool:
        """! * Enable bone count as a reduction target. The reducer will stop when the set bone 
         * count has been reached. 
        """

        return _Simplygon.spBoneSettings_GetBoneReductionTargetBoneCountEnabled(self)


    def SetBoneReductionTargetMaxDeviationEnabled(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetBoneReductionTargetMaxDeviationEnabled(self, value)


    def GetBoneReductionTargetMaxDeviationEnabled(self) -> bool:
        """! * Enable max deviation as a reduction target. The reducer will stop when the set 
         * max deviation has been reached. 
        """

        return _Simplygon.spBoneSettings_GetBoneReductionTargetMaxDeviationEnabled(self)


    def SetBoneReductionTargetOnScreenSizeEnabled(self, value: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spBoneSettings_SetBoneReductionTargetOnScreenSizeEnabled(self, value)


    def GetBoneReductionTargetOnScreenSizeEnabled(self) -> bool:
        """! * Enable on screen size as a reduction target. The reducer will stop when the set 
         * on screen size has been reached. 
        """

        return _Simplygon.spBoneSettings_GetBoneReductionTargetOnScreenSizeEnabled(self)


    def SetBoneReductionTargetStopCondition(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetBoneReductionTargetStopCondition(self, value)


    def GetBoneReductionTargetStopCondition(self):
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_GetBoneReductionTargetStopCondition(self)


    def SetBoneReductionTargetBoneRatio(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetBoneReductionTargetBoneRatio(self, value)


    def GetBoneReductionTargetBoneRatio(self) -> float:
        """! * The desired bone reduction ratio. The range is 0->1. 
        """

        return _Simplygon.spBoneSettings_GetBoneReductionTargetBoneRatio(self)


    def SetBoneReductionTargetBoneCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetBoneReductionTargetBoneCount(self, value)


    def GetBoneReductionTargetBoneCount(self) -> int:
        """! * The desired bone count. The range is 0->inf. 
        """

        return _Simplygon.spBoneSettings_GetBoneReductionTargetBoneCount(self)


    def SetBoneReductionTargetMaxDeviation(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetBoneReductionTargetMaxDeviation(self, value)


    def GetBoneReductionTargetMaxDeviation(self) -> float:
        """! * The MaxDeviation value, the maximum surface-deviation between the reduced geometry 
         * and the original. 
        """

        return _Simplygon.spBoneSettings_GetBoneReductionTargetMaxDeviation(self)


    def SetBoneReductionTargetOnScreenSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetBoneReductionTargetOnScreenSize(self, value)


    def GetBoneReductionTargetOnScreenSize(self) -> int:
        """! * The OnScreenSize value, the maximum surface-deviation between the reduced geometry 
         * and the original. 
        """

        return _Simplygon.spBoneSettings_GetBoneReductionTargetOnScreenSize(self)


    def SetMaxBonePerVertex(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetMaxBonePerVertex(self, value)


    def GetMaxBonePerVertex(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_GetMaxBonePerVertex(self)


    def SetRemoveUnusedBones(self, value: bool) -> None:
        """! * Decides whether unused bones should be removed. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spBoneSettings_SetRemoveUnusedBones(self, value)


    def GetRemoveUnusedBones(self) -> bool:
        """! * Decides whether unused bones should be removed. 
        """

        return _Simplygon.spBoneSettings_GetRemoveUnusedBones(self)


    def SetLimitBonesPerVertex(self, value: bool) -> None:
        """! * Decides whether unused bones should be removed. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spBoneSettings_SetLimitBonesPerVertex(self, value)


    def GetLimitBonesPerVertex(self) -> bool:
        """! * Decides whether unused bones should be removed. 
        """

        return _Simplygon.spBoneSettings_GetLimitBonesPerVertex(self)


    def SetUseBoneReducer(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetUseBoneReducer(self, value)


    def GetUseBoneReducer(self) -> bool:
        """! * Enables or disables the bone reduction processing that actually removes bones. 
         * Even with this flag off, the bones per vertex can still be limited. 
        """

        return _Simplygon.spBoneSettings_GetUseBoneReducer(self)


    def SetLockBoneSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetLockBoneSelectionSetID(self, value)


    def GetLockBoneSelectionSetID(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_GetLockBoneSelectionSetID(self)


    def SetLockBoneSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetLockBoneSelectionSetName(self, value)


    def GetLockBoneSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_GetLockBoneSelectionSetName(self)


    def SetRemoveBoneSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetRemoveBoneSelectionSetID(self, value)


    def GetRemoveBoneSelectionSetID(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_GetRemoveBoneSelectionSetID(self)


    def SetRemoveBoneSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_SetRemoveBoneSelectionSetName(self, value)


    def GetRemoveBoneSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spBoneSettings_GetRemoveBoneSelectionSetName(self)

    __swig_destroy__ = _Simplygon.delete_spBoneSettings

_Simplygon.spBoneSettings_swigregister(spBoneSettings)

def spBoneSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spBoneSettings_IsClassA(type)

def spBoneSettings_SafeCast(other: spObject) -> spBoneSettings:
    """! * 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 
    """

    return _Simplygon.spBoneSettings_SafeCast(other)

class spReductionSettings(spSettingsObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spReductionSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spReductionSettings:
        """! * 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 
        """

        return _Simplygon.spReductionSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spReductionSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spReductionSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spReductionSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spReductionSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spReductionSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spReductionSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spReductionSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spReductionSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetValidateParameterNames(self, validate)


    def SetReductionTargets(self, stopCondition, useTriangleRatio: bool, useTriangleCount: bool, useMaxDeviation: bool, useOnScreenSize: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetReductionTargets(self, stopCondition, useTriangleRatio, useTriangleCount, useMaxDeviation, useOnScreenSize)


    def SetReductionTargetTriangleRatioEnabled(self, value: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spReductionSettings_SetReductionTargetTriangleRatioEnabled(self, value)


    def GetReductionTargetTriangleRatioEnabled(self) -> bool:
        """! * Enable triangle ratio as a reduction target. The reducer will stop when the set 
         * triangle-ratio has been reached. 
        """

        return _Simplygon.spReductionSettings_GetReductionTargetTriangleRatioEnabled(self)


    def SetReductionTargetTriangleCountEnabled(self, value: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spReductionSettings_SetReductionTargetTriangleCountEnabled(self, value)


    def GetReductionTargetTriangleCountEnabled(self) -> bool:
        """! * Enable triangle count as a reduction target. The reducer will stop when the set 
         * triangle count has been reached. 
        """

        return _Simplygon.spReductionSettings_GetReductionTargetTriangleCountEnabled(self)


    def SetReductionTargetMaxDeviationEnabled(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetReductionTargetMaxDeviationEnabled(self, value)


    def GetReductionTargetMaxDeviationEnabled(self) -> bool:
        """! * Enable max deviation as a reduction target. The reducer will stop when the set 
         * max deviation has been reached. 
        """

        return _Simplygon.spReductionSettings_GetReductionTargetMaxDeviationEnabled(self)


    def SetReductionTargetOnScreenSizeEnabled(self, value: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spReductionSettings_SetReductionTargetOnScreenSizeEnabled(self, value)


    def GetReductionTargetOnScreenSizeEnabled(self) -> bool:
        """! * Enable on screen size as a reduction target. The reducer will stop when the set 
         * on screen size has been reached. 
        """

        return _Simplygon.spReductionSettings_GetReductionTargetOnScreenSizeEnabled(self)


    def SetReductionTargetStopCondition(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetReductionTargetStopCondition(self, value)


    def GetReductionTargetStopCondition(self):
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetReductionTargetStopCondition(self)


    def SetReductionHeuristics(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetReductionHeuristics(self, value)


    def GetReductionHeuristics(self):
        """! * 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 
        """

        return _Simplygon.spReductionSettings_GetReductionHeuristics(self)


    def SetReductionTargetTriangleRatio(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetReductionTargetTriangleRatio(self, value)


    def GetReductionTargetTriangleRatio(self) -> float:
        """! * The wanted reduction ratio. The range is 0->1. 
        """

        return _Simplygon.spReductionSettings_GetReductionTargetTriangleRatio(self)


    def SetReductionTargetTriangleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetReductionTargetTriangleCount(self, value)


    def GetReductionTargetTriangleCount(self) -> int:
        """! * The wanted triangle count. The range is 0->inf. 
        """

        return _Simplygon.spReductionSettings_GetReductionTargetTriangleCount(self)


    def SetReductionTargetMaxDeviation(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetReductionTargetMaxDeviation(self, value)


    def GetReductionTargetMaxDeviation(self) -> float:
        """! * The MaxDeviation value, the maximum surface-deviation between the reduced geometry 
         * and the original. 
        """

        return _Simplygon.spReductionSettings_GetReductionTargetMaxDeviation(self)


    def SetReductionTargetOnScreenSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetReductionTargetOnScreenSize(self, value)


    def GetReductionTargetOnScreenSize(self) -> int:
        """! * The OnScreenSize value, used to calculate the maximum surface-deviation allowed, 
         * by assuming errors less than 1 pixel onscreen will not be noticeable. 
        """

        return _Simplygon.spReductionSettings_GetReductionTargetOnScreenSize(self)


    def SetGeometryImportance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetGeometryImportance(self, value)


    def GetGeometryImportance(self) -> float:
        """! * 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 
        """

        return _Simplygon.spReductionSettings_GetGeometryImportance(self)


    def SetMaterialImportance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetMaterialImportance(self, value)


    def GetMaterialImportance(self) -> float:
        """! * 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 
        """

        return _Simplygon.spReductionSettings_GetMaterialImportance(self)


    def SetTextureImportance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetTextureImportance(self, value)


    def GetTextureImportance(self) -> float:
        """! * 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 
        """

        return _Simplygon.spReductionSettings_GetTextureImportance(self)


    def SetShadingImportance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetShadingImportance(self, value)


    def GetShadingImportance(self) -> float:
        """! * 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 
        """

        return _Simplygon.spReductionSettings_GetShadingImportance(self)


    def SetGroupImportance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetGroupImportance(self, value)


    def GetGroupImportance(self) -> float:
        """! * 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 
        """

        return _Simplygon.spReductionSettings_GetGroupImportance(self)


    def SetVertexColorImportance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetVertexColorImportance(self, value)


    def GetVertexColorImportance(self) -> float:
        """! * 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 
        """

        return _Simplygon.spReductionSettings_GetVertexColorImportance(self)


    def SetEdgeSetImportance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetEdgeSetImportance(self, value)


    def GetEdgeSetImportance(self) -> float:
        """! * 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 
        """

        return _Simplygon.spReductionSettings_GetEdgeSetImportance(self)


    def SetSkinningImportance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetSkinningImportance(self, value)


    def GetSkinningImportance(self) -> float:
        """! * 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 
        """

        return _Simplygon.spReductionSettings_GetSkinningImportance(self)


    def SetCurvatureImportance(self, value: float) -> None:
        """! * @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. 
        """

        return _Simplygon.spReductionSettings_SetCurvatureImportance(self, value)


    def GetCurvatureImportance(self) -> float:
        """! * @deprecated Method is marked as deprecated and will be removed in future version. 
         *  This importance is deprecated and disabled. 
        """

        return _Simplygon.spReductionSettings_GetCurvatureImportance(self)


    def SetCreateGeomorphGeometry(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetCreateGeomorphGeometry(self, value)


    def GetCreateGeomorphGeometry(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetCreateGeomorphGeometry(self)


    def SetAllowDegenerateTexCoords(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetAllowDegenerateTexCoords(self, value)


    def GetAllowDegenerateTexCoords(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetAllowDegenerateTexCoords(self)


    def SetKeepSymmetry(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetKeepSymmetry(self, value)


    def GetKeepSymmetry(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetKeepSymmetry(self)


    def SetUseAutomaticSymmetryDetection(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetUseAutomaticSymmetryDetection(self, value)


    def GetUseAutomaticSymmetryDetection(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetUseAutomaticSymmetryDetection(self)


    def SetUseSymmetryQuadRetriangulator(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetUseSymmetryQuadRetriangulator(self, value)


    def GetUseSymmetryQuadRetriangulator(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetUseSymmetryQuadRetriangulator(self)


    def SetSymmetryAxis(self, value) -> None:
        """! * Set what axis to be used for symmetry calculations. 
         * @param value The value to which SymmetryAxis will be set. 
        """

        return _Simplygon.spReductionSettings_SetSymmetryAxis(self, value)


    def GetSymmetryAxis(self):
        """! * Set what axis to be used for symmetry calculations. 
        """

        return _Simplygon.spReductionSettings_GetSymmetryAxis(self)


    def SetSymmetryOffset(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetSymmetryOffset(self, value)


    def GetSymmetryOffset(self) -> float:
        """! * Set SymmetryOffset, the position on the symmetry axis where the symmetry plane 
         * is placed. 
        """

        return _Simplygon.spReductionSettings_GetSymmetryOffset(self)


    def SetSymmetryDetectionTolerance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetSymmetryDetectionTolerance(self, value)


    def GetSymmetryDetectionTolerance(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetSymmetryDetectionTolerance(self)


    def SetDataCreationPreferences(self, value) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spReductionSettings_SetDataCreationPreferences(self, value)


    def GetDataCreationPreferences(self):
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetDataCreationPreferences(self)


    def SetGenerateGeomorphData(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetGenerateGeomorphData(self, value)


    def GetGenerateGeomorphData(self) -> bool:
        """! * 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". 
        """

        return _Simplygon.spReductionSettings_GetGenerateGeomorphData(self)


    def SetOutwardMoveMultiplier(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetOutwardMoveMultiplier(self, value)


    def GetOutwardMoveMultiplier(self) -> float:
        """! * The outward move multiplier, how much the mesh is allowed to grow its silhouette 
         * perimeter. 
        """

        return _Simplygon.spReductionSettings_GetOutwardMoveMultiplier(self)


    def SetInwardMoveMultiplier(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetInwardMoveMultiplier(self, value)


    def GetInwardMoveMultiplier(self) -> float:
        """! * The inward move multiplier, how much the mesh is allowed to shrink its silhouette 
         * perimeter. 
        """

        return _Simplygon.spReductionSettings_GetInwardMoveMultiplier(self)


    def SetMaxEdgeLength(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetMaxEdgeLength(self, value)


    def GetMaxEdgeLength(self) -> float:
        """! * The maximum length of the triangles edges after reduction. Can be used to limit 
         * output triangle size. 
        """

        return _Simplygon.spReductionSettings_GetMaxEdgeLength(self)


    def SetUseHighQualityNormalCalculation(self, value: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spReductionSettings_SetUseHighQualityNormalCalculation(self, value)


    def GetUseHighQualityNormalCalculation(self) -> bool:
        """! * 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. 
         *  
        """

        return _Simplygon.spReductionSettings_GetUseHighQualityNormalCalculation(self)


    def SetProcessSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetProcessSelectionSetID(self, value)


    def GetProcessSelectionSetID(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetProcessSelectionSetID(self)


    def SetProcessSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetProcessSelectionSetName(self, value)


    def GetProcessSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetProcessSelectionSetName(self)


    def SetMergeGeometries(self, value: bool) -> None:
        """! * The processor will merge all the geometries in the scene into a single geometry 
         * if MergeGeometries is enabled. 
         * @param value The desired MergeGeometries flag. 
        """

        return _Simplygon.spReductionSettings_SetMergeGeometries(self, value)


    def GetMergeGeometries(self) -> bool:
        """! * The processor will merge all the geometries in the scene into a single geometry 
         * if MergeGeometries is enabled. 
        """

        return _Simplygon.spReductionSettings_GetMergeGeometries(self)


    def SetKeepUnprocessedSceneMeshes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetKeepUnprocessedSceneMeshes(self, value)


    def GetKeepUnprocessedSceneMeshes(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_GetKeepUnprocessedSceneMeshes(self)


    def SetLockGeometricBorder(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionSettings_SetLockGeometricBorder(self, value)


    def GetLockGeometricBorder(self) -> bool:
        """! * 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) 
         *  
        """

        return _Simplygon.spReductionSettings_GetLockGeometricBorder(self)

    __swig_destroy__ = _Simplygon.delete_spReductionSettings

_Simplygon.spReductionSettings_swigregister(spReductionSettings)

def spReductionSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spReductionSettings_IsClassA(type)

def spReductionSettings_SafeCast(other: spObject) -> spReductionSettings:
    """! * 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 
    """

    return _Simplygon.spReductionSettings_SafeCast(other)

class spNormalCalculationSettings(spSettingsObject):
    """!Settings for the normal recalculation"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spNormalCalculationSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spNormalCalculationSettings:
        """! * 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 
        """

        return _Simplygon.spNormalCalculationSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spNormalCalculationSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spNormalCalculationSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spNormalCalculationSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spNormalCalculationSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spNormalCalculationSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spNormalCalculationSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spNormalCalculationSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spNormalCalculationSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spNormalCalculationSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spNormalCalculationSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spNormalCalculationSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spNormalCalculationSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spNormalCalculationSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_SetValidateParameterNames(self, validate)


    def SetReplaceNormals(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_SetReplaceNormals(self, value)


    def GetReplaceNormals(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_GetReplaceNormals(self)


    def SetReplaceTangents(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_SetReplaceTangents(self, value)


    def GetReplaceTangents(self) -> bool:
        """! * 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). 
        """

        return _Simplygon.spNormalCalculationSettings_GetReplaceTangents(self)


    def SetHardEdgeAngle(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_SetHardEdgeAngle(self, value)


    def GetHardEdgeAngle(self) -> float:
        """! * 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. 
         *  
        """

        return _Simplygon.spNormalCalculationSettings_GetHardEdgeAngle(self)


    def SetRepairInvalidNormals(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_SetRepairInvalidNormals(self, value)


    def GetRepairInvalidNormals(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_GetRepairInvalidNormals(self)


    def SetReorthogonalizeTangentSpace(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_SetReorthogonalizeTangentSpace(self, value)


    def GetReorthogonalizeTangentSpace(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_GetReorthogonalizeTangentSpace(self)


    def SetScaleByArea(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_SetScaleByArea(self, value)


    def GetScaleByArea(self) -> bool:
        """! * If set, the influence of a triangle normal upon the vertex normals is scaled 
         * by the area of the triangle. 
        """

        return _Simplygon.spNormalCalculationSettings_GetScaleByArea(self)


    def SetScaleByAngle(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_SetScaleByAngle(self, value)


    def GetScaleByAngle(self) -> bool:
        """! * If set, the influence of a triangle normal upon the vertex normals is scaled 
         * by the angle of the corner at the vertex. 
        """

        return _Simplygon.spNormalCalculationSettings_GetScaleByAngle(self)


    def SetSnapNormalsToFlatSurfaces(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_SetSnapNormalsToFlatSurfaces(self, value)


    def GetSnapNormalsToFlatSurfaces(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spNormalCalculationSettings_GetSnapNormalsToFlatSurfaces(self)

    __swig_destroy__ = _Simplygon.delete_spNormalCalculationSettings

_Simplygon.spNormalCalculationSettings_swigregister(spNormalCalculationSettings)

def spNormalCalculationSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spNormalCalculationSettings_IsClassA(type)

def spNormalCalculationSettings_SafeCast(other: spObject) -> spNormalCalculationSettings:
    """! * 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 
    """

    return _Simplygon.spNormalCalculationSettings_SafeCast(other)

class spMappingImageSettings(spSettingsObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMappingImageSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spMappingImageSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spMappingImageSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spMappingImageSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spMappingImageSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMappingImageSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMappingImageSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMappingImageSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spMappingImageSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spMappingImageSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetValidateParameterNames(self, validate)


    def SetInputMaterialCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetInputMaterialCount(self, value)


    def GetInputMaterialCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_GetInputMaterialCount(self)


    def GetInputMaterialSettings(self, index: int) -> spMappingImageInputMaterialSettings:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_GetInputMaterialSettings(self, index)


    def SetOutputMaterialCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetOutputMaterialCount(self, value)


    def GetOutputMaterialCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_GetOutputMaterialCount(self)


    def GetOutputMaterialSettings(self, index: int) -> spMappingImageOutputMaterialSettings:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_GetOutputMaterialSettings(self, index)


    def SetReplaceMappingImages(self, value: bool) -> None:
        """! * Whether to replace already existing mapping images in the scene. 
         * @param value The new value. 
        """

        return _Simplygon.spMappingImageSettings_SetReplaceMappingImages(self, value)


    def GetReplaceMappingImages(self) -> bool:
        """! * Whether to replace already existing mapping images in the scene. 
        """

        return _Simplygon.spMappingImageSettings_GetReplaceMappingImages(self)


    def SetMaximumLayers(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetMaximumLayers(self, value)


    def GetMaximumLayers(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_GetMaximumLayers(self)


    def SetAllowTransparencyMapping(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetAllowTransparencyMapping(self, value)


    def GetAllowTransparencyMapping(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_GetAllowTransparencyMapping(self)


    def SetGenerateMappingImage(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetGenerateMappingImage(self, value)


    def GetGenerateMappingImage(self) -> bool:
        """! * 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. 
         *  
        """

        return _Simplygon.spMappingImageSettings_GetGenerateMappingImage(self)


    def SetGenerateTexCoords(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetGenerateTexCoords(self, value)


    def GetGenerateTexCoords(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_GetGenerateTexCoords(self)


    def SetGenerateTangents(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetGenerateTangents(self, value)


    def GetGenerateTangents(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_GetGenerateTangents(self)


    def SetTexCoordLevel(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetTexCoordLevel(self, value)


    def GetTexCoordLevel(self) -> int:
        """! * The texture coordinate level used for mapping image and texture generation. If 
         * the TexCoordName has been set, the TexCoordLevel is not used. 
        """

        return _Simplygon.spMappingImageSettings_GetTexCoordLevel(self)


    def SetTexCoordName(self, value: str) -> None:
        """! * 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 
        """

        return _Simplygon.spMappingImageSettings_SetTexCoordName(self, value)


    def GetTexCoordName(self) -> str:
        """! * 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 
        """

        return _Simplygon.spMappingImageSettings_GetTexCoordName(self)


    def SetUseFullRetexturing(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetUseFullRetexturing(self, value)


    def GetUseFullRetexturing(self) -> bool:
        """! * 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. 
         *  
        """

        return _Simplygon.spMappingImageSettings_GetUseFullRetexturing(self)


    def SetApplyNewMaterialIds(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetApplyNewMaterialIds(self, value)


    def GetApplyNewMaterialIds(self) -> bool:
        """! * 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. 
         *  
        """

        return _Simplygon.spMappingImageSettings_GetApplyNewMaterialIds(self)


    def SetUseAutomaticTextureSize(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetUseAutomaticTextureSize(self, value)


    def GetUseAutomaticTextureSize(self) -> bool:
        """! * The UseAutomaticTextureSize flag. If true, then texture sizes will be computed 
         * for the reduced mesh depending on its pixel size on screen. 
        """

        return _Simplygon.spMappingImageSettings_GetUseAutomaticTextureSize(self)


    def SetAutomaticTextureSizeMultiplier(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetAutomaticTextureSizeMultiplier(self, value)


    def GetAutomaticTextureSizeMultiplier(self) -> float:
        """! * Texture dimension length multiplier for the automatic texture size. 
        """

        return _Simplygon.spMappingImageSettings_GetAutomaticTextureSizeMultiplier(self)


    def SetForcePower2Texture(self, value: bool) -> None:
        """! * If automatic_texture_size is enabled, then force the texture sizes to be a power 
         * of 2. 
         * @param value The desired flag. 
        """

        return _Simplygon.spMappingImageSettings_SetForcePower2Texture(self, value)


    def GetForcePower2Texture(self) -> bool:
        """! * If automatic_texture_size is enabled, then force the texture sizes to be a power 
         * of 2. 
        """

        return _Simplygon.spMappingImageSettings_GetForcePower2Texture(self)


    def SetTexCoordGeneratorType(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetTexCoordGeneratorType(self, value)


    def GetTexCoordGeneratorType(self):
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_GetTexCoordGeneratorType(self)


    def SetOnlyParameterizeInvalidUVs(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageSettings_SetOnlyParameterizeInvalidUVs(self, value)


    def GetOnlyParameterizeInvalidUVs(self) -> bool:
        """! * If enabled, will aggregate all the valid original UVs. If there are invalid original 
         * UVs, those parts will receive new parameterized UVs. 
        """

        return _Simplygon.spMappingImageSettings_GetOnlyParameterizeInvalidUVs(self)


    def GetChartAggregatorSettings(self) -> spChartAggregatorSettings:
        """! * The settings for the chart aggregator. 
         * @return The chart aggregator settings object associated with the mapping image 
         *  
        """

        return _Simplygon.spMappingImageSettings_GetChartAggregatorSettings(self)


    def GetParameterizerSettings(self) -> spParameterizerSettings:
        """! * The settings for the parameterizer. 
         * @return The parameterizer settings object associated with the mapping image 
        """

        return _Simplygon.spMappingImageSettings_GetParameterizerSettings(self)

    __swig_destroy__ = _Simplygon.delete_spMappingImageSettings

_Simplygon.spMappingImageSettings_swigregister(spMappingImageSettings)

def spMappingImageSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spMappingImageSettings_IsClassA(type)

def spMappingImageSettings_SafeCast(other: spObject) -> spMappingImageSettings:
    """! * 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 
    """

    return _Simplygon.spMappingImageSettings_SafeCast(other)

class spMappingImageInputMaterialSettings(spSettingsObject):
    """!Settings for the Simplygon mapping input."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spMappingImageInputMaterialSettings:
        """! * 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 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_SetValidateParameterNames(self, validate)


    def SetMaterialMapping(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_SetMaterialMapping(self, value)


    def GetMaterialMapping(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spMappingImageInputMaterialSettings_GetMaterialMapping(self)

    __swig_destroy__ = _Simplygon.delete_spMappingImageInputMaterialSettings

_Simplygon.spMappingImageInputMaterialSettings_swigregister(spMappingImageInputMaterialSettings)

def spMappingImageInputMaterialSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spMappingImageInputMaterialSettings_IsClassA(type)

def spMappingImageInputMaterialSettings_SafeCast(other: spObject) -> spMappingImageInputMaterialSettings:
    """! * 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 
    """

    return _Simplygon.spMappingImageInputMaterialSettings_SafeCast(other)

class spMappingImageOutputMaterialSettings(spSettingsObject):
    """!Settings for the Simplygon mapping output."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spMappingImageOutputMaterialSettings:
        """! * 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 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SetValidateParameterNames(self, validate)


    def SetTextureWidth(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SetTextureWidth(self, value)


    def GetTextureWidth(self) -> int:
        """! * The width of the texture of the output mapping image. 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_GetTextureWidth(self)


    def SetTextureHeight(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SetTextureHeight(self, value)


    def GetTextureHeight(self) -> int:
        """! * The height of the texture of the output mapping image. 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_GetTextureHeight(self)


    def SetMultisamplingLevel(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SetMultisamplingLevel(self, value)


    def GetMultisamplingLevel(self) -> int:
        """! * The multi-sampling level of the output mapping image. Values 1-8 are accepted. 
         *  
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_GetMultisamplingLevel(self)


    def SetGutterSpace(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_SetGutterSpace(self, value)


    def GetGutterSpace(self) -> int:
        """! * The minimum number of pixels between charts of the output mapping image. 
        """

        return _Simplygon.spMappingImageOutputMaterialSettings_GetGutterSpace(self)

    __swig_destroy__ = _Simplygon.delete_spMappingImageOutputMaterialSettings

_Simplygon.spMappingImageOutputMaterialSettings_swigregister(spMappingImageOutputMaterialSettings)

def spMappingImageOutputMaterialSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spMappingImageOutputMaterialSettings_IsClassA(type)

def spMappingImageOutputMaterialSettings_SafeCast(other: spObject) -> spMappingImageOutputMaterialSettings:
    """! * 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 
    """

    return _Simplygon.spMappingImageOutputMaterialSettings_SafeCast(other)

class spVisibilitySettings(spSettingsObject):
    """!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. """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spVisibilitySettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spVisibilitySettings:
        """! * 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 
        """

        return _Simplygon.spVisibilitySettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spVisibilitySettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spVisibilitySettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVisibilitySettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVisibilitySettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVisibilitySettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVisibilitySettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVisibilitySettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spVisibilitySettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spVisibilitySettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spVisibilitySettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spVisibilitySettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spVisibilitySettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spVisibilitySettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_SetValidateParameterNames(self, validate)


    def SetUseVisibilityWeightsInReducer(self, value: bool) -> None:
        """! * If set to true, visibility weights will be used in the reducer. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spVisibilitySettings_SetUseVisibilityWeightsInReducer(self, value)


    def GetUseVisibilityWeightsInReducer(self) -> bool:
        """! * If set to true, visibility weights will be used in the reducer. 
        """

        return _Simplygon.spVisibilitySettings_GetUseVisibilityWeightsInReducer(self)


    def SetUseVisibilityWeightsInTexcoordGenerator(self, value: bool) -> None:
        """! * If set to true, visibility weights will be used when generating new texture coordinates. 
         * @param value The new UseVisibilityWeightsInTexcoordGenerator value. 
        """

        return _Simplygon.spVisibilitySettings_SetUseVisibilityWeightsInTexcoordGenerator(self, value)


    def GetUseVisibilityWeightsInTexcoordGenerator(self) -> bool:
        """! * If set to true, visibility weights will be used when generating new texture coordinates. 
         *  
        """

        return _Simplygon.spVisibilitySettings_GetUseVisibilityWeightsInTexcoordGenerator(self)


    def SetVisibilityWeightsPower(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_SetVisibilityWeightsPower(self, value)


    def GetVisibilityWeightsPower(self) -> float:
        """! * Set how aggressively reducer should handle low visibility weights. 
        """

        return _Simplygon.spVisibilitySettings_GetVisibilityWeightsPower(self)


    def SetCullOccludedGeometry(self, value: bool) -> None:
        """! * If set to true, geometry that is not visible will be removed. 
         * @param value The new CullOccludedGeometry value. 
        """

        return _Simplygon.spVisibilitySettings_SetCullOccludedGeometry(self, value)


    def GetCullOccludedGeometry(self) -> bool:
        """! * If set to true, geometry that is not visible will be removed. 
        """

        return _Simplygon.spVisibilitySettings_GetCullOccludedGeometry(self)


    def SetForceVisibilityCalculation(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_SetForceVisibilityCalculation(self, value)


    def GetForceVisibilityCalculation(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_GetForceVisibilityCalculation(self)


    def SetUseBackfaceCulling(self, value: bool) -> None:
        """! * Set whether triangles should be regarded visible when viewed from the back. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spVisibilitySettings_SetUseBackfaceCulling(self, value)


    def GetUseBackfaceCulling(self) -> bool:
        """! * Set whether triangles should be regarded visible when viewed from the back. 
        """

        return _Simplygon.spVisibilitySettings_GetUseBackfaceCulling(self)


    def SetCameraSelectionSetID(self, value: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spVisibilitySettings_SetCameraSelectionSetID(self, value)


    def GetCameraSelectionSetID(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spVisibilitySettings_GetCameraSelectionSetID(self)


    def SetCameraSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_SetCameraSelectionSetName(self, value)


    def GetCameraSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_GetCameraSelectionSetName(self)


    def SetOccluderSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_SetOccluderSelectionSetID(self, value)


    def GetOccluderSelectionSetID(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_GetOccluderSelectionSetID(self)


    def SetOccluderSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_SetOccluderSelectionSetName(self, value)


    def GetOccluderSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_GetOccluderSelectionSetName(self)


    def SetFillNonVisibleAreaThreshold(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_SetFillNonVisibleAreaThreshold(self, value)


    def GetFillNonVisibleAreaThreshold(self) -> float:
        """! * 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. 
         *  
        """

        return _Simplygon.spVisibilitySettings_GetFillNonVisibleAreaThreshold(self)


    def SetRemoveTrianglesNotOccludingOtherTriangles(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_SetRemoveTrianglesNotOccludingOtherTriangles(self, value)


    def GetRemoveTrianglesNotOccludingOtherTriangles(self) -> bool:
        """! * If enabled, will remove all the visible triangles that are not occluding any 
         * other triangle. It will also remove all non-visible triangles. 
        """

        return _Simplygon.spVisibilitySettings_GetRemoveTrianglesNotOccludingOtherTriangles(self)


    def SetConservativeMode(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_SetConservativeMode(self, value)


    def GetConservativeMode(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spVisibilitySettings_GetConservativeMode(self)


    def SetComputeVisibilityMode(self, value) -> None:
        """! * Specifies the renderer type when computing visibility. 
         * @param value The new ComputeVisibilityMode value. 
        """

        return _Simplygon.spVisibilitySettings_SetComputeVisibilityMode(self, value)


    def GetComputeVisibilityMode(self):
        """! * Specifies the renderer type when computing visibility. 
        """

        return _Simplygon.spVisibilitySettings_GetComputeVisibilityMode(self)

    __swig_destroy__ = _Simplygon.delete_spVisibilitySettings

_Simplygon.spVisibilitySettings_swigregister(spVisibilitySettings)

def spVisibilitySettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spVisibilitySettings_IsClassA(type)

def spVisibilitySettings_SafeCast(other: spObject) -> spVisibilitySettings:
    """! * 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 
    """

    return _Simplygon.spVisibilitySettings_SafeCast(other)

class spReductionProcessor(spProcessingObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spReductionProcessor_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spReductionProcessor:
        """! * 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 
        """

        return _Simplygon.spReductionProcessor_SafeCast(other)

    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spReductionProcessor_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spReductionProcessor_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spReductionProcessor_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spReductionProcessor_ToJSON(self)


    def SetScene(self, value: spScene) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionProcessor_SetScene(self, value)


    def GetScene(self) -> spScene:
        """! * 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. 
        """

        return _Simplygon.spReductionProcessor_GetScene(self)


    def GetMappingImage(self) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spReductionProcessor_GetMappingImage(self)


    def GetMappingImageForImageIndex(self, OutputMaterialId: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spReductionProcessor_GetMappingImageForImageIndex(self, OutputMaterialId)


    def GetRepairSettings(self) -> spRepairSettings:
        """! * The settings for the repair process. 
         * @return The repair settings object associated with the processor 
        """

        return _Simplygon.spReductionProcessor_GetRepairSettings(self)


    def GetReductionSettings(self) -> spReductionSettings:
        """! * The settings for the reduction process. 
         * @return The reduction settings object associated with the processor 
        """

        return _Simplygon.spReductionProcessor_GetReductionSettings(self)


    def GetBoneSettings(self) -> spBoneSettings:
        """! * The settings for the bone removal process. 
         * @return The bone settings object associated with the processor 
        """

        return _Simplygon.spReductionProcessor_GetBoneSettings(self)


    def GetNormalCalculationSettings(self) -> spNormalCalculationSettings:
        """! * The settings for the normal repair process. 
         * @return The normal repair settings object associated with the processor 
        """

        return _Simplygon.spReductionProcessor_GetNormalCalculationSettings(self)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * The settings for the image mapping process. 
         * @return The mappingimage settings object associated with the processor 
        """

        return _Simplygon.spReductionProcessor_GetMappingImageSettings(self)


    def GetVisibilitySettings(self) -> spVisibilitySettings:
        """! * 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 
        """

        return _Simplygon.spReductionProcessor_GetVisibilitySettings(self)


    def GetVertexWeightSettings(self) -> spVertexWeightSettings:
        """! * The settings for handling visibility weights. 
         * @return The vertex weight settings object associated with the processor 
        """

        return _Simplygon.spReductionProcessor_GetVertexWeightSettings(self)


    def GetResultDeviation(self) -> float:
        """! * Returns the max deviation reached for the last processing. 
         * @return The max deviation of the last processing 
        """

        return _Simplygon.spReductionProcessor_GetResultDeviation(self)

    __swig_destroy__ = _Simplygon.delete_spReductionProcessor

_Simplygon.spReductionProcessor_swigregister(spReductionProcessor)

def spReductionProcessor_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spReductionProcessor_IsClassA(type)

def spReductionProcessor_SafeCast(other: spObject) -> spReductionProcessor:
    """! * 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 
    """

    return _Simplygon.spReductionProcessor_SafeCast(other)

class spRemeshingLegacySettings(spSettingsObject):
    """!@deprecated Interface is marked as deprecated and will be removed in future version. 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)."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacySettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spRemeshingLegacySettings:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacySettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spRemeshingLegacySettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spRemeshingLegacySettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacySettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacySettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacySettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacySettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacySettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spRemeshingLegacySettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spRemeshingLegacySettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spRemeshingLegacySettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spRemeshingLegacySettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spRemeshingLegacySettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spRemeshingLegacySettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetValidateParameterNames(self, validate)


    def SetOnScreenSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetOnScreenSize(self, value)


    def GetOnScreenSize(self) -> int:
        """! * The on-screen rendering size of the geometry. Allowed values are in the range 
         * 20 to 4000 pixels. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetOnScreenSize(self)


    def SetMergeDistance(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetMergeDistance(self, value)


    def GetMergeDistance(self) -> int:
        """! * The on-screen merge distance in pixels. Smaller cavities will be removed. This 
         * will be capped to the on-screen size of the remeshing. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetMergeDistance(self)


    def SetMergeBoldness(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetMergeBoldness(self, value)


    def GetMergeBoldness(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetMergeBoldness(self)


    def SetMaxTriangleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetMaxTriangleSize(self, value)


    def GetMaxTriangleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetMaxTriangleSize(self)


    def SetSurfaceTransferMode(self, value) -> None:
        """! * The surface transfer mode. 
         * @param value The new surface transfer mode. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetSurfaceTransferMode(self, value)


    def GetSurfaceTransferMode(self):
        """! * The surface transfer mode. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetSurfaceTransferMode(self)


    def SetUseCuttingPlanes(self, value: bool) -> None:
        """! * Set to true to cap the mesh with user defined cutting planes. 
         * @param value The bool UseCuttingPlanes will be set to. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetUseCuttingPlanes(self, value)


    def GetUseCuttingPlanes(self) -> bool:
        """! * Set to true to cap the mesh with user defined cutting planes. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetUseCuttingPlanes(self)


    def SetHardEdgeAngle(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetHardEdgeAngle(self, value)


    def GetHardEdgeAngle(self) -> float:
        """! * The normal hard angle cutoff in degrees. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetHardEdgeAngle(self)


    def SetTransferNormals(self, value: bool) -> None:
        """! * If true, the vertex normals channel will be sampled from the original mesh. 
         * @param value The value to which TransferNormals will be set. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetTransferNormals(self, value)


    def GetTransferNormals(self) -> bool:
        """! * If true, the vertex normals channel will be sampled from the original mesh. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetTransferNormals(self)


    def SetTransferColors(self, value: bool) -> None:
        """! * If true, vertex color channels will be sampled from the original mesh. 
         * @param value The bool to which TransferColors will be set. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetTransferColors(self, value)


    def GetTransferColors(self) -> bool:
        """! * If true, vertex color channels will be sampled from the original mesh. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetTransferColors(self)


    def SetUseClippingGeometry(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetUseClippingGeometry(self, value)


    def GetUseClippingGeometry(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetUseClippingGeometry(self)


    def SetUseEmptySpaceOverride(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetUseEmptySpaceOverride(self, value)


    def GetUseEmptySpaceOverride(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetUseEmptySpaceOverride(self)


    def SetEmptySpaceOverride(self, value_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetEmptySpaceOverride(self, value_realInputDataPtr)


    def GetEmptySpaceOverride(self) -> spRealData:
        """! * The empty space override coordinate. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetEmptySpaceOverride(self)


    def SetProcessSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetProcessSelectionSetID(self, value)


    def GetProcessSelectionSetID(self) -> int:
        """! * Selects which SelectionSet should be processed. If set to -1, all geometries 
         * in the scene will be processed. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetProcessSelectionSetID(self)


    def SetProcessSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetProcessSelectionSetName(self, value)


    def GetProcessSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetProcessSelectionSetName(self)


    def SetCuttingPlaneSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetCuttingPlaneSelectionSetID(self, value)


    def GetCuttingPlaneSelectionSetID(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetCuttingPlaneSelectionSetID(self)


    def SetCuttingPlaneSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetCuttingPlaneSelectionSetName(self, value)


    def GetCuttingPlaneSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetCuttingPlaneSelectionSetName(self)


    def SetClippingGeometrySelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetClippingGeometrySelectionSetID(self, value)


    def GetClippingGeometrySelectionSetID(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetClippingGeometrySelectionSetID(self)


    def SetClippingGeometrySelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetClippingGeometrySelectionSetName(self, value)


    def GetClippingGeometrySelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetClippingGeometrySelectionSetName(self)


    def SetUseClippingGeometryEmptySpaceOverride(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetUseClippingGeometryEmptySpaceOverride(self, value)


    def GetUseClippingGeometryEmptySpaceOverride(self) -> bool:
        """! * If true, a coordinate in the area that will be considered "outside" for the clipping 
         * geometry can be overridden by the user. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetUseClippingGeometryEmptySpaceOverride(self)


    def SetUsePreviewMode(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetUsePreviewMode(self, value)


    def GetUsePreviewMode(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetUsePreviewMode(self)


    def SetRespectWindingDirection(self, value: bool) -> None:
        """! * If true, the remeshing processor will not map backfacing triangles. 
         * @param value The desired value of RespectWindingDirection. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetRespectWindingDirection(self, value)


    def GetRespectWindingDirection(self) -> bool:
        """! * If true, the remeshing processor will not map backfacing triangles. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetRespectWindingDirection(self)


    def SetClippingGeometryEmptySpaceOverride(self, value_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetClippingGeometryEmptySpaceOverride(self, value_realInputDataPtr)


    def GetClippingGeometryEmptySpaceOverride(self) -> spRealData:
        """! * The clipping geometry empty space override coordinate. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spRemeshingLegacySettings_GetClippingGeometryEmptySpaceOverride(self)


    def SetOutputSceneNodeName(self, value: str) -> None:
        """! * The name of the scene node in the output Scene containing the remeshed geometry. 
         * @param value The desired OutputSceneNodeName. 
        """

        return _Simplygon.spRemeshingLegacySettings_SetOutputSceneNodeName(self, value)


    def GetOutputSceneNodeName(self) -> str:
        """! * The name of the scene node in the output Scene containing the remeshed geometry. 
         *  
        """

        return _Simplygon.spRemeshingLegacySettings_GetOutputSceneNodeName(self)

    __swig_destroy__ = _Simplygon.delete_spRemeshingLegacySettings

_Simplygon.spRemeshingLegacySettings_swigregister(spRemeshingLegacySettings)

def spRemeshingLegacySettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spRemeshingLegacySettings_IsClassA(type)

def spRemeshingLegacySettings_SafeCast(other: spObject) -> spRemeshingLegacySettings:
    """! * 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 
    """

    return _Simplygon.spRemeshingLegacySettings_SafeCast(other)

class spRemeshingSettings(spSettingsObject):
    """!Remeshing settings for the RemeshingProcessor class."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spRemeshingSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spRemeshingSettings:
        """! * 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 
        """

        return _Simplygon.spRemeshingSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spRemeshingSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spRemeshingSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spRemeshingSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spRemeshingSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spRemeshingSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spRemeshingSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spRemeshingSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spRemeshingSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetValidateParameterNames(self, validate)


    def SetOnScreenSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetOnScreenSize(self, value)


    def GetOnScreenSize(self) -> int:
        """! * The on-screen rendering size of the geometry. Allowed values are in the range 
         * 20 to 10000 pixels. 
        """

        return _Simplygon.spRemeshingSettings_GetOnScreenSize(self)


    def SetRemeshingMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetRemeshingMode(self, value)


    def GetRemeshingMode(self):
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_GetRemeshingMode(self)


    def SetHoleFilling(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetHoleFilling(self, value)


    def GetHoleFilling(self):
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_GetHoleFilling(self)


    def SetSurfaceTransferMode(self, value) -> None:
        """! * The surface transfer mode. 
         * @param value The new surface transfer mode. 
        """

        return _Simplygon.spRemeshingSettings_SetSurfaceTransferMode(self, value)


    def GetSurfaceTransferMode(self):
        """! * The surface transfer mode. 
        """

        return _Simplygon.spRemeshingSettings_GetSurfaceTransferMode(self)


    def SetHardEdgeAngle(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetHardEdgeAngle(self, value)


    def GetHardEdgeAngle(self) -> float:
        """! * The normal hard angle cutoff in degrees. 
        """

        return _Simplygon.spRemeshingSettings_GetHardEdgeAngle(self)


    def SetForceSoftEdgesWithinTextureCharts(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetForceSoftEdgesWithinTextureCharts(self, value)


    def GetForceSoftEdgesWithinTextureCharts(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_GetForceSoftEdgesWithinTextureCharts(self)


    def SetTransferNormals(self, value: bool) -> None:
        """! * If set, the vertex normals channel will be sampled from the original mesh. 
         * @param value The value to which TransferNormals will be set. 
        """

        return _Simplygon.spRemeshingSettings_SetTransferNormals(self, value)


    def GetTransferNormals(self) -> bool:
        """! * If set, the vertex normals channel will be sampled from the original mesh. 
        """

        return _Simplygon.spRemeshingSettings_GetTransferNormals(self)


    def SetTransferColors(self, value: bool) -> None:
        """! * If set, vertex color channels will be sampled from the original mesh. 
         * @param value The bool to which TransferColors will be set. 
        """

        return _Simplygon.spRemeshingSettings_SetTransferColors(self, value)


    def GetTransferColors(self) -> bool:
        """! * If set, vertex color channels will be sampled from the original mesh. 
        """

        return _Simplygon.spRemeshingSettings_GetTransferColors(self)


    def SetProcessSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetProcessSelectionSetID(self, value)


    def GetProcessSelectionSetID(self) -> int:
        """! * Selects which SelectionSet should be processed. If set to -1, all geometries 
         * in the scene will be processed. 
        """

        return _Simplygon.spRemeshingSettings_GetProcessSelectionSetID(self)


    def SetProcessSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetProcessSelectionSetName(self, value)


    def GetProcessSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_GetProcessSelectionSetName(self)


    def SetKeepUnprocessedSceneMeshes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetKeepUnprocessedSceneMeshes(self, value)


    def GetKeepUnprocessedSceneMeshes(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_GetKeepUnprocessedSceneMeshes(self)


    def SetRemeshingModeManualPositionX(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetRemeshingModeManualPositionX(self, value)


    def GetRemeshingModeManualPositionX(self) -> float:
        """! * X component was a 3-tuple real that acts as the marker designating remeshing 
         * processors starting position 
        """

        return _Simplygon.spRemeshingSettings_GetRemeshingModeManualPositionX(self)


    def SetRemeshingModeManualPositionY(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetRemeshingModeManualPositionY(self, value)


    def GetRemeshingModeManualPositionY(self) -> float:
        """! * Y component was a 3-tuple real that acts as the marker designating remeshing 
         * processors starting position 
        """

        return _Simplygon.spRemeshingSettings_GetRemeshingModeManualPositionY(self)


    def SetRemeshingModeManualPositionZ(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingSettings_SetRemeshingModeManualPositionZ(self, value)


    def GetRemeshingModeManualPositionZ(self) -> float:
        """! * Z component was a 3-tuple real that acts as the marker designating remeshing 
         * processors starting position 
        """

        return _Simplygon.spRemeshingSettings_GetRemeshingModeManualPositionZ(self)

    __swig_destroy__ = _Simplygon.delete_spRemeshingSettings

_Simplygon.spRemeshingSettings_swigregister(spRemeshingSettings)

def spRemeshingSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spRemeshingSettings_IsClassA(type)

def spRemeshingSettings_SafeCast(other: spObject) -> spRemeshingSettings:
    """! * 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 
    """

    return _Simplygon.spRemeshingSettings_SafeCast(other)

class spRemeshingLegacyProcessor(spProcessingObject):
    """!@deprecated Interface is marked as deprecated and will be removed in future version. 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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyProcessor_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spRemeshingLegacyProcessor:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyProcessor_SafeCast(other)

    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacyProcessor_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spRemeshingLegacyProcessor_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacyProcessor_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spRemeshingLegacyProcessor_ToJSON(self)


    def SetScene(self, value: spScene) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacyProcessor_SetScene(self, value)


    def GetScene(self) -> spScene:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacyProcessor_GetScene(self)


    def GetMappingImage(self) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyProcessor_GetMappingImage(self)


    def GetMappingImageForImageIndex(self, value: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyProcessor_GetMappingImageForImageIndex(self, value)


    def GetRemeshingLegacySettings(self) -> spRemeshingLegacySettings:
        """! * The settings for the remeshing process. 
         * @return The remeshing settings object. 
        """

        return _Simplygon.spRemeshingLegacyProcessor_GetRemeshingLegacySettings(self)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * The settings for the image mapping process. 
         * @return The mapping image settings object. 
        """

        return _Simplygon.spRemeshingLegacyProcessor_GetMappingImageSettings(self)


    def GetBoneSettings(self) -> spBoneSettings:
        """! * The settings for the bone removal process. 
         * @return The bone settings object. 
        """

        return _Simplygon.spRemeshingLegacyProcessor_GetBoneSettings(self)


    def GetVisibilitySettings(self) -> spVisibilitySettings:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyProcessor_GetVisibilitySettings(self)


    def GetResultSelectionSetId(self) -> int:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyProcessor_GetResultSelectionSetId(self)

    __swig_destroy__ = _Simplygon.delete_spRemeshingLegacyProcessor

_Simplygon.spRemeshingLegacyProcessor_swigregister(spRemeshingLegacyProcessor)

def spRemeshingLegacyProcessor_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spRemeshingLegacyProcessor_IsClassA(type)

def spRemeshingLegacyProcessor_SafeCast(other: spObject) -> spRemeshingLegacyProcessor:
    """! * 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 
    """

    return _Simplygon.spRemeshingLegacyProcessor_SafeCast(other)

class spRemeshingProcessor(spProcessingObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spRemeshingProcessor_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spRemeshingProcessor:
        """! * 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 
        """

        return _Simplygon.spRemeshingProcessor_SafeCast(other)

    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spRemeshingProcessor_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spRemeshingProcessor_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spRemeshingProcessor_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spRemeshingProcessor_ToJSON(self)


    def SetScene(self, value: spScene) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingProcessor_SetScene(self, value)


    def GetScene(self) -> spScene:
        """! * 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. 
        """

        return _Simplygon.spRemeshingProcessor_GetScene(self)


    def GetMappingImage(self) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spRemeshingProcessor_GetMappingImage(self)


    def GetMappingImageForImageIndex(self, OutputMaterialId: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spRemeshingProcessor_GetMappingImageForImageIndex(self, OutputMaterialId)


    def GetRemeshingSettings(self) -> spRemeshingSettings:
        """! * The settings for the remeshing process. 
         * @return The remeshing settings object. 
        """

        return _Simplygon.spRemeshingProcessor_GetRemeshingSettings(self)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * The settings for the image mapping process. 
         * @return The mapping image settings object. 
        """

        return _Simplygon.spRemeshingProcessor_GetMappingImageSettings(self)


    def GetBoneSettings(self) -> spBoneSettings:
        """! * The settings for the bone removal process. 
         * @return The bone settings object. 
        """

        return _Simplygon.spRemeshingProcessor_GetBoneSettings(self)


    def GetGeometryCullingSettings(self) -> spGeometryCullingSettings:
        """! * Get settings for volumetric triangle culling functionality. 
         * @return The geometry culling settings object associated with the processor 
        """

        return _Simplygon.spRemeshingProcessor_GetGeometryCullingSettings(self)


    def GetVisibilitySettings(self) -> spVisibilitySettings:
        """! * 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 
        """

        return _Simplygon.spRemeshingProcessor_GetVisibilitySettings(self)

    __swig_destroy__ = _Simplygon.delete_spRemeshingProcessor

_Simplygon.spRemeshingProcessor_swigregister(spRemeshingProcessor)

def spRemeshingProcessor_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spRemeshingProcessor_IsClassA(type)

def spRemeshingProcessor_SafeCast(other: spObject) -> spRemeshingProcessor:
    """! * 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 
    """

    return _Simplygon.spRemeshingProcessor_SafeCast(other)

class spScene(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spScene_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spScene:
        """! * 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 
        """

        return _Simplygon.spScene_SafeCast(other)

    def GetRootNode(self) -> spSceneNode:
        """! * The root node of the scene. 
         * @return The root node 
        """

        return _Simplygon.spScene_GetRootNode(self)


    def GetMaterialTable(self) -> spMaterialTable:
        """! * The material table of the scene. 
         * @return The material table 
        """

        return _Simplygon.spScene_GetMaterialTable(self)


    def GetBoneTable(self) -> spSceneBoneTable:
        """! * The bone table of the scene. 
         * @return The bone table 
        """

        return _Simplygon.spScene_GetBoneTable(self)


    def GetSelectionSetTable(self) -> spSelectionSetTable:
        """! * The selection set table of the scene. 
         * @return The selection set table 
        """

        return _Simplygon.spScene_GetSelectionSetTable(self)


    def GetTextureTable(self) -> spTextureTable:
        """! * The texture table of the scene. 
         * @return The texture table 
        """

        return _Simplygon.spScene_GetTextureTable(self)


    def GetMappingImage(self) -> spMappingImage:
        """! * The MappingImage object for the scene. 
        """

        return _Simplygon.spScene_GetMappingImage(self)


    def RemoveSceneNodesInSelectionSet(self, selectionSetID: int) -> None:
        """! * Removes all scene nodes listed in a selection set. 
         * @param selectionSetID The ID of the selection set containing the nodes to remove. 
         *  
        """

        return _Simplygon.spScene_RemoveSceneNodesInSelectionSet(self, selectionSetID)


    def RemoveSceneNodes(self) -> None:
        """! * Removes all scene nodes. 
        """

        return _Simplygon.spScene_RemoveSceneNodes(self)


    def RemoveSceneNodesOfType(self, nodeType: str) -> None:
        """! * Removes all scene nodes of a specific type. 
         * @param nodeType The type of object to remove from the scene (i.e. ISceneMesh) 
         *  
        """

        return _Simplygon.spScene_RemoveSceneNodesOfType(self, nodeType)


    def CreateAABB(self, perMesh: bool) -> spScene:
        """! * 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. 
        """

        return _Simplygon.spScene_CreateAABB(self, perMesh)


    def Clear(self) -> None:
        """! * Clears the whole scene and releases all items in the graph. 
        """

        return _Simplygon.spScene_Clear(self)


    def LoadFromFile(self, path: str) -> bool:
        """! * Loads a scene from file. 
         * @param path The path of the scene file. 
         * @return True on success, false if file was not found 
        """

        return _Simplygon.spScene_LoadFromFile(self, path)


    def SaveToFile(self, path: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spScene_SaveToFile(self, path)


    def EvaluateDefaultGlobalTransformation(self, node: spSceneNode, global_transform: spMatrix4x4) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spScene_EvaluateDefaultGlobalTransformation(self, node, global_transform)


    def GetInf(self) -> spRealData:
        """! * The inferior (minimum) extent of the scene. 
         * @return The returned data array. The array contains 3 items. 
         * @return The minimum extent of the scene 
        """

        return _Simplygon.spScene_GetInf(self)


    def GetSup(self) -> spRealData:
        """! * The superior (maximum) extent of the scene. 
         * @return The returned data array. The array contains 3 items. 
         * @return The maximum extent of the scene 
        """

        return _Simplygon.spScene_GetSup(self)


    def GetRadius(self) -> float:
        """! * The scene radius. 
         * @return The radius of the scene 
        """

        return _Simplygon.spScene_GetRadius(self)


    def CalculateExtents(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spScene_CalculateExtents(self)


    def GetNodeFromPath(self, path: str) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spScene_GetNodeFromPath(self, path)


    def GetNodeByGUID(self, node_id: str) -> spSceneNode:
        """! * Gets a node defined by an id. 
         * @param node_id The id of the node to get. 
         * @return The node associated with the id 
        """

        return _Simplygon.spScene_GetNodeByGUID(self, node_id)


    def GetSubNodeByGUID(self, node_id: str, node: spSceneNode) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spScene_GetSubNodeByGUID(self, node_id, node)


    def AddCustomField(self, base_type, name: str, tuple_size: int) -> spValueArray:
        """! * 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. 
        """

        return _Simplygon.spScene_AddCustomField(self, base_type, name, tuple_size)


    def RemoveCustomField(self, name: str) -> None:
        """! * Removes a custom data field. 
         * @param name The name of the field to be removed. 
        """

        return _Simplygon.spScene_RemoveCustomField(self, name)


    def GetCustomField(self, name: str) -> spValueArray:
        """! * Adds/Removes/Gets a custom data field. 
         * @param name The name of the field to be fetched. 
         * @return an array containing the field data 
        """

        return _Simplygon.spScene_GetCustomField(self, name)


    def HasCustomField(self, name: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spScene_HasCustomField(self, name)


    def RemoveUnlinkedBones(self) -> None:
        """! * 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. 
        """

        return _Simplygon.spScene_RemoveUnlinkedBones(self)


    def Compact(self) -> None:
        """! * 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. 
        """

        return _Simplygon.spScene_Compact(self)


    def Append(self, otherScene: spScene) -> None:
        """! * Appends another scene to this scene. All materials, textures etc. 
         * @param otherScene The scene object to merge into current scene. 
        """

        return _Simplygon.spScene_Append(self, otherScene)


    def NewCombinedGeometryFromSelectionSet(self, selectionSetID: int) -> spGeometryData:
        """! * 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 
        """

        return _Simplygon.spScene_NewCombinedGeometryFromSelectionSet(self, selectionSetID)


    def NewCombinedGeometry(self) -> spGeometryData:
        """! * Combines all the geometries from the scene and returns a copy. 
         * @return a copy of all geometries combined 
        """

        return _Simplygon.spScene_NewCombinedGeometry(self)


    def SelectNodes(self, nodeTypeName: str) -> int:
        """! * 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 
        """

        return _Simplygon.spScene_SelectNodes(self, nodeTypeName)


    def DeepCopy(self, src: spScene) -> None:
        """! * 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. 
        """

        return _Simplygon.spScene_DeepCopy(self, src)


    def NewCopy(self) -> spScene:
        """! * 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. 
        """

        return _Simplygon.spScene_NewCopy(self)


    def GetTriangleCount(self) -> int:
        """! * Traverses the scene meshes in the scene and returns the total triangle count. 
         *  
        """

        return _Simplygon.spScene_GetTriangleCount(self)


    def StandardizeMaterials(self) -> None:
        """! * 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. 
        """

        return _Simplygon.spScene_StandardizeMaterials(self)


    def GetCascadedSceneCount(self) -> int:
        """! * Get the number of cascaded child scenes. 
        """

        return _Simplygon.spScene_GetCascadedSceneCount(self)


    def GetCascadedSceneForIndex(self, index: int) -> spScene:
        """! * 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. 
        """

        return _Simplygon.spScene_GetCascadedSceneForIndex(self, index)


    def GetMaterialChannels(self, channels: spStringArray) -> None:
        """! * Get all unique material channel names for all materials used in scene. 
         * @param channels The array receiving unique channel names. 
        """

        return _Simplygon.spScene_GetMaterialChannels(self, channels)


    def GetMaterialChannelsWithTextureInputs(self, channels: spStringArray) -> None:
        """! * Get all unique material channel names having texture inputs for all materials 
         * used in scene. 
         * @param channels The array receiving unique channel names. 
        """

        return _Simplygon.spScene_GetMaterialChannelsWithTextureInputs(self, channels)

    __swig_destroy__ = _Simplygon.delete_spScene

_Simplygon.spScene_swigregister(spScene)

def spScene_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spScene_IsClassA(type)

def spScene_SafeCast(other: spObject) -> spScene:
    """! * 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 
    """

    return _Simplygon.spScene_SafeCast(other)

class spSceneNode(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spSceneNode_SafeCast(other)

    def GetScene(self) -> spScene:
        """! * The scene object of the node. 
         * @return The scene object. 
        """

        return _Simplygon.spSceneNode_GetScene(self)


    def GetParent(self) -> spSceneNode:
        """! * The parent node of this node. 
         * @return The parent node 
        """

        return _Simplygon.spSceneNode_GetParent(self)


    def GetRelativeTransform(self) -> spMatrix4x4:
        """! * The relative transformation of this node. 
         * @return The relative transformation as a 4x4 matrix 
        """

        return _Simplygon.spSceneNode_GetRelativeTransform(self)


    def SetOriginalName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneNode_SetOriginalName(self, value)


    def GetOriginalName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spSceneNode_GetOriginalName(self)


    def SetIsVisible(self, value: bool) -> None:
        """! * The IsVisible flag. If set, the node is visible. 
         * @param value The bool that isVisible is to be set to. 
        """

        return _Simplygon.spSceneNode_SetIsVisible(self, value)


    def GetIsVisible(self) -> bool:
        """! * The IsVisible flag. If set, the node is visible. 
        """

        return _Simplygon.spSceneNode_GetIsVisible(self)


    def SetIsFrozen(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneNode_SetIsFrozen(self, value)


    def GetIsFrozen(self) -> bool:
        """! * The IsFrozen flag. If set, the node will not be modified by processing modules. 
         *  
        """

        return _Simplygon.spSceneNode_GetIsFrozen(self)


    def SetIsModified(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneNode_SetIsModified(self, value)


    def GetIsModified(self) -> bool:
        """! * If set, the node is new, copied, or modified by processing modules. This can 
         * be useful to track modifications in the scene graph. 
        """

        return _Simplygon.spSceneNode_GetIsModified(self)


    def SetNodeGUID(self, value: str) -> None:
        """! * The unique id for this node. 
         * @param value The node id of type string. 
        """

        return _Simplygon.spSceneNode_SetNodeGUID(self, value)


    def GetNodeGUID(self) -> str:
        """! * The unique id for this node. 
        """

        return _Simplygon.spSceneNode_GetNodeGUID(self)


    def GetInf(self) -> spRealData:
        """! * The inferior (minimum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spSceneNode_GetInf(self)


    def GetSup(self) -> spRealData:
        """! * The superior (maximum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spSceneNode_GetSup(self)


    def GetChildCount(self) -> int:
        """! * The number of direct children of this node. 
         * @return The number of direct children of this node 
        """

        return _Simplygon.spSceneNode_GetChildCount(self)


    def GetChild(self, index: int) -> spSceneNode:
        """! * Get a pointer to the i:th child of this node. 
         * @param index The local index of the child (0->GetChildCount()-1) 
        """

        return _Simplygon.spSceneNode_GetChild(self, index)


    def FindNamedChild(self, name: str) -> spSceneNode:
        """! * Finds the first child that has the name. 
         * @param name The name of the child to look for. 
        """

        return _Simplygon.spSceneNode_FindNamedChild(self, name)


    def AddChild(self, child: spSceneNode) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneNode_AddChild(self, child)


    def CreateChildMesh(self, geom: spGeometryData) -> spSceneMesh:
        """! * Creates a SceneMesh node as a child node to this node. 
         * @param geom The GeometryData object to associate with this node. 
        """

        return _Simplygon.spSceneNode_CreateChildMesh(self, geom)


    def CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr) -> spScenePlane:
        """! * 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. 
        """

        return _Simplygon.spSceneNode_CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr)


    def RemoveChild(self, child: spSceneNode) -> None:
        """! * Removes a child from the node. 
         * @param child The child to be removed. 
        """

        return _Simplygon.spSceneNode_RemoveChild(self, child)


    def RemoveChildren(self) -> None:
        """! * Removes all children of this node. 
        """

        return _Simplygon.spSceneNode_RemoveChildren(self)


    def RemoveFromParent(self) -> None:
        """! * Removes this node from its parent. 
        """

        return _Simplygon.spSceneNode_RemoveFromParent(self)


    def HasChild(self, child: spSceneNode) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneNode_HasChild(self, child)


    def NewCopy(self) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spSceneNode_NewCopy(self)


    def NewClone(self) -> spSceneNode:
        """! * @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 
        """

        return _Simplygon.spSceneNode_NewClone(self)


    def EvaluateDefaultGlobalTransformation(self, global_transform: spMatrix4x4) -> None:
        """! * Evaluates the default global transformation of the node, regardless of node animation. 
         * @param global_transform The transformation matrix that receives the global transformation. 
         *  
        """

        return _Simplygon.spSceneNode_EvaluateDefaultGlobalTransformation(self, global_transform)


    def CalculateExtents(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneNode_CalculateExtents(self)


    def GetPath(self) -> str:
        """! * 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 
        """

        return _Simplygon.spSceneNode_GetPath(self)

    __swig_destroy__ = _Simplygon.delete_spSceneNode

_Simplygon.spSceneNode_swigregister(spSceneNode)

def spSceneNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSceneNode_IsClassA(type)

def spSceneNode_SafeCast(other: spObject) -> spSceneNode:
    """! * 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 
    """

    return _Simplygon.spSceneNode_SafeCast(other)

class spSceneNodeCollection(spObjectCollection):
    """!SceneNodeCollection holds a number of SceneNode objects. The objects can be looked up by their names (if they have been named through SetName())."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSceneNodeCollection:
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_SafeCast(other)

    def AddObject(self, obj: spObject):
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_AddObject(self, obj)


    def AddObjectSorted(self, obj: spObject, ascending: bool):
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_AddObjectSorted(self, obj, ascending)


    def GetFirstItem(self):
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_GetFirstItem(self)


    def GetNextItem(self, objhandle):
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_GetNextItem(self, objhandle)


    def GetItemsObject(self, objhandle) -> spObject:
        """! * The object the handle is referring to. 
         * @param objhandle The handle of an object in the collection. 
         * @return The object associated with the handle 
        """

        return _Simplygon.spSceneNodeCollection_GetItemsObject(self, objhandle)


    def RemoveItem(self, objhandle):
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_RemoveItem(self, objhandle)


    def RemoveObject(self, pobj: spObject) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneNodeCollection_RemoveObject(self, pobj)


    def RemoveAllItems(self) -> None:
        """! * Removes all items from the collection. 
        """

        return _Simplygon.spSceneNodeCollection_RemoveAllItems(self)


    def GetItemCount(self) -> int:
        """! * The number of items in the collection. 
         * @return The number of items in the collection 
        """

        return _Simplygon.spSceneNodeCollection_GetItemCount(self)


    def GetItem(self, index: int):
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_GetItem(self, index)


    def GetItemAsObject(self, index: int) -> spObject:
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_GetItemAsObject(self, index)


    def IsObjectInCollection(self, pobj: spObject) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_IsObjectInCollection(self, pobj)


    def IsItemInCollection(self, objhandle) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_IsItemInCollection(self, objhandle)


    def FindObject(self, name: str) -> spObject:
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_FindObject(self, name)


    def AddSceneNode(self, obj: spSceneNode):
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_AddSceneNode(self, obj)


    def GetSceneNode(self, objhandle) -> spSceneNode:
        """! * The object the handle is referring to. 
         * @param objhandle The handle of the node. 
         * @return The node associated with the handle 
        """

        return _Simplygon.spSceneNodeCollection_GetSceneNode(self, objhandle)


    def RemoveSceneNode(self, pobj: spSceneNode) -> None:
        """! * Removes an object from the collection. Only the first occurrence of the object 
         * is removed. 
         * @param pobj The node to be be removed. 
        """

        return _Simplygon.spSceneNodeCollection_RemoveSceneNode(self, pobj)


    def FindSceneNode(self, name: str) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_FindSceneNode(self, name)


    def GetNextItemAsSceneNode(self, phandle_rhandleInputDataPtr) -> spSceneNode:
        """! * Returns the object of the next item. 
         * @param phandle_rhandleInputDataPtr The handle of a node in the collection. 
         * @return The node after phandle 
        """

        return _Simplygon.spSceneNodeCollection_GetNextItemAsSceneNode(self, phandle_rhandleInputDataPtr)


    def IsSceneNodeInCollection(self, pobj: spSceneNode) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneNodeCollection_IsSceneNodeInCollection(self, pobj)

    __swig_destroy__ = _Simplygon.delete_spSceneNodeCollection

_Simplygon.spSceneNodeCollection_swigregister(spSceneNodeCollection)

def spSceneNodeCollection_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSceneNodeCollection_IsClassA(type)

def spSceneNodeCollection_SafeCast(other: spObject) -> spSceneNodeCollection:
    """! * 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 
    """

    return _Simplygon.spSceneNodeCollection_SafeCast(other)

class spSceneMesh(spSceneNode):
    """!SceneMesh is the mesh node in the simplygon scene graph"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneMesh_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSceneMesh:
        """! * 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 
        """

        return _Simplygon.spSceneMesh_SafeCast(other)

    def GetScene(self) -> spScene:
        """! * The scene object of the node. 
         * @return The scene object. 
        """

        return _Simplygon.spSceneMesh_GetScene(self)


    def GetParent(self) -> spSceneNode:
        """! * The parent node of this node. 
         * @return The parent node 
        """

        return _Simplygon.spSceneMesh_GetParent(self)


    def GetRelativeTransform(self) -> spMatrix4x4:
        """! * The relative transformation of this node. 
         * @return The relative transformation as a 4x4 matrix 
        """

        return _Simplygon.spSceneMesh_GetRelativeTransform(self)


    def SetOriginalName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneMesh_SetOriginalName(self, value)


    def GetOriginalName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spSceneMesh_GetOriginalName(self)


    def SetIsVisible(self, value: bool) -> None:
        """! * The IsVisible flag. If set, the node is visible. 
         * @param value The bool that isVisible is to be set to. 
        """

        return _Simplygon.spSceneMesh_SetIsVisible(self, value)


    def GetIsVisible(self) -> bool:
        """! * The IsVisible flag. If set, the node is visible. 
        """

        return _Simplygon.spSceneMesh_GetIsVisible(self)


    def SetIsFrozen(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneMesh_SetIsFrozen(self, value)


    def GetIsFrozen(self) -> bool:
        """! * The IsFrozen flag. If set, the node will not be modified by processing modules. 
         *  
        """

        return _Simplygon.spSceneMesh_GetIsFrozen(self)


    def SetIsModified(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneMesh_SetIsModified(self, value)


    def GetIsModified(self) -> bool:
        """! * If set, the node is new, copied, or modified by processing modules. This can 
         * be useful to track modifications in the scene graph. 
        """

        return _Simplygon.spSceneMesh_GetIsModified(self)


    def SetNodeGUID(self, value: str) -> None:
        """! * The unique id for this node. 
         * @param value The node id of type string. 
        """

        return _Simplygon.spSceneMesh_SetNodeGUID(self, value)


    def GetNodeGUID(self) -> str:
        """! * The unique id for this node. 
        """

        return _Simplygon.spSceneMesh_GetNodeGUID(self)


    def GetInf(self) -> spRealData:
        """! * The inferior (minimum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spSceneMesh_GetInf(self)


    def GetSup(self) -> spRealData:
        """! * The superior (maximum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spSceneMesh_GetSup(self)


    def GetChildCount(self) -> int:
        """! * The number of direct children of this node. 
         * @return The number of direct children of this node 
        """

        return _Simplygon.spSceneMesh_GetChildCount(self)


    def GetChild(self, index: int) -> spSceneNode:
        """! * Get a pointer to the i:th child of this node. 
         * @param index The local index of the child (0->GetChildCount()-1) 
        """

        return _Simplygon.spSceneMesh_GetChild(self, index)


    def FindNamedChild(self, name: str) -> spSceneNode:
        """! * Finds the first child that has the name. 
         * @param name The name of the child to look for. 
        """

        return _Simplygon.spSceneMesh_FindNamedChild(self, name)


    def AddChild(self, child: spSceneNode) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneMesh_AddChild(self, child)


    def CreateChildMesh(self, geom: spGeometryData) -> spSceneMesh:
        """! * Creates a SceneMesh node as a child node to this node. 
         * @param geom The GeometryData object to associate with this node. 
        """

        return _Simplygon.spSceneMesh_CreateChildMesh(self, geom)


    def CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr) -> spScenePlane:
        """! * 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. 
        """

        return _Simplygon.spSceneMesh_CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr)


    def RemoveChild(self, child: spSceneNode) -> None:
        """! * Removes a child from the node. 
         * @param child The child to be removed. 
        """

        return _Simplygon.spSceneMesh_RemoveChild(self, child)


    def RemoveChildren(self) -> None:
        """! * Removes all children of this node. 
        """

        return _Simplygon.spSceneMesh_RemoveChildren(self)


    def RemoveFromParent(self) -> None:
        """! * Removes this node from its parent. 
        """

        return _Simplygon.spSceneMesh_RemoveFromParent(self)


    def HasChild(self, child: spSceneNode) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneMesh_HasChild(self, child)


    def NewCopy(self) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spSceneMesh_NewCopy(self)


    def NewClone(self) -> spSceneNode:
        """! * @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 
        """

        return _Simplygon.spSceneMesh_NewClone(self)


    def EvaluateDefaultGlobalTransformation(self, global_transform: spMatrix4x4) -> None:
        """! * Evaluates the default global transformation of the node, regardless of node animation. 
         * @param global_transform The transformation matrix that receives the global transformation. 
         *  
        """

        return _Simplygon.spSceneMesh_EvaluateDefaultGlobalTransformation(self, global_transform)


    def CalculateExtents(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneMesh_CalculateExtents(self)


    def GetPath(self) -> str:
        """! * 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 
        """

        return _Simplygon.spSceneMesh_GetPath(self)


    def SetGeometry(self, value: spGeometryData) -> None:
        """! * The geometry data of the mesh node. 
         * @param value The geometry that is to be set. 
        """

        return _Simplygon.spSceneMesh_SetGeometry(self, value)


    def GetGeometry(self) -> spGeometryData:
        """! * The geometry data of the mesh node. 
        """

        return _Simplygon.spSceneMesh_GetGeometry(self)

    __swig_destroy__ = _Simplygon.delete_spSceneMesh

_Simplygon.spSceneMesh_swigregister(spSceneMesh)

def spSceneMesh_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSceneMesh_IsClassA(type)

def spSceneMesh_SafeCast(other: spObject) -> spSceneMesh:
    """! * 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 
    """

    return _Simplygon.spSceneMesh_SafeCast(other)

class spSceneLodGroup(spSceneNode):
    """!SceneLodGroup is a LOD grouping for the scene graph"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneLodGroup_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSceneLodGroup:
        """! * 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 
        """

        return _Simplygon.spSceneLodGroup_SafeCast(other)

    def GetScene(self) -> spScene:
        """! * The scene object of the node. 
         * @return The scene object. 
        """

        return _Simplygon.spSceneLodGroup_GetScene(self)


    def GetParent(self) -> spSceneNode:
        """! * The parent node of this node. 
         * @return The parent node 
        """

        return _Simplygon.spSceneLodGroup_GetParent(self)


    def GetRelativeTransform(self) -> spMatrix4x4:
        """! * The relative transformation of this node. 
         * @return The relative transformation as a 4x4 matrix 
        """

        return _Simplygon.spSceneLodGroup_GetRelativeTransform(self)


    def SetOriginalName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneLodGroup_SetOriginalName(self, value)


    def GetOriginalName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spSceneLodGroup_GetOriginalName(self)


    def SetIsVisible(self, value: bool) -> None:
        """! * The IsVisible flag. If set, the node is visible. 
         * @param value The bool that isVisible is to be set to. 
        """

        return _Simplygon.spSceneLodGroup_SetIsVisible(self, value)


    def GetIsVisible(self) -> bool:
        """! * The IsVisible flag. If set, the node is visible. 
        """

        return _Simplygon.spSceneLodGroup_GetIsVisible(self)


    def SetIsFrozen(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneLodGroup_SetIsFrozen(self, value)


    def GetIsFrozen(self) -> bool:
        """! * The IsFrozen flag. If set, the node will not be modified by processing modules. 
         *  
        """

        return _Simplygon.spSceneLodGroup_GetIsFrozen(self)


    def SetIsModified(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneLodGroup_SetIsModified(self, value)


    def GetIsModified(self) -> bool:
        """! * If set, the node is new, copied, or modified by processing modules. This can 
         * be useful to track modifications in the scene graph. 
        """

        return _Simplygon.spSceneLodGroup_GetIsModified(self)


    def SetNodeGUID(self, value: str) -> None:
        """! * The unique id for this node. 
         * @param value The node id of type string. 
        """

        return _Simplygon.spSceneLodGroup_SetNodeGUID(self, value)


    def GetNodeGUID(self) -> str:
        """! * The unique id for this node. 
        """

        return _Simplygon.spSceneLodGroup_GetNodeGUID(self)


    def GetInf(self) -> spRealData:
        """! * The inferior (minimum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spSceneLodGroup_GetInf(self)


    def GetSup(self) -> spRealData:
        """! * The superior (maximum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spSceneLodGroup_GetSup(self)


    def GetChildCount(self) -> int:
        """! * The number of direct children of this node. 
         * @return The number of direct children of this node 
        """

        return _Simplygon.spSceneLodGroup_GetChildCount(self)


    def GetChild(self, index: int) -> spSceneNode:
        """! * Get a pointer to the i:th child of this node. 
         * @param index The local index of the child (0->GetChildCount()-1) 
        """

        return _Simplygon.spSceneLodGroup_GetChild(self, index)


    def FindNamedChild(self, name: str) -> spSceneNode:
        """! * Finds the first child that has the name. 
         * @param name The name of the child to look for. 
        """

        return _Simplygon.spSceneLodGroup_FindNamedChild(self, name)


    def AddChild(self, child: spSceneNode) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneLodGroup_AddChild(self, child)


    def CreateChildMesh(self, geom: spGeometryData) -> spSceneMesh:
        """! * Creates a SceneMesh node as a child node to this node. 
         * @param geom The GeometryData object to associate with this node. 
        """

        return _Simplygon.spSceneLodGroup_CreateChildMesh(self, geom)


    def CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr) -> spScenePlane:
        """! * 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. 
        """

        return _Simplygon.spSceneLodGroup_CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr)


    def RemoveChild(self, child: spSceneNode) -> None:
        """! * Removes a child from the node. 
         * @param child The child to be removed. 
        """

        return _Simplygon.spSceneLodGroup_RemoveChild(self, child)


    def RemoveChildren(self) -> None:
        """! * Removes all children of this node. 
        """

        return _Simplygon.spSceneLodGroup_RemoveChildren(self)


    def RemoveFromParent(self) -> None:
        """! * Removes this node from its parent. 
        """

        return _Simplygon.spSceneLodGroup_RemoveFromParent(self)


    def HasChild(self, child: spSceneNode) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneLodGroup_HasChild(self, child)


    def NewCopy(self) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spSceneLodGroup_NewCopy(self)


    def NewClone(self) -> spSceneNode:
        """! * @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 
        """

        return _Simplygon.spSceneLodGroup_NewClone(self)


    def EvaluateDefaultGlobalTransformation(self, global_transform: spMatrix4x4) -> None:
        """! * Evaluates the default global transformation of the node, regardless of node animation. 
         * @param global_transform The transformation matrix that receives the global transformation. 
         *  
        """

        return _Simplygon.spSceneLodGroup_EvaluateDefaultGlobalTransformation(self, global_transform)


    def CalculateExtents(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneLodGroup_CalculateExtents(self)


    def GetPath(self) -> str:
        """! * 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 
        """

        return _Simplygon.spSceneLodGroup_GetPath(self)


    def GetThresholds(self) -> spRealArray:
        """! * The threshold distances associated with the LODs of the LOD group. 
         * @return The thresholds of the LODs as a realarray 
        """

        return _Simplygon.spSceneLodGroup_GetThresholds(self)


    def GetLodForDistance(self, distance: float) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spSceneLodGroup_GetLodForDistance(self, distance)

    __swig_destroy__ = _Simplygon.delete_spSceneLodGroup

_Simplygon.spSceneLodGroup_swigregister(spSceneLodGroup)

def spSceneLodGroup_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSceneLodGroup_IsClassA(type)

def spSceneLodGroup_SafeCast(other: spObject) -> spSceneLodGroup:
    """! * 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 
    """

    return _Simplygon.spSceneLodGroup_SafeCast(other)

class spSceneBone(spSceneNode):
    """!SceneBone is the bone node in the simplygon scene graph"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneBone_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSceneBone:
        """! * 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 
        """

        return _Simplygon.spSceneBone_SafeCast(other)

    def GetScene(self) -> spScene:
        """! * The scene object of the node. 
         * @return The scene object. 
        """

        return _Simplygon.spSceneBone_GetScene(self)


    def GetParent(self) -> spSceneNode:
        """! * The parent node of this node. 
         * @return The parent node 
        """

        return _Simplygon.spSceneBone_GetParent(self)


    def GetRelativeTransform(self) -> spMatrix4x4:
        """! * The relative transformation of this node. 
         * @return The relative transformation as a 4x4 matrix 
        """

        return _Simplygon.spSceneBone_GetRelativeTransform(self)


    def SetOriginalName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneBone_SetOriginalName(self, value)


    def GetOriginalName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spSceneBone_GetOriginalName(self)


    def SetIsVisible(self, value: bool) -> None:
        """! * The IsVisible flag. If set, the node is visible. 
         * @param value The bool that isVisible is to be set to. 
        """

        return _Simplygon.spSceneBone_SetIsVisible(self, value)


    def GetIsVisible(self) -> bool:
        """! * The IsVisible flag. If set, the node is visible. 
        """

        return _Simplygon.spSceneBone_GetIsVisible(self)


    def SetIsFrozen(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneBone_SetIsFrozen(self, value)


    def GetIsFrozen(self) -> bool:
        """! * The IsFrozen flag. If set, the node will not be modified by processing modules. 
         *  
        """

        return _Simplygon.spSceneBone_GetIsFrozen(self)


    def SetIsModified(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneBone_SetIsModified(self, value)


    def GetIsModified(self) -> bool:
        """! * If set, the node is new, copied, or modified by processing modules. This can 
         * be useful to track modifications in the scene graph. 
        """

        return _Simplygon.spSceneBone_GetIsModified(self)


    def SetNodeGUID(self, value: str) -> None:
        """! * The unique id for this node. 
         * @param value The node id of type string. 
        """

        return _Simplygon.spSceneBone_SetNodeGUID(self, value)


    def GetNodeGUID(self) -> str:
        """! * The unique id for this node. 
        """

        return _Simplygon.spSceneBone_GetNodeGUID(self)


    def GetInf(self) -> spRealData:
        """! * The inferior (minimum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spSceneBone_GetInf(self)


    def GetSup(self) -> spRealData:
        """! * The superior (maximum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spSceneBone_GetSup(self)


    def GetChildCount(self) -> int:
        """! * The number of direct children of this node. 
         * @return The number of direct children of this node 
        """

        return _Simplygon.spSceneBone_GetChildCount(self)


    def GetChild(self, index: int) -> spSceneNode:
        """! * Get a pointer to the i:th child of this node. 
         * @param index The local index of the child (0->GetChildCount()-1) 
        """

        return _Simplygon.spSceneBone_GetChild(self, index)


    def FindNamedChild(self, name: str) -> spSceneNode:
        """! * Finds the first child that has the name. 
         * @param name The name of the child to look for. 
        """

        return _Simplygon.spSceneBone_FindNamedChild(self, name)


    def AddChild(self, child: spSceneNode) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneBone_AddChild(self, child)


    def CreateChildMesh(self, geom: spGeometryData) -> spSceneMesh:
        """! * Creates a SceneMesh node as a child node to this node. 
         * @param geom The GeometryData object to associate with this node. 
        """

        return _Simplygon.spSceneBone_CreateChildMesh(self, geom)


    def CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr) -> spScenePlane:
        """! * 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. 
        """

        return _Simplygon.spSceneBone_CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr)


    def RemoveChild(self, child: spSceneNode) -> None:
        """! * Removes a child from the node. 
         * @param child The child to be removed. 
        """

        return _Simplygon.spSceneBone_RemoveChild(self, child)


    def RemoveChildren(self) -> None:
        """! * Removes all children of this node. 
        """

        return _Simplygon.spSceneBone_RemoveChildren(self)


    def RemoveFromParent(self) -> None:
        """! * Removes this node from its parent. 
        """

        return _Simplygon.spSceneBone_RemoveFromParent(self)


    def HasChild(self, child: spSceneNode) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneBone_HasChild(self, child)


    def NewCopy(self) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spSceneBone_NewCopy(self)


    def NewClone(self) -> spSceneNode:
        """! * @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 
        """

        return _Simplygon.spSceneBone_NewClone(self)


    def EvaluateDefaultGlobalTransformation(self, global_transform: spMatrix4x4) -> None:
        """! * Evaluates the default global transformation of the node, regardless of node animation. 
         * @param global_transform The transformation matrix that receives the global transformation. 
         *  
        """

        return _Simplygon.spSceneBone_EvaluateDefaultGlobalTransformation(self, global_transform)


    def CalculateExtents(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneBone_CalculateExtents(self)


    def GetPath(self) -> str:
        """! * 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 
        """

        return _Simplygon.spSceneBone_GetPath(self)


    def GetParentBone(self) -> int:
        """! * 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 
        """

        return _Simplygon.spSceneBone_GetParentBone(self)


    def CollectAllChildBones(self, child_bones: spRidArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spSceneBone_CollectAllChildBones(self, child_bones)


    def GetBoneId(self) -> int:
        """! * The BoneId. 
         * @return The id of the current scene bone 
        """

        return _Simplygon.spSceneBone_GetBoneId(self)

    __swig_destroy__ = _Simplygon.delete_spSceneBone

_Simplygon.spSceneBone_swigregister(spSceneBone)

def spSceneBone_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSceneBone_IsClassA(type)

def spSceneBone_SafeCast(other: spObject) -> spSceneBone:
    """! * 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 
    """

    return _Simplygon.spSceneBone_SafeCast(other)

class spSceneBoneTable(spTable):
    """!SceneBoneTable keeps information on bones used while rendering."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneBoneTable_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSceneBoneTable:
        """! * 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 
        """

        return _Simplygon.spSceneBoneTable_SafeCast(other)

    def AddItem(self, item: spObject) -> int:
        """! * 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 
        """

        return _Simplygon.spSceneBoneTable_AddItem(self, item)


    def SetItem(self, id: int, item: spObject) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneBoneTable_SetItem(self, id, item)


    def FindItem(self, name: str) -> spObject:
        """! * 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 
        """

        return _Simplygon.spSceneBoneTable_FindItem(self, name)


    def FindItemId(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spSceneBoneTable_FindItemId(self, name)


    def GetItem(self, id: int) -> spObject:
        """! * Returns the i:th item, using the id of the item. 
         * @param id Is the id of the requested object. 
         * @return the found object 
        """

        return _Simplygon.spSceneBoneTable_GetItem(self, id)


    def RemoveItem(self, id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneBoneTable_RemoveItem(self, id)


    def Clear(self) -> None:
        """! * Clears the table, and removes all items. If AddItem is called after Clear, the 
         * item ids will start over from 0. 
        """

        return _Simplygon.spSceneBoneTable_Clear(self)


    def GetItemsCount(self) -> int:
        """! * 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 
        """

        return _Simplygon.spSceneBoneTable_GetItemsCount(self)


    def Copy(self, src: spTable) -> None:
        """! * Clears the current table and copies the items from a source table. 
         * @param src The table to copy. 
        """

        return _Simplygon.spSceneBoneTable_Copy(self, src)


    def AddBone(self, bone: spSceneBone) -> int:
        """! * 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 
        """

        return _Simplygon.spSceneBoneTable_AddBone(self, bone)


    def FindBone(self, name: str) -> spSceneBone:
        """! * 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 
        """

        return _Simplygon.spSceneBoneTable_FindBone(self, name)


    def FindBoneId(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spSceneBoneTable_FindBoneId(self, name)


    def GetBone(self, id: int) -> spSceneBone:
        """! * 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 
        """

        return _Simplygon.spSceneBoneTable_GetBone(self, id)


    def RemoveBone(self, id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneBoneTable_RemoveBone(self, id)


    def GetBonesCount(self) -> int:
        """! * Returns the number of bones in the table. 
         * @return The number of bones in the table 
        """

        return _Simplygon.spSceneBoneTable_GetBonesCount(self)

    __swig_destroy__ = _Simplygon.delete_spSceneBoneTable

_Simplygon.spSceneBoneTable_swigregister(spSceneBoneTable)

def spSceneBoneTable_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSceneBoneTable_IsClassA(type)

def spSceneBoneTable_SafeCast(other: spObject) -> spSceneBoneTable:
    """! * 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 
    """

    return _Simplygon.spSceneBoneTable_SafeCast(other)

class spScenePlane(spSceneNode):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spScenePlane_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spScenePlane:
        """! * 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 
        """

        return _Simplygon.spScenePlane_SafeCast(other)

    def GetScene(self) -> spScene:
        """! * The scene object of the node. 
         * @return The scene object. 
        """

        return _Simplygon.spScenePlane_GetScene(self)


    def GetParent(self) -> spSceneNode:
        """! * The parent node of this node. 
         * @return The parent node 
        """

        return _Simplygon.spScenePlane_GetParent(self)


    def GetRelativeTransform(self) -> spMatrix4x4:
        """! * The relative transformation of this node. 
         * @return The relative transformation as a 4x4 matrix 
        """

        return _Simplygon.spScenePlane_GetRelativeTransform(self)


    def SetOriginalName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spScenePlane_SetOriginalName(self, value)


    def GetOriginalName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spScenePlane_GetOriginalName(self)


    def SetIsVisible(self, value: bool) -> None:
        """! * The IsVisible flag. If set, the node is visible. 
         * @param value The bool that isVisible is to be set to. 
        """

        return _Simplygon.spScenePlane_SetIsVisible(self, value)


    def GetIsVisible(self) -> bool:
        """! * The IsVisible flag. If set, the node is visible. 
        """

        return _Simplygon.spScenePlane_GetIsVisible(self)


    def SetIsFrozen(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spScenePlane_SetIsFrozen(self, value)


    def GetIsFrozen(self) -> bool:
        """! * The IsFrozen flag. If set, the node will not be modified by processing modules. 
         *  
        """

        return _Simplygon.spScenePlane_GetIsFrozen(self)


    def SetIsModified(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spScenePlane_SetIsModified(self, value)


    def GetIsModified(self) -> bool:
        """! * If set, the node is new, copied, or modified by processing modules. This can 
         * be useful to track modifications in the scene graph. 
        """

        return _Simplygon.spScenePlane_GetIsModified(self)


    def SetNodeGUID(self, value: str) -> None:
        """! * The unique id for this node. 
         * @param value The node id of type string. 
        """

        return _Simplygon.spScenePlane_SetNodeGUID(self, value)


    def GetNodeGUID(self) -> str:
        """! * The unique id for this node. 
        """

        return _Simplygon.spScenePlane_GetNodeGUID(self)


    def GetInf(self) -> spRealData:
        """! * The inferior (minimum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spScenePlane_GetInf(self)


    def GetSup(self) -> spRealData:
        """! * The superior (maximum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spScenePlane_GetSup(self)


    def GetChildCount(self) -> int:
        """! * The number of direct children of this node. 
         * @return The number of direct children of this node 
        """

        return _Simplygon.spScenePlane_GetChildCount(self)


    def GetChild(self, index: int) -> spSceneNode:
        """! * Get a pointer to the i:th child of this node. 
         * @param index The local index of the child (0->GetChildCount()-1) 
        """

        return _Simplygon.spScenePlane_GetChild(self, index)


    def FindNamedChild(self, name: str) -> spSceneNode:
        """! * Finds the first child that has the name. 
         * @param name The name of the child to look for. 
        """

        return _Simplygon.spScenePlane_FindNamedChild(self, name)


    def AddChild(self, child: spSceneNode) -> None:
        """! * 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. 
        """

        return _Simplygon.spScenePlane_AddChild(self, child)


    def CreateChildMesh(self, geom: spGeometryData) -> spSceneMesh:
        """! * Creates a SceneMesh node as a child node to this node. 
         * @param geom The GeometryData object to associate with this node. 
        """

        return _Simplygon.spScenePlane_CreateChildMesh(self, geom)


    def CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr) -> spScenePlane:
        """! * 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. 
        """

        return _Simplygon.spScenePlane_CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr)


    def RemoveChild(self, child: spSceneNode) -> None:
        """! * Removes a child from the node. 
         * @param child The child to be removed. 
        """

        return _Simplygon.spScenePlane_RemoveChild(self, child)


    def RemoveChildren(self) -> None:
        """! * Removes all children of this node. 
        """

        return _Simplygon.spScenePlane_RemoveChildren(self)


    def RemoveFromParent(self) -> None:
        """! * Removes this node from its parent. 
        """

        return _Simplygon.spScenePlane_RemoveFromParent(self)


    def HasChild(self, child: spSceneNode) -> bool:
        """! * 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 
        """

        return _Simplygon.spScenePlane_HasChild(self, child)


    def NewCopy(self) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spScenePlane_NewCopy(self)


    def NewClone(self) -> spSceneNode:
        """! * @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 
        """

        return _Simplygon.spScenePlane_NewClone(self)


    def EvaluateDefaultGlobalTransformation(self, global_transform: spMatrix4x4) -> None:
        """! * Evaluates the default global transformation of the node, regardless of node animation. 
         * @param global_transform The transformation matrix that receives the global transformation. 
         *  
        """

        return _Simplygon.spScenePlane_EvaluateDefaultGlobalTransformation(self, global_transform)


    def CalculateExtents(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spScenePlane_CalculateExtents(self)


    def GetPath(self) -> str:
        """! * 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 
        """

        return _Simplygon.spScenePlane_GetPath(self)


    def GetPosition(self) -> spRealData:
        """! * The position (translation) of the plane. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spScenePlane_GetPosition(self)


    def SetPosition(self, vec_realInputDataPtr) -> None:
        """! * The position (translation) of the plane. 
         * @param vec_realInputDataPtr The new position. 
        """

        return _Simplygon.spScenePlane_SetPosition(self, vec_realInputDataPtr)


    def GetNormal(self) -> spRealData:
        """! * The normal of the plane. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spScenePlane_GetNormal(self)


    def SetNormal(self, vec_realInputDataPtr) -> None:
        """! * The normal of the plane. 
         * @param vec_realInputDataPtr The new normal. 
        """

        return _Simplygon.spScenePlane_SetNormal(self, vec_realInputDataPtr)

    __swig_destroy__ = _Simplygon.delete_spScenePlane

_Simplygon.spScenePlane_swigregister(spScenePlane)

def spScenePlane_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spScenePlane_IsClassA(type)

def spScenePlane_SafeCast(other: spObject) -> spScenePlane:
    """! * 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 
    """

    return _Simplygon.spScenePlane_SafeCast(other)

class spSceneCamera(spSceneNode):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneCamera_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSceneCamera:
        """! * 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 
        """

        return _Simplygon.spSceneCamera_SafeCast(other)

    def GetScene(self) -> spScene:
        """! * The scene object of the node. 
         * @return The scene object. 
        """

        return _Simplygon.spSceneCamera_GetScene(self)


    def GetParent(self) -> spSceneNode:
        """! * The parent node of this node. 
         * @return The parent node 
        """

        return _Simplygon.spSceneCamera_GetParent(self)


    def GetRelativeTransform(self) -> spMatrix4x4:
        """! * The relative transformation of this node. 
         * @return The relative transformation as a 4x4 matrix 
        """

        return _Simplygon.spSceneCamera_GetRelativeTransform(self)


    def SetOriginalName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_SetOriginalName(self, value)


    def GetOriginalName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_GetOriginalName(self)


    def SetIsVisible(self, value: bool) -> None:
        """! * The IsVisible flag. If set, the node is visible. 
         * @param value The bool that isVisible is to be set to. 
        """

        return _Simplygon.spSceneCamera_SetIsVisible(self, value)


    def GetIsVisible(self) -> bool:
        """! * The IsVisible flag. If set, the node is visible. 
        """

        return _Simplygon.spSceneCamera_GetIsVisible(self)


    def SetIsFrozen(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_SetIsFrozen(self, value)


    def GetIsFrozen(self) -> bool:
        """! * The IsFrozen flag. If set, the node will not be modified by processing modules. 
         *  
        """

        return _Simplygon.spSceneCamera_GetIsFrozen(self)


    def SetIsModified(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_SetIsModified(self, value)


    def GetIsModified(self) -> bool:
        """! * If set, the node is new, copied, or modified by processing modules. This can 
         * be useful to track modifications in the scene graph. 
        """

        return _Simplygon.spSceneCamera_GetIsModified(self)


    def SetNodeGUID(self, value: str) -> None:
        """! * The unique id for this node. 
         * @param value The node id of type string. 
        """

        return _Simplygon.spSceneCamera_SetNodeGUID(self, value)


    def GetNodeGUID(self) -> str:
        """! * The unique id for this node. 
        """

        return _Simplygon.spSceneCamera_GetNodeGUID(self)


    def GetInf(self) -> spRealData:
        """! * The inferior (minimum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spSceneCamera_GetInf(self)


    def GetSup(self) -> spRealData:
        """! * The superior (maximum) extent of the node. 
         * @return The returned data array. The array contains 3 items. 
        """

        return _Simplygon.spSceneCamera_GetSup(self)


    def GetChildCount(self) -> int:
        """! * The number of direct children of this node. 
         * @return The number of direct children of this node 
        """

        return _Simplygon.spSceneCamera_GetChildCount(self)


    def GetChild(self, index: int) -> spSceneNode:
        """! * Get a pointer to the i:th child of this node. 
         * @param index The local index of the child (0->GetChildCount()-1) 
        """

        return _Simplygon.spSceneCamera_GetChild(self, index)


    def FindNamedChild(self, name: str) -> spSceneNode:
        """! * Finds the first child that has the name. 
         * @param name The name of the child to look for. 
        """

        return _Simplygon.spSceneCamera_FindNamedChild(self, name)


    def AddChild(self, child: spSceneNode) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_AddChild(self, child)


    def CreateChildMesh(self, geom: spGeometryData) -> spSceneMesh:
        """! * Creates a SceneMesh node as a child node to this node. 
         * @param geom The GeometryData object to associate with this node. 
        """

        return _Simplygon.spSceneCamera_CreateChildMesh(self, geom)


    def CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr) -> spScenePlane:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_CreateChildPlane(self, position_realInputDataPtr, normal_realInputDataPtr)


    def RemoveChild(self, child: spSceneNode) -> None:
        """! * Removes a child from the node. 
         * @param child The child to be removed. 
        """

        return _Simplygon.spSceneCamera_RemoveChild(self, child)


    def RemoveChildren(self) -> None:
        """! * Removes all children of this node. 
        """

        return _Simplygon.spSceneCamera_RemoveChildren(self)


    def RemoveFromParent(self) -> None:
        """! * Removes this node from its parent. 
        """

        return _Simplygon.spSceneCamera_RemoveFromParent(self)


    def HasChild(self, child: spSceneNode) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneCamera_HasChild(self, child)


    def NewCopy(self) -> spSceneNode:
        """! * 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 
        """

        return _Simplygon.spSceneCamera_NewCopy(self)


    def NewClone(self) -> spSceneNode:
        """! * @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 
        """

        return _Simplygon.spSceneCamera_NewClone(self)


    def EvaluateDefaultGlobalTransformation(self, global_transform: spMatrix4x4) -> None:
        """! * Evaluates the default global transformation of the node, regardless of node animation. 
         * @param global_transform The transformation matrix that receives the global transformation. 
         *  
        """

        return _Simplygon.spSceneCamera_EvaluateDefaultGlobalTransformation(self, global_transform)


    def CalculateExtents(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneCamera_CalculateExtents(self)


    def GetPath(self) -> str:
        """! * 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 
        """

        return _Simplygon.spSceneCamera_GetPath(self)


    def SetCameraType(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_SetCameraType(self, value)


    def GetCameraType(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spSceneCamera_GetCameraType(self)


    def GetCameraPositions(self) -> spRealArray:
        """! * CameraPositions is an IRealArray (with tuple size 3) where each tuple is a 3d 
         * camera position. 
         * @return The current array of camera positions 
        """

        return _Simplygon.spSceneCamera_GetCameraPositions(self)


    def GetTargetPositions(self) -> spRealArray:
        """! * TargetPositions is an IRealArray (with tuple size 3) where each tuple is a 3d 
         * camera target position. 
         * @return The current array of target positions 
        """

        return _Simplygon.spSceneCamera_GetTargetPositions(self)


    def SetUseNormalizedCoordinates(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_SetUseNormalizedCoordinates(self, value)


    def GetUseNormalizedCoordinates(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_GetUseNormalizedCoordinates(self)


    def SetOrthographicCameraPixelSize(self, value: float) -> None:
        """! * Specifies/Gets the length of the side of a square pixel if the camera type is 
         * Orthographic. 
         * @param value The desired OrthographicCameraPixelSize value. 
        """

        return _Simplygon.spSceneCamera_SetOrthographicCameraPixelSize(self, value)


    def GetOrthographicCameraPixelSize(self) -> float:
        """! * Specifies/Gets the length of the side of a square pixel if the camera type is 
         * Orthographic. 
        """

        return _Simplygon.spSceneCamera_GetOrthographicCameraPixelSize(self)


    def SetFieldOfView(self, value: float) -> None:
        """! * The field of view (in radians) of the camera. 
         * @param value The desired FieldOfView value. 
        """

        return _Simplygon.spSceneCamera_SetFieldOfView(self, value)


    def GetFieldOfView(self) -> float:
        """! * The field of view (in radians) of the camera. 
        """

        return _Simplygon.spSceneCamera_GetFieldOfView(self)


    def SetPixelFieldOfView(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_SetPixelFieldOfView(self, value)


    def GetPixelFieldOfView(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_GetPixelFieldOfView(self)


    def GetNumberOfViews(self) -> int:
        """! * Returns the number of views. 
         * @return The number of views. 
        """

        return _Simplygon.spSceneCamera_GetNumberOfViews(self)


    def ValidateCamera(self) -> bool:
        """! * Validates the camera properties. Asserts on invalid properties. 
         * @return True if the ISceneCamera is valid. 
        """

        return _Simplygon.spSceneCamera_ValidateCamera(self)


    def SetCustomSphereCameraPath(self, fidelity: int, pitch_angle: float, yaw_angle: float, coverage_angle: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneCamera_SetCustomSphereCameraPath(self, fidelity, pitch_angle, yaw_angle, coverage_angle)

    __swig_destroy__ = _Simplygon.delete_spSceneCamera

_Simplygon.spSceneCamera_swigregister(spSceneCamera)

def spSceneCamera_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSceneCamera_IsClassA(type)

def spSceneCamera_SafeCast(other: spObject) -> spSceneCamera:
    """! * 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 
    """

    return _Simplygon.spSceneCamera_SafeCast(other)

class spSceneExporter(spObject):
    """!Class for saving scene data to different file formats depending on the extension of the set file name."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneExporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSceneExporter:
        """! * 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 
        """

        return _Simplygon.spSceneExporter_SafeCast(other)

    def SetExportFilePath(self, value: str) -> None:
        """! * The main export file path. This must always be set. 
         * @param value The desired main export file path. 
        """

        return _Simplygon.spSceneExporter_SetExportFilePath(self, value)


    def GetExportFilePath(self) -> str:
        """! * The main export file path. This must always be set. 
        """

        return _Simplygon.spSceneExporter_GetExportFilePath(self)


    def SetPrimaryTexCoordName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spSceneExporter_SetPrimaryTexCoordName(self, value)


    def GetPrimaryTexCoordName(self) -> str:
        """! * The primary texture coordinate layer name. Used by file formats that only support 
         * one texture coordinate layer (like .obj) 
        """

        return _Simplygon.spSceneExporter_GetPrimaryTexCoordName(self)


    def SetScene(self, value: spScene) -> None:
        """! * The scene to export. 
         * @param value The scene object to export. 
        """

        return _Simplygon.spSceneExporter_SetScene(self, value)


    def RunExport(self) -> bool:
        """! * Runs the export. Note that all parameters must be setup before importing. 
        """

        return _Simplygon.spSceneExporter_RunExport(self)


    def Clear(self) -> None:
        """! * Close any open file or stream, release any allocated data. 
        """

        return _Simplygon.spSceneExporter_Clear(self)


    def SetEmbedReferences(self, value: bool) -> None:
        """! * Flag to control if output file formats that support embedding referenced resources 
         * (like textures) should do so. 
         * @param value Embed flag. 
        """

        return _Simplygon.spSceneExporter_SetEmbedReferences(self, value)


    def GetEmbedReferences(self) -> bool:
        """! * Flag to control if output file formats that support embedding referenced resources 
         * (like textures) should do so. 
        """

        return _Simplygon.spSceneExporter_GetEmbedReferences(self)


    def SetExportCascadedScenes(self, value: bool) -> None:
        """! * Flag to control if cascaded scenes should be included in the export. 
         * @param value Export cascaded scenes flag. 
        """

        return _Simplygon.spSceneExporter_SetExportCascadedScenes(self, value)


    def GetExportCascadedScenes(self) -> bool:
        """! * Flag to control if cascaded scenes should be included in the export. 
        """

        return _Simplygon.spSceneExporter_GetExportCascadedScenes(self)

    __swig_destroy__ = _Simplygon.delete_spSceneExporter

_Simplygon.spSceneExporter_swigregister(spSceneExporter)

def spSceneExporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSceneExporter_IsClassA(type)

def spSceneExporter_SafeCast(other: spObject) -> spSceneExporter:
    """! * 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 
    """

    return _Simplygon.spSceneExporter_SafeCast(other)

class spSceneImporter(spObject):
    """!Class for loading scene data from different file formats."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSceneImporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSceneImporter:
        """! * 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 
        """

        return _Simplygon.spSceneImporter_SafeCast(other)

    def SetImportFilePath(self, value: str) -> None:
        """! * The main import file path. This must always be set. 
         * @param value The desired main import file path. 
        """

        return _Simplygon.spSceneImporter_SetImportFilePath(self, value)


    def GetImportFilePath(self) -> str:
        """! * The main import file path. This must always be set. 
        """

        return _Simplygon.spSceneImporter_GetImportFilePath(self)


    def GetScene(self) -> spScene:
        """! * The imported scene data. 
         * @return The imported scene data 
        """

        return _Simplygon.spSceneImporter_GetScene(self)


    def RunImport(self) -> bool:
        """! * Runs the import. Note that all parameters must be setup before importing. 
        """

        return _Simplygon.spSceneImporter_RunImport(self)


    def Clear(self) -> None:
        """! * Close any open file or stream, release any allocated data. 
        """

        return _Simplygon.spSceneImporter_Clear(self)

    __swig_destroy__ = _Simplygon.delete_spSceneImporter

_Simplygon.spSceneImporter_swigregister(spSceneImporter)

def spSceneImporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSceneImporter_IsClassA(type)

def spSceneImporter_SafeCast(other: spObject) -> spSceneImporter:
    """! * 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 
    """

    return _Simplygon.spSceneImporter_SafeCast(other)

class spSelectionSet(spObject):
    """!SelectionSet is a set of scene node GUIDs referencing scene nodes in a scene."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSelectionSet_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSelectionSet:
        """! * 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 
        """

        return _Simplygon.spSelectionSet_SafeCast(other)

    def AddItem(self, NodeId: str) -> None:
        """! * Adds a node id to the set. 
         * @param NodeId The node id that is to be added to the set. 
        """

        return _Simplygon.spSelectionSet_AddItem(self, NodeId)


    def RemoveItem(self, NodeId: str) -> None:
        """! * Removes an node id from the set. 
         * @param NodeId The node id that is to be removed from to the set. 
        """

        return _Simplygon.spSelectionSet_RemoveItem(self, NodeId)


    def AddHierarchy(self, node: spSceneNode) -> None:
        """! * Adds the ids of this node and its children from this selectionset recursively. 
         * @param node The top node in the hierarchy to add. 
        """

        return _Simplygon.spSelectionSet_AddHierarchy(self, node)


    def RemoveHierarchy(self, node: spSceneNode) -> None:
        """! * Removes the ids of this node and its children from this selectionset recursively. 
         * @param node The top node in the hierarchy to remove. 
        """

        return _Simplygon.spSelectionSet_RemoveHierarchy(self, node)


    def Clear(self) -> None:
        """! * Clears the set. 
        """

        return _Simplygon.spSelectionSet_Clear(self)


    def GetItemCount(self) -> int:
        """! * The number of items in the set. 
         * @return The number of items in the set. 
        """

        return _Simplygon.spSelectionSet_GetItemCount(self)


    def GetItem(self, index: int) -> str:
        """! * 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. 
        """

        return _Simplygon.spSelectionSet_GetItem(self, index)

    __swig_destroy__ = _Simplygon.delete_spSelectionSet

_Simplygon.spSelectionSet_swigregister(spSelectionSet)

def spSelectionSet_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSelectionSet_IsClassA(type)

def spSelectionSet_SafeCast(other: spObject) -> spSelectionSet:
    """! * 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 
    """

    return _Simplygon.spSelectionSet_SafeCast(other)

class spSelectionSetTable(spTable):
    """!SelectionSetTable keeps a table of SelectionSet."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSelectionSetTable_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSelectionSetTable:
        """! * 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 
        """

        return _Simplygon.spSelectionSetTable_SafeCast(other)

    def AddItem(self, item: spObject) -> int:
        """! * 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 
        """

        return _Simplygon.spSelectionSetTable_AddItem(self, item)


    def SetItem(self, id: int, item: spObject) -> None:
        """! * 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. 
        """

        return _Simplygon.spSelectionSetTable_SetItem(self, id, item)


    def FindItem(self, name: str) -> spObject:
        """! * 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 
        """

        return _Simplygon.spSelectionSetTable_FindItem(self, name)


    def FindItemId(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spSelectionSetTable_FindItemId(self, name)


    def GetItem(self, id: int) -> spObject:
        """! * Returns the i:th item, using the id of the item. 
         * @param id Is the id of the requested object. 
         * @return the found object 
        """

        return _Simplygon.spSelectionSetTable_GetItem(self, id)


    def RemoveItem(self, id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spSelectionSetTable_RemoveItem(self, id)


    def Clear(self) -> None:
        """! * Clears the table, and removes all items. If AddItem is called after Clear, the 
         * item ids will start over from 0. 
        """

        return _Simplygon.spSelectionSetTable_Clear(self)


    def GetItemsCount(self) -> int:
        """! * 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 
        """

        return _Simplygon.spSelectionSetTable_GetItemsCount(self)


    def Copy(self, src: spTable) -> None:
        """! * Clears the current table and copies the items from a source table. 
         * @param src The table to copy. 
        """

        return _Simplygon.spSelectionSetTable_Copy(self, src)


    def AddSelectionSet(self, selectionSet: spSelectionSet) -> int:
        """! * 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 
        """

        return _Simplygon.spSelectionSetTable_AddSelectionSet(self, selectionSet)


    def FindSelectionSet(self, name: str) -> spSelectionSet:
        """! * 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 
        """

        return _Simplygon.spSelectionSetTable_FindSelectionSet(self, name)


    def FindSelectionSetId(self, name: str) -> int:
        """! * 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 
         *  
        """

        return _Simplygon.spSelectionSetTable_FindSelectionSetId(self, name)


    def GetSelectionSet(self, id: int) -> spSelectionSet:
        """! * 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 
        """

        return _Simplygon.spSelectionSetTable_GetSelectionSet(self, id)


    def RemoveSelectionSet(self, id: int) -> None:
        """! * Removes a selection set from the table by set ID. 
         * @param id The id of the selection set that is to be removed. 
        """

        return _Simplygon.spSelectionSetTable_RemoveSelectionSet(self, id)


    def RemoveNamedSelectionSet(self, name: str) -> None:
        """! * Removes a selection set from the table by name. 
         * @param name The name of the set to be removed from to the table. 
        """

        return _Simplygon.spSelectionSetTable_RemoveNamedSelectionSet(self, name)


    def GetSelectionSetCount(self) -> int:
        """! * Returns the number of selection sets in the table. 
         * @return The number of selection sets in the table 
        """

        return _Simplygon.spSelectionSetTable_GetSelectionSetCount(self)

    __swig_destroy__ = _Simplygon.delete_spSelectionSetTable

_Simplygon.spSelectionSetTable_swigregister(spSelectionSetTable)

def spSelectionSetTable_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSelectionSetTable_IsClassA(type)

def spSelectionSetTable_SafeCast(other: spObject) -> spSelectionSetTable:
    """! * 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 
    """

    return _Simplygon.spSelectionSetTable_SafeCast(other)

class spTexture(spObject):
    """!Texture describes a texture object, containing either image data or a path that is referenced by texture nodes in materials."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spTexture_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spTexture:
        """! * 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 
        """

        return _Simplygon.spTexture_SafeCast(other)

    def SetFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spTexture_SetFilePath(self, value)


    def GetFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spTexture_GetFilePath(self)


    def SetImageData(self, value: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spTexture_SetImageData(self, value)


    def GetImageData(self) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spTexture_GetImageData(self)


    def ChangeTexturePrefixPath(self, current_path_prefix: str, new_path_prefix: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spTexture_ChangeTexturePrefixPath(self, current_path_prefix, new_path_prefix)


    def ExportImageData(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spTexture_ExportImageData(self)

    __swig_destroy__ = _Simplygon.delete_spTexture

_Simplygon.spTexture_swigregister(spTexture)

def spTexture_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spTexture_IsClassA(type)

def spTexture_SafeCast(other: spObject) -> spTexture:
    """! * 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 
    """

    return _Simplygon.spTexture_SafeCast(other)

class spTextureTable(spTable):
    """!TextureTable keeps information on textures used while rendering. """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spTextureTable_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spTextureTable:
        """! * 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 
        """

        return _Simplygon.spTextureTable_SafeCast(other)

    def AddItem(self, item: spObject) -> int:
        """! * 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 
        """

        return _Simplygon.spTextureTable_AddItem(self, item)


    def SetItem(self, id: int, item: spObject) -> None:
        """! * 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. 
        """

        return _Simplygon.spTextureTable_SetItem(self, id, item)


    def FindItem(self, name: str) -> spObject:
        """! * 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 
        """

        return _Simplygon.spTextureTable_FindItem(self, name)


    def FindItemId(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spTextureTable_FindItemId(self, name)


    def GetItem(self, id: int) -> spObject:
        """! * Returns the i:th item, using the id of the item. 
         * @param id Is the id of the requested object. 
         * @return the found object 
        """

        return _Simplygon.spTextureTable_GetItem(self, id)


    def RemoveItem(self, id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spTextureTable_RemoveItem(self, id)


    def Clear(self) -> None:
        """! * Clears the table, and removes all items. If AddItem is called after Clear, the 
         * item ids will start over from 0. 
        """

        return _Simplygon.spTextureTable_Clear(self)


    def GetItemsCount(self) -> int:
        """! * 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 
        """

        return _Simplygon.spTextureTable_GetItemsCount(self)


    def Copy(self, src: spTable) -> None:
        """! * Clears the current table and copies the items from a source table. 
         * @param src The table to copy. 
        """

        return _Simplygon.spTextureTable_Copy(self, src)


    def AddTexture(self, texture: spTexture) -> int:
        """! * 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 
        """

        return _Simplygon.spTextureTable_AddTexture(self, texture)


    def FindTexture(self, name: str) -> spTexture:
        """! * 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 
        """

        return _Simplygon.spTextureTable_FindTexture(self, name)


    def FindTextureUsingPath(self, path: str) -> spTexture:
        """! * 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 
        """

        return _Simplygon.spTextureTable_FindTextureUsingPath(self, path)


    def FindTextureId(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spTextureTable_FindTextureId(self, name)


    def SetTexture(self, id: int, texture: spTexture) -> None:
        """! * 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. 
        """

        return _Simplygon.spTextureTable_SetTexture(self, id, texture)


    def GetTexture(self, id: int) -> spTexture:
        """! * 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 
        """

        return _Simplygon.spTextureTable_GetTexture(self, id)


    def RemoveTexture(self, id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spTextureTable_RemoveTexture(self, id)


    def GetTexturesCount(self) -> int:
        """! * Returns the number of textures in the table. 
        """

        return _Simplygon.spTextureTable_GetTexturesCount(self)


    def ChangeTexturePrefixPath(self, current_path_prefix: str, new_path_prefix: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spTextureTable_ChangeTexturePrefixPath(self, current_path_prefix, new_path_prefix)

    __swig_destroy__ = _Simplygon.delete_spTextureTable

_Simplygon.spTextureTable_swigregister(spTextureTable)

def spTextureTable_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spTextureTable_IsClassA(type)

def spTextureTable_SafeCast(other: spObject) -> spTextureTable:
    """! * 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 
    """

    return _Simplygon.spTextureTable_SafeCast(other)

class spGeometryCullingSettings(spSettingsObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGeometryCullingSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGeometryCullingSettings:
        """! * 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 
        """

        return _Simplygon.spGeometryCullingSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spGeometryCullingSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spGeometryCullingSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGeometryCullingSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGeometryCullingSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGeometryCullingSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGeometryCullingSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGeometryCullingSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spGeometryCullingSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spGeometryCullingSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spGeometryCullingSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spGeometryCullingSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spGeometryCullingSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spGeometryCullingSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryCullingSettings_SetValidateParameterNames(self, validate)


    def SetUseClippingPlanes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryCullingSettings_SetUseClippingPlanes(self, value)


    def GetUseClippingPlanes(self) -> bool:
        """! * If true the ScenePlanes in the input scene (or the planes selected by the selection 
         * set settings) will be used to clip the mesh. 
        """

        return _Simplygon.spGeometryCullingSettings_GetUseClippingPlanes(self)


    def SetUseClippingGeometry(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryCullingSettings_SetUseClippingGeometry(self, value)


    def GetUseClippingGeometry(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spGeometryCullingSettings_GetUseClippingGeometry(self)


    def SetClippingPlaneSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryCullingSettings_SetClippingPlaneSelectionSetID(self, value)


    def GetClippingPlaneSelectionSetID(self) -> int:
        """! * Which SelectionSet containing sceneplanes will be used for clipping. Set name 
         * is prioritized over id if both are set. 
        """

        return _Simplygon.spGeometryCullingSettings_GetClippingPlaneSelectionSetID(self)


    def SetClippingPlaneSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryCullingSettings_SetClippingPlaneSelectionSetName(self, value)


    def GetClippingPlaneSelectionSetName(self) -> str:
        """! * Which SelectionSet containing sceneplanes will be used for clipping. Set name 
         * is prioritized over id if both are set. 
        """

        return _Simplygon.spGeometryCullingSettings_GetClippingPlaneSelectionSetName(self)


    def SetClippingGeometrySelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryCullingSettings_SetClippingGeometrySelectionSetID(self, value)


    def GetClippingGeometrySelectionSetID(self) -> int:
        """! * Which SelectionSet containing geometries will be used for clipping. Set name 
         * is prioritized over id if both are set. 
        """

        return _Simplygon.spGeometryCullingSettings_GetClippingGeometrySelectionSetID(self)


    def SetClippingGeometrySelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryCullingSettings_SetClippingGeometrySelectionSetName(self, value)


    def GetClippingGeometrySelectionSetName(self) -> str:
        """! * Which SelectionSet containing geometries will be used for clipping. Set name 
         * is prioritized over id if both are set. 
        """

        return _Simplygon.spGeometryCullingSettings_GetClippingGeometrySelectionSetName(self)

    __swig_destroy__ = _Simplygon.delete_spGeometryCullingSettings

_Simplygon.spGeometryCullingSettings_swigregister(spGeometryCullingSettings)

def spGeometryCullingSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGeometryCullingSettings_IsClassA(type)

def spGeometryCullingSettings_SafeCast(other: spObject) -> spGeometryCullingSettings:
    """! * 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 
    """

    return _Simplygon.spGeometryCullingSettings_SafeCast(other)

class spImageDataImporter(spObject):
    """!Class for loading image data from different file formats."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spImageDataImporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spImageDataImporter:
        """! * 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 
        """

        return _Simplygon.spImageDataImporter_SafeCast(other)

    def SetImportFilePath(self, value: str) -> None:
        """! * The main import file path. This must always be set. 
         * @param value The desired main import file path. 
        """

        return _Simplygon.spImageDataImporter_SetImportFilePath(self, value)


    def GetImportFilePath(self) -> str:
        """! * The main import file path. This must always be set. 
        """

        return _Simplygon.spImageDataImporter_GetImportFilePath(self)


    def SetExtensionOverride(self, value: str) -> None:
        """! * The override file extension. This is specified including the dot, eg ".tga". 
         * @param value The desired override file extension. 
        """

        return _Simplygon.spImageDataImporter_SetExtensionOverride(self, value)


    def GetExtensionOverride(self) -> str:
        """! * The override file extension. This is specified including the dot, eg ".tga". 
         *  
        """

        return _Simplygon.spImageDataImporter_GetExtensionOverride(self)


    def GetImage(self) -> spImageData:
        """! * The imported image data. 
         * @return The imported image data 
        """

        return _Simplygon.spImageDataImporter_GetImage(self)


    def SetCapToPowerOfTwo(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageDataImporter_SetCapToPowerOfTwo(self, value)


    def GetCapToPowerOfTwo(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spImageDataImporter_GetCapToPowerOfTwo(self)


    def SetMaxWidth(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageDataImporter_SetMaxWidth(self, value)


    def GetMaxWidth(self) -> int:
        """! * Set/Get MaxWidth. If set to a value above 0, the image that is wider will be 
         * rescaled to MaxWidth. 
        """

        return _Simplygon.spImageDataImporter_GetMaxWidth(self)


    def SetMaxHeight(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageDataImporter_SetMaxHeight(self, value)


    def GetMaxHeight(self) -> int:
        """! * Set/Get MaxHeight. If set to a value above 0, the image that is higher will be 
         * rescaled to MaxHeight. 
        """

        return _Simplygon.spImageDataImporter_GetMaxHeight(self)


    def SetImportOnlyHeader(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageDataImporter_SetImportOnlyHeader(self, value)


    def GetImportOnlyHeader(self) -> bool:
        """! * Set/Get ImportOnlyHeader. If set to true only gets header information from the 
         * image, and does not load the actual file into memory. 
        """

        return _Simplygon.spImageDataImporter_GetImportOnlyHeader(self)


    def GetNumberOfChannels(self) -> int:
        """! * After RunImport(), returns the NumberOfChannels (1, 3, 4) in the source image. 
         * @return The current NumberOfChannels 
        """

        return _Simplygon.spImageDataImporter_GetNumberOfChannels(self)


    def GetBitsPerPixel(self) -> int:
        """! * After RunImport(), returns the BitsPerPixel (8bpp-64bpp). If divided by NumberOfChannels, 
         * will give the number of bits per channel. 
         * @return The current BitsPerPixel 
        """

        return _Simplygon.spImageDataImporter_GetBitsPerPixel(self)


    def GetImageFileFormat(self):
        """! * Return the format of the image. 
         * @return The current image file format 
        """

        return _Simplygon.spImageDataImporter_GetImageFileFormat(self)


    def RunImport(self) -> bool:
        """! * Runs the import. Note that all parameters must be setup before importing. 
        """

        return _Simplygon.spImageDataImporter_RunImport(self)


    def Clear(self) -> None:
        """! * Close any open file or stream, release any allocated data. 
        """

        return _Simplygon.spImageDataImporter_Clear(self)

    __swig_destroy__ = _Simplygon.delete_spImageDataImporter

_Simplygon.spImageDataImporter_swigregister(spImageDataImporter)

def spImageDataImporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spImageDataImporter_IsClassA(type)

def spImageDataImporter_SafeCast(other: spObject) -> spImageDataImporter:
    """! * 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 
    """

    return _Simplygon.spImageDataImporter_SafeCast(other)

class spMappingImageMeshData(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spMappingImageMeshData_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spMappingImageMeshData:
        """! * 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 
        """

        return _Simplygon.spMappingImageMeshData_SafeCast(other)

    def GetMappedGeometriesCount(self) -> int:
        """! * The MappedGeometriesCount, the number of mapped geometries. 
         * @return The number of mapped geometries in the mapping image 
        """

        return _Simplygon.spMappingImageMeshData_GetMappedGeometriesCount(self)


    def GetStartTriangleIdOfGeometry(self, GeometryIndex: int) -> int:
        """! * 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 
        """

        return _Simplygon.spMappingImageMeshData_GetStartTriangleIdOfGeometry(self, GeometryIndex)


    def GetScenePathOfGeometry(self, GeometryIndex: int) -> str:
        """! * 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 
        """

        return _Simplygon.spMappingImageMeshData_GetScenePathOfGeometry(self, GeometryIndex)


    def GetNodeGuidOfGeometry(self, GeometryIndex: int) -> str:
        """! * The node guid containing the original geometry. 
         * @param GeometryIndex Is index of the geometry in the list of mapped geometries. 
         *  
         * @return The guid 
        """

        return _Simplygon.spMappingImageMeshData_GetNodeGuidOfGeometry(self, GeometryIndex)


    def Clear(self) -> None:
        """! * Clear the MappingImageMeshData. 
        """

        return _Simplygon.spMappingImageMeshData_Clear(self)

    __swig_destroy__ = _Simplygon.delete_spMappingImageMeshData

_Simplygon.spMappingImageMeshData_swigregister(spMappingImageMeshData)

def spMappingImageMeshData_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spMappingImageMeshData_IsClassA(type)

def spMappingImageMeshData_SafeCast(other: spObject) -> spMappingImageMeshData:
    """! * 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 
    """

    return _Simplygon.spMappingImageMeshData_SafeCast(other)

class spShadingNode(spObject):
    """!ShadingNode is the parent of all nodes in a shading network."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingNode:
        """! * 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 
        """

        return _Simplygon.spShadingNode_SafeCast(other)

    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingNode

_Simplygon.spShadingNode_swigregister(spShadingNode)

def spShadingNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingNode_IsClassA(type)

def spShadingNode_SafeCast(other: spObject) -> spShadingNode:
    """! * 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 
    """

    return _Simplygon.spShadingNode_SafeCast(other)

class spShadingFilterNode(spShadingNode):
    """!FilterNode is the parent of all non-source nodes in a shading network."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingFilterNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingFilterNode:
        """! * 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 
        """

        return _Simplygon.spShadingFilterNode_SafeCast(other)

    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingFilterNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingFilterNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingFilterNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingFilterNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingFilterNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingFilterNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingFilterNode_GetDefaultParameterAlpha(self, parameter_id)


    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingFilterNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingFilterNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingFilterNode_GetParameterIsInputable(self, param_id)

    __swig_destroy__ = _Simplygon.delete_spShadingFilterNode

_Simplygon.spShadingFilterNode_swigregister(spShadingFilterNode)

def spShadingFilterNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingFilterNode_IsClassA(type)

def spShadingFilterNode_SafeCast(other: spObject) -> spShadingFilterNode:
    """! * 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 
    """

    return _Simplygon.spShadingFilterNode_SafeCast(other)

class spShadingTextureNode(spShadingNode):
    """!TextureNode describes a texture source node in a shading network."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingTextureNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingTextureNode:
        """! * 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 
        """

        return _Simplygon.spShadingTextureNode_SafeCast(other)

    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingTextureNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingTextureNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingTextureNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingTextureNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingTextureNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingTextureNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingTextureNode_GetDefaultParameterAlpha(self, parameter_id)


    def SetTextureName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingTextureNode_SetTextureName(self, value)


    def GetTextureName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spShadingTextureNode_GetTextureName(self)


    def SetTexCoordName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingTextureNode_SetTexCoordName(self, value)


    def GetTexCoordName(self) -> str:
        """! * 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. 
         *  
        """

        return _Simplygon.spShadingTextureNode_GetTexCoordName(self)


    def SetTexCoordLevel(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingTextureNode_SetTexCoordLevel(self, value)


    def GetTexCoordLevel(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spShadingTextureNode_GetTexCoordLevel(self)


    def SetUseSRGB(self, value: bool) -> None:
        """! * The use of sRGB when decoding the texture into an RGBA value. 
         * @param value The flag to use sRGB. 
        """

        return _Simplygon.spShadingTextureNode_SetUseSRGB(self, value)


    def GetUseSRGB(self) -> bool:
        """! * The use of sRGB when decoding the texture into an RGBA value. 
        """

        return _Simplygon.spShadingTextureNode_GetUseSRGB(self)


    def SetTileU(self, value: float) -> None:
        """! * The TileU value, which is multiplied into the U-coordinate when sampling. 
         * @param value The new value. 
        """

        return _Simplygon.spShadingTextureNode_SetTileU(self, value)


    def GetTileU(self) -> float:
        """! * The TileU value, which is multiplied into the U-coordinate when sampling. 
        """

        return _Simplygon.spShadingTextureNode_GetTileU(self)


    def SetTileV(self, value: float) -> None:
        """! * The TileV value, which is multiplied into the U-coordinate when sampling. 
         * @param value The new value. 
        """

        return _Simplygon.spShadingTextureNode_SetTileV(self, value)


    def GetTileV(self) -> float:
        """! * The TileV value, which is multiplied into the U-coordinate when sampling. 
        """

        return _Simplygon.spShadingTextureNode_GetTileV(self)


    def SetOffsetU(self, value: float) -> None:
        """! * The OffsetU value, which is will be added to the U-coordinate when sampling. 
         * @param value The new value. 
        """

        return _Simplygon.spShadingTextureNode_SetOffsetU(self, value)


    def GetOffsetU(self) -> float:
        """! * The OffsetU value, which is will be added to the U-coordinate when sampling. 
         *  
        """

        return _Simplygon.spShadingTextureNode_GetOffsetU(self)


    def SetOffsetV(self, value: float) -> None:
        """! * The OffsetV value, which is will be added to the V-coordinate when sampling. 
         * @param value The new value. 
        """

        return _Simplygon.spShadingTextureNode_SetOffsetV(self, value)


    def GetOffsetV(self) -> float:
        """! * The OffsetV value, which is will be added to the V-coordinate when sampling. 
         *  
        """

        return _Simplygon.spShadingTextureNode_GetOffsetV(self)


    def SetTextureWrapMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingTextureNode_SetTextureWrapMode(self, value)


    def GetTextureWrapMode(self):
        """! * 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. 
        """

        return _Simplygon.spShadingTextureNode_GetTextureWrapMode(self)


    def SetTextureWrapModeU(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingTextureNode_SetTextureWrapModeU(self, value)


    def GetTextureWrapModeU(self):
        """! * The texture wrap mode in U direction, which determines what happens to texture 
         * samples outside the 0-1 range. 
        """

        return _Simplygon.spShadingTextureNode_GetTextureWrapModeU(self)


    def SetTextureWrapModeV(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingTextureNode_SetTextureWrapModeV(self, value)


    def GetTextureWrapModeV(self):
        """! * The texture wrap mode in V direction, which determines what happens to texture 
         * samples outside the 0-1 range. 
        """

        return _Simplygon.spShadingTextureNode_GetTextureWrapModeV(self)


    def SetRotation(self, value: float) -> None:
        """! * The rotation value, which is used to rotate the UV coordinates when sampling. 
         * @param value The rotation value. 
        """

        return _Simplygon.spShadingTextureNode_SetRotation(self, value)


    def GetRotation(self) -> float:
        """! * The rotation value, which is used to rotate the UV coordinates when sampling. 
         *  
        """

        return _Simplygon.spShadingTextureNode_GetRotation(self)

    __swig_destroy__ = _Simplygon.delete_spShadingTextureNode

_Simplygon.spShadingTextureNode_swigregister(spShadingTextureNode)

def spShadingTextureNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingTextureNode_IsClassA(type)

def spShadingTextureNode_SafeCast(other: spObject) -> spShadingTextureNode:
    """! * 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 
    """

    return _Simplygon.spShadingTextureNode_SafeCast(other)

class spShadingSwizzlingNode(spShadingFilterNode):
    """!SwizzlingNode describes a node that can remap the input to the specified output."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingSwizzlingNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingSwizzlingNode:
        """! * 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 
        """

        return _Simplygon.spShadingSwizzlingNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingSwizzlingNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingSwizzlingNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingSwizzlingNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingSwizzlingNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingSwizzlingNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingSwizzlingNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingSwizzlingNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingSwizzlingNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingSwizzlingNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingSwizzlingNode_GetDefaultParameterAlpha(self, parameter_id)


    def SetRedComponent(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingSwizzlingNode_SetRedComponent(self, value)


    def GetRedComponent(self) -> int:
        """! * The component index in the input color that Red component will be copied from. 
         *  
        """

        return _Simplygon.spShadingSwizzlingNode_GetRedComponent(self)


    def SetGreenComponent(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingSwizzlingNode_SetGreenComponent(self, value)


    def GetGreenComponent(self) -> int:
        """! * The component index in the input color that Green component will be copied from. 
         *  
        """

        return _Simplygon.spShadingSwizzlingNode_GetGreenComponent(self)


    def SetBlueComponent(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingSwizzlingNode_SetBlueComponent(self, value)


    def GetBlueComponent(self) -> int:
        """! * The component index in the input color that Blue component will be copied from. 
         *  
        """

        return _Simplygon.spShadingSwizzlingNode_GetBlueComponent(self)


    def SetAlphaComponent(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingSwizzlingNode_SetAlphaComponent(self, value)


    def GetAlphaComponent(self) -> int:
        """! * The component index in the input color that Alpha component will be copied from. 
         *  
        """

        return _Simplygon.spShadingSwizzlingNode_GetAlphaComponent(self)

    __swig_destroy__ = _Simplygon.delete_spShadingSwizzlingNode

_Simplygon.spShadingSwizzlingNode_swigregister(spShadingSwizzlingNode)

def spShadingSwizzlingNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingSwizzlingNode_IsClassA(type)

def spShadingSwizzlingNode_SafeCast(other: spObject) -> spShadingSwizzlingNode:
    """! * 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 
    """

    return _Simplygon.spShadingSwizzlingNode_SafeCast(other)

class spShadingColorNode(spShadingNode):
    """!ColorNode describes a single color source node in a shading network"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingColorNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingColorNode:
        """! * 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 
        """

        return _Simplygon.spShadingColorNode_SafeCast(other)

    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingColorNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingColorNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingColorNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingColorNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingColorNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingColorNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingColorNode_GetDefaultParameterAlpha(self, parameter_id)


    def SetColor(self, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingColorNode_SetColor(self, r, g, b, a)

    __swig_destroy__ = _Simplygon.delete_spShadingColorNode

_Simplygon.spShadingColorNode_swigregister(spShadingColorNode)

def spShadingColorNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingColorNode_IsClassA(type)

def spShadingColorNode_SafeCast(other: spObject) -> spShadingColorNode:
    """! * 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 
    """

    return _Simplygon.spShadingColorNode_SafeCast(other)

class spShadingAddNode(spShadingFilterNode):
    """!AddNode describes a single addition shading node in a shading network. Input 1 and 2 are added per-component to produce the output."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingAddNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingAddNode:
        """! * 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 
        """

        return _Simplygon.spShadingAddNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingAddNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingAddNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingAddNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingAddNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingAddNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingAddNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingAddNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingAddNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingAddNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingAddNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingAddNode

_Simplygon.spShadingAddNode_swigregister(spShadingAddNode)

def spShadingAddNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingAddNode_IsClassA(type)

def spShadingAddNode_SafeCast(other: spObject) -> spShadingAddNode:
    """! * 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 
    """

    return _Simplygon.spShadingAddNode_SafeCast(other)

class spShadingSubtractNode(spShadingFilterNode):
    """!SubtractNode describes a single subtracting shading node in a shading network. Input 2 is subtracted from input 1 per-component."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingSubtractNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingSubtractNode:
        """! * 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 
        """

        return _Simplygon.spShadingSubtractNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingSubtractNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingSubtractNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingSubtractNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingSubtractNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingSubtractNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingSubtractNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingSubtractNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingSubtractNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingSubtractNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingSubtractNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingSubtractNode

_Simplygon.spShadingSubtractNode_swigregister(spShadingSubtractNode)

def spShadingSubtractNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingSubtractNode_IsClassA(type)

def spShadingSubtractNode_SafeCast(other: spObject) -> spShadingSubtractNode:
    """! * 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 
    """

    return _Simplygon.spShadingSubtractNode_SafeCast(other)

class spShadingMultiplyNode(spShadingFilterNode):
    """!MultiplyNode describes a single multiplying shading node in a shading network. Input 1 and Input 2 is multiplied per-component."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingMultiplyNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingMultiplyNode:
        """! * 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 
        """

        return _Simplygon.spShadingMultiplyNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingMultiplyNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingMultiplyNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingMultiplyNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingMultiplyNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingMultiplyNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingMultiplyNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingMultiplyNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingMultiplyNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingMultiplyNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingMultiplyNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingMultiplyNode

_Simplygon.spShadingMultiplyNode_swigregister(spShadingMultiplyNode)

def spShadingMultiplyNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingMultiplyNode_IsClassA(type)

def spShadingMultiplyNode_SafeCast(other: spObject) -> spShadingMultiplyNode:
    """! * 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 
    """

    return _Simplygon.spShadingMultiplyNode_SafeCast(other)

class spShadingColorCorrectionNode(spShadingFilterNode):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingColorCorrectionNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingColorCorrectionNode:
        """! * 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 
        """

        return _Simplygon.spShadingColorCorrectionNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingColorCorrectionNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingColorCorrectionNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingColorCorrectionNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingColorCorrectionNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingColorCorrectionNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingColorCorrectionNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingColorCorrectionNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingColorCorrectionNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingColorCorrectionNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingColorCorrectionNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingColorCorrectionNode

_Simplygon.spShadingColorCorrectionNode_swigregister(spShadingColorCorrectionNode)

def spShadingColorCorrectionNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingColorCorrectionNode_IsClassA(type)

def spShadingColorCorrectionNode_SafeCast(other: spObject) -> spShadingColorCorrectionNode:
    """! * 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 
    """

    return _Simplygon.spShadingColorCorrectionNode_SafeCast(other)

class spShadingBrightnessContrastNode(spShadingFilterNode):
    """!ShadingBrightnessContrastNode is used to adjust the Brightness & Contrast of Input 1, using Input 2 (r=Brightness change, g=Contrast change). The adjustments are in the range (-1 to 1), where 0 equals no adjustment. """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * The IsClassA function returns true if spShadingBrightnessContrastNode 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 
        """

        return _Simplygon.spShadingBrightnessContrastNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingBrightnessContrastNode:
        """! * SafeCast makes sure the object is of a class that can be cast into a spShadingBrightnessContrastNode 
         * object, and if this is possible, returns the cast object. 
         * @param ptr is the pointer to be cast into a spShadingBrightnessContrastNode handle 
         * @return a handle to the spShadingBrightnessContrastNode object, if the cast can 
         * be made, and a NULL handle otherwise 
        """

        return _Simplygon.spShadingBrightnessContrastNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingBrightnessContrastNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingBrightnessContrastNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingBrightnessContrastNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingBrightnessContrastNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingBrightnessContrastNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingBrightnessContrastNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingBrightnessContrastNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingBrightnessContrastNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingBrightnessContrastNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingBrightnessContrastNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingBrightnessContrastNode

_Simplygon.spShadingBrightnessContrastNode_swigregister(spShadingBrightnessContrastNode)

def spShadingBrightnessContrastNode_IsClassA(type: str) -> bool:
    """! * The IsClassA function returns true if spShadingBrightnessContrastNode 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 
    """

    return _Simplygon.spShadingBrightnessContrastNode_IsClassA(type)

def spShadingBrightnessContrastNode_SafeCast(other: spObject) -> spShadingBrightnessContrastNode:
    """! * SafeCast makes sure the object is of a class that can be cast into a spShadingBrightnessContrastNode 
     * object, and if this is possible, returns the cast object. 
     * @param ptr is the pointer to be cast into a spShadingBrightnessContrastNode handle 
     * @return a handle to the spShadingBrightnessContrastNode object, if the cast can 
     * be made, and a NULL handle otherwise 
    """

    return _Simplygon.spShadingBrightnessContrastNode_SafeCast(other)

class spShadingPowNode(spShadingFilterNode):
    """!This node describes an exponentiation. The output will be Input 1 to the power of Input 2, and it is calculated per-component."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingPowNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingPowNode:
        """! * 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 
        """

        return _Simplygon.spShadingPowNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingPowNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingPowNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingPowNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingPowNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingPowNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingPowNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingPowNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingPowNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingPowNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingPowNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingPowNode

_Simplygon.spShadingPowNode_swigregister(spShadingPowNode)

def spShadingPowNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingPowNode_IsClassA(type)

def spShadingPowNode_SafeCast(other: spObject) -> spShadingPowNode:
    """! * 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 
    """

    return _Simplygon.spShadingPowNode_SafeCast(other)

class spShadingDivideNode(spShadingFilterNode):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingDivideNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingDivideNode:
        """! * 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 
        """

        return _Simplygon.spShadingDivideNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingDivideNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingDivideNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingDivideNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingDivideNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingDivideNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingDivideNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingDivideNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingDivideNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingDivideNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingDivideNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingDivideNode

_Simplygon.spShadingDivideNode_swigregister(spShadingDivideNode)

def spShadingDivideNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingDivideNode_IsClassA(type)

def spShadingDivideNode_SafeCast(other: spObject) -> spShadingDivideNode:
    """! * 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 
    """

    return _Simplygon.spShadingDivideNode_SafeCast(other)

class spShadingClampNode(spShadingFilterNode):
    """!ClampNode describes a single clamp shading node in a shading network. Input 1 is clamped per-component between Input 2 and 3."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingClampNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingClampNode:
        """! * 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 
        """

        return _Simplygon.spShadingClampNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingClampNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingClampNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingClampNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingClampNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingClampNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingClampNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingClampNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingClampNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingClampNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingClampNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingClampNode

_Simplygon.spShadingClampNode_swigregister(spShadingClampNode)

def spShadingClampNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingClampNode_IsClassA(type)

def spShadingClampNode_SafeCast(other: spObject) -> spShadingClampNode:
    """! * 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 
    """

    return _Simplygon.spShadingClampNode_SafeCast(other)

class spShadingMaxNode(spShadingFilterNode):
    """!MaxNode describes a single max shading node in a shading network. The output has the per-channel max values of the two inputs."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingMaxNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingMaxNode:
        """! * 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 
        """

        return _Simplygon.spShadingMaxNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingMaxNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingMaxNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingMaxNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingMaxNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingMaxNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingMaxNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingMaxNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingMaxNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingMaxNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingMaxNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingMaxNode

_Simplygon.spShadingMaxNode_swigregister(spShadingMaxNode)

def spShadingMaxNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingMaxNode_IsClassA(type)

def spShadingMaxNode_SafeCast(other: spObject) -> spShadingMaxNode:
    """! * 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 
    """

    return _Simplygon.spShadingMaxNode_SafeCast(other)

class spShadingMinNode(spShadingFilterNode):
    """!MinNode describes a single min shading node in a shading network. The output has the per-channel min values of the two inputs."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingMinNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingMinNode:
        """! * 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 
        """

        return _Simplygon.spShadingMinNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingMinNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingMinNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingMinNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingMinNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingMinNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingMinNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingMinNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingMinNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingMinNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingMinNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingMinNode

_Simplygon.spShadingMinNode_swigregister(spShadingMinNode)

def spShadingMinNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingMinNode_IsClassA(type)

def spShadingMinNode_SafeCast(other: spObject) -> spShadingMinNode:
    """! * 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 
    """

    return _Simplygon.spShadingMinNode_SafeCast(other)

class spShadingStepNode(spShadingFilterNode):
    """!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"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingStepNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingStepNode:
        """! * 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 
        """

        return _Simplygon.spShadingStepNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingStepNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingStepNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingStepNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingStepNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingStepNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingStepNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingStepNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingStepNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingStepNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingStepNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingStepNode

_Simplygon.spShadingStepNode_swigregister(spShadingStepNode)

def spShadingStepNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingStepNode_IsClassA(type)

def spShadingStepNode_SafeCast(other: spObject) -> spShadingStepNode:
    """! * 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 
    """

    return _Simplygon.spShadingStepNode_SafeCast(other)

class spShadingEqualNode(spShadingFilterNode):
    """!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"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingEqualNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingEqualNode:
        """! * 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 
        """

        return _Simplygon.spShadingEqualNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingEqualNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingEqualNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingEqualNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingEqualNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingEqualNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingEqualNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingEqualNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingEqualNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingEqualNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingEqualNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingEqualNode

_Simplygon.spShadingEqualNode_swigregister(spShadingEqualNode)

def spShadingEqualNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingEqualNode_IsClassA(type)

def spShadingEqualNode_SafeCast(other: spObject) -> spShadingEqualNode:
    """! * 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 
    """

    return _Simplygon.spShadingEqualNode_SafeCast(other)

class spShadingNotEqualNode(spShadingFilterNode):
    """!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"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingNotEqualNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingNotEqualNode:
        """! * 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 
        """

        return _Simplygon.spShadingNotEqualNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingNotEqualNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingNotEqualNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingNotEqualNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingNotEqualNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingNotEqualNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingNotEqualNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingNotEqualNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingNotEqualNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingNotEqualNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingNotEqualNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingNotEqualNode

_Simplygon.spShadingNotEqualNode_swigregister(spShadingNotEqualNode)

def spShadingNotEqualNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingNotEqualNode_IsClassA(type)

def spShadingNotEqualNode_SafeCast(other: spObject) -> spShadingNotEqualNode:
    """! * 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 
    """

    return _Simplygon.spShadingNotEqualNode_SafeCast(other)

class spShadingVertexColorNode(spShadingNode):
    """!VertexColorNode describes a vertex color source node in a shading network."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingVertexColorNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingVertexColorNode:
        """! * 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 
        """

        return _Simplygon.spShadingVertexColorNode_SafeCast(other)

    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingVertexColorNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingVertexColorNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingVertexColorNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingVertexColorNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingVertexColorNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingVertexColorNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingVertexColorNode_GetDefaultParameterAlpha(self, parameter_id)


    def SetVertexColorIndex(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingVertexColorNode_SetVertexColorIndex(self, value)


    def GetVertexColorIndex(self) -> int:
        """! * The vertex color index. This is the vertex color field in the geometry which 
         * will be used for casting with this node. 
        """

        return _Simplygon.spShadingVertexColorNode_GetVertexColorIndex(self)


    def SetVertexColorSet(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingVertexColorNode_SetVertexColorSet(self, value)


    def GetVertexColorSet(self) -> str:
        """! * The vertex color set. This is the vertex color field in the geometry which will 
         * be used for casting with this node. 
        """

        return _Simplygon.spShadingVertexColorNode_GetVertexColorSet(self)

    __swig_destroy__ = _Simplygon.delete_spShadingVertexColorNode

_Simplygon.spShadingVertexColorNode_swigregister(spShadingVertexColorNode)

def spShadingVertexColorNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingVertexColorNode_IsClassA(type)

def spShadingVertexColorNode_SafeCast(other: spObject) -> spShadingVertexColorNode:
    """! * 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 
    """

    return _Simplygon.spShadingVertexColorNode_SafeCast(other)

class spShadingInterpolateNode(spShadingFilterNode):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingInterpolateNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingInterpolateNode:
        """! * 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 
        """

        return _Simplygon.spShadingInterpolateNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingInterpolateNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingInterpolateNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingInterpolateNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingInterpolateNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingInterpolateNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingInterpolateNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingInterpolateNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingInterpolateNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingInterpolateNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingInterpolateNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingInterpolateNode

_Simplygon.spShadingInterpolateNode_swigregister(spShadingInterpolateNode)

def spShadingInterpolateNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingInterpolateNode_IsClassA(type)

def spShadingInterpolateNode_SafeCast(other: spObject) -> spShadingInterpolateNode:
    """! * 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 
    """

    return _Simplygon.spShadingInterpolateNode_SafeCast(other)

class spShadingCustomNode(spShadingFilterNode):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingCustomNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingCustomNode:
        """! * 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 
        """

        return _Simplygon.spShadingCustomNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingCustomNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingCustomNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingCustomNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingCustomNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingCustomNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingCustomNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingCustomNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingCustomNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingCustomNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingCustomNode_GetDefaultParameterAlpha(self, parameter_id)


    def SetInputCount(self, value: int) -> None:
        """! * The number of inputs for this custom node. 
         * @param value The number of inputs for this custom node. 
        """

        return _Simplygon.spShadingCustomNode_SetInputCount(self, value)


    def GetInputCount(self) -> int:
        """! * The number of inputs for this custom node. 
        """

        return _Simplygon.spShadingCustomNode_GetInputCount(self)


    def GetInputValue(self, value: int):
        """! * Get color value from node input index. 
         * @param value Index of node inputs. 
        """

        return _Simplygon.spShadingCustomNode_GetInputValue(self, value)


    def SetCustomShaderCode(self, value: str) -> None:
        """! * Set custom shader code from OnShadingCustomNodeGenerateShaderCode observer method. 
         * @param value Custom shader code. 
        """

        return _Simplygon.spShadingCustomNode_SetCustomShaderCode(self, value)

    __swig_destroy__ = _Simplygon.delete_spShadingCustomNode

_Simplygon.spShadingCustomNode_swigregister(spShadingCustomNode)

def spShadingCustomNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingCustomNode_IsClassA(type)

def spShadingCustomNode_SafeCast(other: spObject) -> spShadingCustomNode:
    """! * 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 
    """

    return _Simplygon.spShadingCustomNode_SafeCast(other)

class spShadingLayeredBlendNode(spShadingFilterNode):
    """!LayeredBlendNode is a node with an arbitrary number of inputs that can be blended differently."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingLayeredBlendNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingLayeredBlendNode:
        """! * 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 
        """

        return _Simplygon.spShadingLayeredBlendNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingLayeredBlendNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingLayeredBlendNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingLayeredBlendNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingLayeredBlendNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingLayeredBlendNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingLayeredBlendNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingLayeredBlendNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingLayeredBlendNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingLayeredBlendNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingLayeredBlendNode_GetDefaultParameterAlpha(self, parameter_id)


    def SetInputCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingLayeredBlendNode_SetInputCount(self, value)


    def GetInputCount(self) -> int:
        """! * The number of inputs for this node. 
        """

        return _Simplygon.spShadingLayeredBlendNode_GetInputCount(self)


    def SetPerInputBlendType(self, _input: int, _blendType) -> None:
        """! * The blend type per input connection. 
         * @param _input The input index. 
         * @param _blendType The blend type to use. 
        """

        return _Simplygon.spShadingLayeredBlendNode_SetPerInputBlendType(self, _input, _blendType)


    def GetPerInputBlendType(self, _input: int):
        """! * The blend type per input connection. 
         * @param _input The input index. 
         * @return The input blend type 
        """

        return _Simplygon.spShadingLayeredBlendNode_GetPerInputBlendType(self, _input)

    __swig_destroy__ = _Simplygon.delete_spShadingLayeredBlendNode

_Simplygon.spShadingLayeredBlendNode_swigregister(spShadingLayeredBlendNode)

def spShadingLayeredBlendNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingLayeredBlendNode_IsClassA(type)

def spShadingLayeredBlendNode_SafeCast(other: spObject) -> spShadingLayeredBlendNode:
    """! * 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 
    """

    return _Simplygon.spShadingLayeredBlendNode_SafeCast(other)

class spShadingNormalize3Node(spShadingFilterNode):
    """!This node describes an normalization of the x,y,z components of the input."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingNormalize3Node_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingNormalize3Node:
        """! * 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 
        """

        return _Simplygon.spShadingNormalize3Node_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingNormalize3Node_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingNormalize3Node_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingNormalize3Node_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingNormalize3Node_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingNormalize3Node_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingNormalize3Node_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingNormalize3Node_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingNormalize3Node_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingNormalize3Node_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingNormalize3Node_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingNormalize3Node

_Simplygon.spShadingNormalize3Node_swigregister(spShadingNormalize3Node)

def spShadingNormalize3Node_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingNormalize3Node_IsClassA(type)

def spShadingNormalize3Node_SafeCast(other: spObject) -> spShadingNormalize3Node:
    """! * 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 
    """

    return _Simplygon.spShadingNormalize3Node_SafeCast(other)

class spShadingSqrtNode(spShadingFilterNode):
    """!This node describes a square root calculation. The output will be the per-component square root of input 1"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingSqrtNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingSqrtNode:
        """! * 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 
        """

        return _Simplygon.spShadingSqrtNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingSqrtNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingSqrtNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingSqrtNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingSqrtNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingSqrtNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingSqrtNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingSqrtNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingSqrtNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingSqrtNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingSqrtNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingSqrtNode

_Simplygon.spShadingSqrtNode_swigregister(spShadingSqrtNode)

def spShadingSqrtNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingSqrtNode_IsClassA(type)

def spShadingSqrtNode_SafeCast(other: spObject) -> spShadingSqrtNode:
    """! * 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 
    """

    return _Simplygon.spShadingSqrtNode_SafeCast(other)

class spShadingDot3Node(spShadingFilterNode):
    """!This node describes an dot of the x,y,z components of the inputs."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingDot3Node_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingDot3Node:
        """! * 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 
        """

        return _Simplygon.spShadingDot3Node_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingDot3Node_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingDot3Node_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingDot3Node_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingDot3Node_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingDot3Node_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingDot3Node_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingDot3Node_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingDot3Node_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingDot3Node_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingDot3Node_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingDot3Node

_Simplygon.spShadingDot3Node_swigregister(spShadingDot3Node)

def spShadingDot3Node_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingDot3Node_IsClassA(type)

def spShadingDot3Node_SafeCast(other: spObject) -> spShadingDot3Node:
    """! * 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 
    """

    return _Simplygon.spShadingDot3Node_SafeCast(other)

class spShadingCross3Node(spShadingFilterNode):
    """!This node describes the cross of the x,y,z components of the input."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingCross3Node_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingCross3Node:
        """! * 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 
        """

        return _Simplygon.spShadingCross3Node_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingCross3Node_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingCross3Node_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingCross3Node_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingCross3Node_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingCross3Node_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingCross3Node_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingCross3Node_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingCross3Node_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingCross3Node_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingCross3Node_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingCross3Node

_Simplygon.spShadingCross3Node_swigregister(spShadingCross3Node)

def spShadingCross3Node_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingCross3Node_IsClassA(type)

def spShadingCross3Node_SafeCast(other: spObject) -> spShadingCross3Node:
    """! * 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 
    """

    return _Simplygon.spShadingCross3Node_SafeCast(other)

class spShadingCosNode(spShadingFilterNode):
    """!This node describes cosine of the x,y,z,w components of the input."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingCosNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingCosNode:
        """! * 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 
        """

        return _Simplygon.spShadingCosNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingCosNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingCosNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingCosNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingCosNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingCosNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingCosNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingCosNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingCosNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingCosNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingCosNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingCosNode

_Simplygon.spShadingCosNode_swigregister(spShadingCosNode)

def spShadingCosNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingCosNode_IsClassA(type)

def spShadingCosNode_SafeCast(other: spObject) -> spShadingCosNode:
    """! * 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 
    """

    return _Simplygon.spShadingCosNode_SafeCast(other)

class spShadingSinNode(spShadingFilterNode):
    """!This node describes Sin of the x,y,z components of the input."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingSinNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingSinNode:
        """! * 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 
        """

        return _Simplygon.spShadingSinNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingSinNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingSinNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingSinNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingSinNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingSinNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingSinNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingSinNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingSinNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingSinNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingSinNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingSinNode

_Simplygon.spShadingSinNode_swigregister(spShadingSinNode)

def spShadingSinNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingSinNode_IsClassA(type)

def spShadingSinNode_SafeCast(other: spObject) -> spShadingSinNode:
    """! * 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 
    """

    return _Simplygon.spShadingSinNode_SafeCast(other)

class spShadingGreaterThanNode(spShadingFilterNode):
    """!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"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingGreaterThanNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingGreaterThanNode:
        """! * 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 
        """

        return _Simplygon.spShadingGreaterThanNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingGreaterThanNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingGreaterThanNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingGreaterThanNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingGreaterThanNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingGreaterThanNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingGreaterThanNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingGreaterThanNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingGreaterThanNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingGreaterThanNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingGreaterThanNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingGreaterThanNode

_Simplygon.spShadingGreaterThanNode_swigregister(spShadingGreaterThanNode)

def spShadingGreaterThanNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingGreaterThanNode_IsClassA(type)

def spShadingGreaterThanNode_SafeCast(other: spObject) -> spShadingGreaterThanNode:
    """! * 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 
    """

    return _Simplygon.spShadingGreaterThanNode_SafeCast(other)

class spShadingLessThanNode(spShadingFilterNode):
    """!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"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingLessThanNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingLessThanNode:
        """! * 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 
        """

        return _Simplygon.spShadingLessThanNode_SafeCast(other)

    def SetInput(self, input_id: int, input_node: spShadingNode) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShadingLessThanNode_SetInput(self, input_id, input_node)


    def GetInput(self, input_id: int) -> spShadingNode:
        """! * The default node inputs. 
         * @param input_id The id of the input to be fetched. 
         * @return The input node 
        """

        return _Simplygon.spShadingLessThanNode_GetInput(self, input_id)


    def GetParameterIsInputable(self, param_id: int) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingLessThanNode_GetParameterIsInputable(self, param_id)


    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingLessThanNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingLessThanNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingLessThanNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingLessThanNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingLessThanNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingLessThanNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingLessThanNode_GetDefaultParameterAlpha(self, parameter_id)

    __swig_destroy__ = _Simplygon.delete_spShadingLessThanNode

_Simplygon.spShadingLessThanNode_swigregister(spShadingLessThanNode)

def spShadingLessThanNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingLessThanNode_IsClassA(type)

def spShadingLessThanNode_SafeCast(other: spObject) -> spShadingLessThanNode:
    """! * 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 
    """

    return _Simplygon.spShadingLessThanNode_SafeCast(other)

class spShadingGeometryFieldNode(spShadingNode):
    """!Geometry field node describes a source node for geometry field data in a shading network, such as normals and tangents."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShadingGeometryFieldNode_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShadingGeometryFieldNode:
        """! * 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 
        """

        return _Simplygon.spShadingGeometryFieldNode_SafeCast(other)

    def GetParameterCount(self) -> int:
        """! * The input count. 
         * @return The input count 
        """

        return _Simplygon.spShadingGeometryFieldNode_GetParameterCount(self)


    def GetParameterName(self, parameter_id: int) -> str:
        """! * The name of a parameter. 
         * @param parameter_id The id of the input to fetch the name of. 
         * @return The name of the parameter 
        """

        return _Simplygon.spShadingGeometryFieldNode_GetParameterName(self, parameter_id)


    def SetDefaultParameter(self, parameter_id: int, r: float, g: float, b: float, a: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingGeometryFieldNode_SetDefaultParameter(self, parameter_id, r, g, b, a)


    def GetDefaultParameterRed(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Red default parameter value 
        """

        return _Simplygon.spShadingGeometryFieldNode_GetDefaultParameterRed(self, parameter_id)


    def GetDefaultParameterGreen(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Green default parameter value 
        """

        return _Simplygon.spShadingGeometryFieldNode_GetDefaultParameterGreen(self, parameter_id)


    def GetDefaultParameterBlue(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Blue default parameter value 
        """

        return _Simplygon.spShadingGeometryFieldNode_GetDefaultParameterBlue(self, parameter_id)


    def GetDefaultParameterAlpha(self, parameter_id: int) -> float:
        """! * The default parameter values. 
         * @param parameter_id The id of the input to be fetched. 
         * @return The Alpha default parameter value 
        """

        return _Simplygon.spShadingGeometryFieldNode_GetDefaultParameterAlpha(self, parameter_id)


    def SetFieldType(self, value: int) -> None:
        """! * The geometry field type to sample. 
         * @param value Field type to sample. 
        """

        return _Simplygon.spShadingGeometryFieldNode_SetFieldType(self, value)


    def GetFieldType(self):
        """! * The geometry field type to sample. 
        """

        return _Simplygon.spShadingGeometryFieldNode_GetFieldType(self)


    def SetFieldIndex(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingGeometryFieldNode_SetFieldIndex(self, value)


    def GetFieldIndex(self) -> int:
        """! * The geometry field index, for those fields that have multiple layers. If both 
         * name and index is set, the name has priority. 
        """

        return _Simplygon.spShadingGeometryFieldNode_GetFieldIndex(self)


    def SetFieldName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spShadingGeometryFieldNode_SetFieldName(self, value)


    def GetFieldName(self) -> str:
        """! * The geometry field name, for those fields that have multiple layers. If both 
         * name and index is set, the name has priority. 
        """

        return _Simplygon.spShadingGeometryFieldNode_GetFieldName(self)

    __swig_destroy__ = _Simplygon.delete_spShadingGeometryFieldNode

_Simplygon.spShadingGeometryFieldNode_swigregister(spShadingGeometryFieldNode)

def spShadingGeometryFieldNode_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShadingGeometryFieldNode_IsClassA(type)

def spShadingGeometryFieldNode_SafeCast(other: spObject) -> spShadingGeometryFieldNode:
    """! * 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 
    """

    return _Simplygon.spShadingGeometryFieldNode_SafeCast(other)

class spShaderGenerator(spObject):
    """!Given a material, the shader data class keeps the relevant shader data and is able to generate a GLSL/HLSL shader."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spShaderGenerator_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spShaderGenerator:
        """! * 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 
        """

        return _Simplygon.spShaderGenerator_SafeCast(other)

    def SetMaterial(self, value: spMaterial) -> None:
        """! * The material, for which to create a shader. 
         * @param value The material object. 
        """

        return _Simplygon.spShaderGenerator_SetMaterial(self, value)


    def GetMaterial(self) -> spMaterial:
        """! * The material, for which to create a shader. 
        """

        return _Simplygon.spShaderGenerator_GetMaterial(self)


    def SetIdentifersPrefix(self, value: str) -> None:
        """! * The prefix for all global identifiers. 
         * @param value The prefix string. 
        """

        return _Simplygon.spShaderGenerator_SetIdentifersPrefix(self, value)


    def GetIdentifersPrefix(self) -> str:
        """! * The prefix for all global identifiers. 
        """

        return _Simplygon.spShaderGenerator_GetIdentifersPrefix(self)


    def SetGenerateFullShader(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spShaderGenerator_SetGenerateFullShader(self, value)


    def GetGenerateFullShader(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShaderGenerator_GetGenerateFullShader(self)


    def SetGenerateTextureSamplerData(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spShaderGenerator_SetGenerateTextureSamplerData(self, value)


    def GetGenerateTextureSamplerData(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spShaderGenerator_GetGenerateTextureSamplerData(self)


    def GenerateShaderData(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spShaderGenerator_GenerateShaderData(self)


    def GetHLSLCode(self) -> str:
        """! * Returns a string containing the HLSL shader code. GenerateShader must have been 
         * called prior to this call. 
        """

        return _Simplygon.spShaderGenerator_GetHLSLCode(self)


    def GetGLSLVertexCode(self) -> str:
        """! * 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. 
         *  
        """

        return _Simplygon.spShaderGenerator_GetGLSLVertexCode(self)


    def GetGLSLFragmentCode(self) -> str:
        """! * Returns a string containing the GLSL fragment shader GenerateShader must have 
         * been called prior to this call. 
        """

        return _Simplygon.spShaderGenerator_GetGLSLFragmentCode(self)


    def GetShaderInputTexturePathsCount(self) -> int:
        """! * 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 
        """

        return _Simplygon.spShaderGenerator_GetShaderInputTexturePathsCount(self)


    def GetShaderInputTexturePath(self, index: int) -> str:
        """! * 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 
        """

        return _Simplygon.spShaderGenerator_GetShaderInputTexturePath(self, index)


    def GetShaderInputUVSetsCount(self) -> int:
        """! * 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 
        """

        return _Simplygon.spShaderGenerator_GetShaderInputUVSetsCount(self)


    def GetShaderInputUVSet(self, index: int) -> str:
        """! * 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 
        """

        return _Simplygon.spShaderGenerator_GetShaderInputUVSet(self, index)


    def GetShaderInputUVIndex(self, uvset: str) -> int:
        """! * 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. 
        """

        return _Simplygon.spShaderGenerator_GetShaderInputUVIndex(self, uvset)


    def GetShaderInputVertexColorsCount(self) -> int:
        """! * 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 
        """

        return _Simplygon.spShaderGenerator_GetShaderInputVertexColorsCount(self)


    def GetShaderInputVertexColor(self, index: int) -> str:
        """! * 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 
        """

        return _Simplygon.spShaderGenerator_GetShaderInputVertexColor(self, index)


    def GetShaderInputVertexColorsIndex(self, colorset: str) -> int:
        """! * 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. 
        """

        return _Simplygon.spShaderGenerator_GetShaderInputVertexColorsIndex(self, colorset)


    def UnloadData(self) -> None:
        """! * Unloads all shader data and resets it. 
        """

        return _Simplygon.spShaderGenerator_UnloadData(self)

    __swig_destroy__ = _Simplygon.delete_spShaderGenerator

_Simplygon.spShaderGenerator_swigregister(spShaderGenerator)

def spShaderGenerator_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spShaderGenerator_IsClassA(type)

def spShaderGenerator_SafeCast(other: spObject) -> spShaderGenerator:
    """! * 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 
    """

    return _Simplygon.spShaderGenerator_SafeCast(other)

class spAggregationProcessor(spProcessingObject):
    """!AggregationProcessor combines all specified geometries in the scene into one geometry. All materials are combined and receive a new shared texture atlas."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spAggregationProcessor_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spAggregationProcessor:
        """! * 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 
        """

        return _Simplygon.spAggregationProcessor_SafeCast(other)

    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spAggregationProcessor_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spAggregationProcessor_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spAggregationProcessor_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spAggregationProcessor_ToJSON(self)


    def SetScene(self, value: spScene) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationProcessor_SetScene(self, value)


    def GetScene(self) -> spScene:
        """! * 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. 
        """

        return _Simplygon.spAggregationProcessor_GetScene(self)


    def GetMappingImage(self) -> spMappingImage:
        """! * 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. 
        """

        return _Simplygon.spAggregationProcessor_GetMappingImage(self)


    def GetMappingImageForImageIndex(self, OutputMaterialId: int) -> spMappingImage:
        """! * 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. 
        """

        return _Simplygon.spAggregationProcessor_GetMappingImageForImageIndex(self, OutputMaterialId)


    def GetAggregationSettings(self) -> spAggregationSettings:
        """! * The settings for the combining process. 
        """

        return _Simplygon.spAggregationProcessor_GetAggregationSettings(self)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * The settings for the image mapping process. 
        """

        return _Simplygon.spAggregationProcessor_GetMappingImageSettings(self)


    def GetVisibilitySettings(self) -> spVisibilitySettings:
        """! * 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 _Simplygon.spAggregationProcessor_GetVisibilitySettings(self)


    def GetGeometryCullingSettings(self) -> spGeometryCullingSettings:
        """! * The settings for handling geometry culling. 
        """

        return _Simplygon.spAggregationProcessor_GetGeometryCullingSettings(self)


    def GetVertexWeightSettings(self) -> spVertexWeightSettings:
        """! * The settings for handling visibility weights. 
        """

        return _Simplygon.spAggregationProcessor_GetVertexWeightSettings(self)

    __swig_destroy__ = _Simplygon.delete_spAggregationProcessor

_Simplygon.spAggregationProcessor_swigregister(spAggregationProcessor)

def spAggregationProcessor_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spAggregationProcessor_IsClassA(type)

def spAggregationProcessor_SafeCast(other: spObject) -> spAggregationProcessor:
    """! * 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 
    """

    return _Simplygon.spAggregationProcessor_SafeCast(other)

class spAggregationSettings(spSettingsObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spAggregationSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spAggregationSettings:
        """! * 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 
        """

        return _Simplygon.spAggregationSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spAggregationSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spAggregationSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spAggregationSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spAggregationSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spAggregationSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spAggregationSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spAggregationSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spAggregationSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_SetValidateParameterNames(self, validate)


    def SetProcessSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_SetProcessSelectionSetID(self, value)


    def GetProcessSelectionSetID(self) -> int:
        """! * Which SelectionSet should be processed. If set to -1, all geometries in the scene 
         * will be processed. 
        """

        return _Simplygon.spAggregationSettings_GetProcessSelectionSetID(self)


    def SetProcessSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_SetProcessSelectionSetName(self, value)


    def GetProcessSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_GetProcessSelectionSetName(self)


    def SetKeepUnprocessedSceneMeshes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_SetKeepUnprocessedSceneMeshes(self, value)


    def GetKeepUnprocessedSceneMeshes(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_GetKeepUnprocessedSceneMeshes(self)


    def SetMergeGeometries(self, value: bool) -> None:
        """! * The processor will merge all the geometries in the scene into a single geometry 
         * if this is enabled. 
         * @param value The desired MergeGeometries flag. 
        """

        return _Simplygon.spAggregationSettings_SetMergeGeometries(self, value)


    def GetMergeGeometries(self) -> bool:
        """! * The processor will merge all the geometries in the scene into a single geometry 
         * if this is enabled. 
        """

        return _Simplygon.spAggregationSettings_GetMergeGeometries(self)


    def SetEnableGeometryCulling(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_SetEnableGeometryCulling(self, value)


    def GetEnableGeometryCulling(self) -> bool:
        """! * Enables culling object insides and permits use of GeometryCullingSettings. If 
         * both this and visibility related culling is enabled, this is run first, then 
         * visibility. 
        """

        return _Simplygon.spAggregationSettings_GetEnableGeometryCulling(self)


    def SetGeometryCullingPrecision(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_SetGeometryCullingPrecision(self, value)


    def GetGeometryCullingPrecision(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_GetGeometryCullingPrecision(self)


    def SetSubdivideGeometryBasedOnUVTiles(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_SetSubdivideGeometryBasedOnUVTiles(self, value)


    def GetSubdivideGeometryBasedOnUVTiles(self) -> bool:
        """! * 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)]. 
        """

        return _Simplygon.spAggregationSettings_GetSubdivideGeometryBasedOnUVTiles(self)


    def SetSubdivisionTileSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationSettings_SetSubdivisionTileSize(self, value)


    def GetSubdivisionTileSize(self) -> int:
        """! * The cutting frequency used when SubdivideGeometryBasedOnUVTiles is enabled. 
        """

        return _Simplygon.spAggregationSettings_GetSubdivisionTileSize(self)

    __swig_destroy__ = _Simplygon.delete_spAggregationSettings

_Simplygon.spAggregationSettings_swigregister(spAggregationSettings)

def spAggregationSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spAggregationSettings_IsClassA(type)

def spAggregationSettings_SafeCast(other: spObject) -> spAggregationSettings:
    """! * 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 
    """

    return _Simplygon.spAggregationSettings_SafeCast(other)

class spChartAggregator(spObject):
    """!Computes new texture coordinates for a geometry with overlapping UV charts."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spChartAggregator_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spChartAggregator:
        """! * 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 
        """

        return _Simplygon.spChartAggregator_SafeCast(other)

    def Parameterize(self, geom: spGeometryData, arr: spRealArray) -> bool:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_Parameterize(self, geom, arr)


    def SetInputMaterialCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_SetInputMaterialCount(self, value)


    def GetInputMaterialCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_GetInputMaterialCount(self)


    def SetOutputMaterialCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_SetOutputMaterialCount(self, value)


    def GetOutputMaterialCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_GetOutputMaterialCount(self)


    def SetInputOutputMaterialMapping(self, InMaterialId: int, OutMaterialId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_SetInputOutputMaterialMapping(self, InMaterialId, OutMaterialId)


    def GetInputOutputMaterialMapping(self, InMaterialId: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_GetInputOutputMaterialMapping(self, InMaterialId)


    def SetTextureWidth(self, value: int) -> None:
        """! * The width of the texture to use. 
         * @param value The texture width. 
        """

        return _Simplygon.spChartAggregator_SetTextureWidth(self, value)


    def GetTextureWidth(self) -> int:
        """! * The width of the texture to use. 
        """

        return _Simplygon.spChartAggregator_GetTextureWidth(self)


    def SetTextureWidthForMaterialIndex(self, id: int, value: int) -> None:
        """! * The width of the texture to use. 
         * @param id The output material ID. 
         * @param value The texture width. 
        """

        return _Simplygon.spChartAggregator_SetTextureWidthForMaterialIndex(self, id, value)


    def GetTextureWidthForMaterialIndex(self, id: int) -> int:
        """! * The width of the texture to use. 
         * @param id The output material ID. 
         * @return The current value of texture width. 
        """

        return _Simplygon.spChartAggregator_GetTextureWidthForMaterialIndex(self, id)


    def SetTextureHeight(self, value: int) -> None:
        """! * The height of the texture to use. 
         * @param value The texture height. 
        """

        return _Simplygon.spChartAggregator_SetTextureHeight(self, value)


    def GetTextureHeight(self) -> int:
        """! * The height of the texture to use. 
        """

        return _Simplygon.spChartAggregator_GetTextureHeight(self)


    def SetTextureHeightForMaterialIndex(self, id: int, value: int) -> None:
        """! * The height of the texture to use. 
         * @param id The output material ID. 
         * @param value The texture height. 
        """

        return _Simplygon.spChartAggregator_SetTextureHeightForMaterialIndex(self, id, value)


    def GetTextureHeightForMaterialIndex(self, id: int) -> int:
        """! * The height of the texture to use. 
         * @param id The output material ID. 
         * @return The current value of texture height. 
        """

        return _Simplygon.spChartAggregator_GetTextureHeightForMaterialIndex(self, id)


    def SetGutterSpace(self, value: int) -> None:
        """! * The minimum number of pixels between charts. 
         * @param value The value to which GutterSpace will be set. 
        """

        return _Simplygon.spChartAggregator_SetGutterSpace(self, value)


    def GetGutterSpace(self) -> int:
        """! * The minimum number of pixels between charts. 
        """

        return _Simplygon.spChartAggregator_GetGutterSpace(self)


    def SetGutterSpaceForMaterialIndex(self, id: int, value: int) -> None:
        """! * The minimum number of pixels between charts. 
         * @param id The output material ID. 
         * @param value The value to which GutterSpace will be set. 
        """

        return _Simplygon.spChartAggregator_SetGutterSpaceForMaterialIndex(self, id, value)


    def GetGutterSpaceForMaterialIndex(self, id: int) -> int:
        """! * The minimum number of pixels between charts. 
         * @param id The output material ID. 
         * @return The current value of GutterSpace 
        """

        return _Simplygon.spChartAggregator_GetGutterSpaceForMaterialIndex(self, id)


    def SetUseAutomaticTextureSize(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_SetUseAutomaticTextureSize(self, value)


    def GetUseAutomaticTextureSize(self) -> bool:
        """! * The automatic_texture_size flag. If true, then texture sizes will be computed 
         * for the reduced mesh depending on its pixel size on screen. 
        """

        return _Simplygon.spChartAggregator_GetUseAutomaticTextureSize(self)


    def SetAutomaticTextureSizeMultiplier(self, value: float) -> None:
        """! * A texture dimension length multiplier for the automatic texture size. 
         * @param value The desired multiplier. 
        """

        return _Simplygon.spChartAggregator_SetAutomaticTextureSizeMultiplier(self, value)


    def GetAutomaticTextureSizeMultiplier(self) -> float:
        """! * A texture dimension length multiplier for the automatic texture size. 
        """

        return _Simplygon.spChartAggregator_GetAutomaticTextureSizeMultiplier(self)


    def SetForcePower2Texture(self, value: bool) -> None:
        """! * If UseAutomaticTextureSize is enabled, then force the texture sizes to be a power 
         * of 2. 
         * @param value The desired flag. 
        """

        return _Simplygon.spChartAggregator_SetForcePower2Texture(self, value)


    def GetForcePower2Texture(self) -> bool:
        """! * If UseAutomaticTextureSize is enabled, then force the texture sizes to be a power 
         * of 2. 
        """

        return _Simplygon.spChartAggregator_GetForcePower2Texture(self)


    def SetTexCoordLevel(self, value: int) -> None:
        """! * 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). 
        """

        return _Simplygon.spChartAggregator_SetTexCoordLevel(self, value)


    def GetTexCoordLevel(self) -> int:
        """! * Which TexCoord level to get charts from during re-parameterization. If a TexCoordName 
         * is set, it will override the TexCoordLevel. 
        """

        return _Simplygon.spChartAggregator_GetTexCoordLevel(self)


    def SetTexCoordName(self, value: str) -> None:
        """! * Which TexCoord name to get charts from during re-parameterization. 
         * @param value The name of the TexCoord to use (i.e. 'TexCoord0'-'TexCoord255'). 
         *  
        """

        return _Simplygon.spChartAggregator_SetTexCoordName(self, value)


    def GetTexCoordName(self) -> str:
        """! * Which TexCoord name to get charts from during re-parameterization. 
        """

        return _Simplygon.spChartAggregator_GetTexCoordName(self)


    def SetChartAggregatorMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_SetChartAggregatorMode(self, value)


    def GetChartAggregatorMode(self):
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_GetChartAggregatorMode(self)


    def SetSurfaceAreaScale(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_SetSurfaceAreaScale(self, value)


    def GetSurfaceAreaScale(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spChartAggregator_GetSurfaceAreaScale(self)


    def SetSeparateOverlappingCharts(self, value: bool) -> None:
        """! * The Separate Overlapping Charts flag. If charts are overlapping in the original 
         * texture coords, they will be separated. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spChartAggregator_SetSeparateOverlappingCharts(self, value)


    def SetMaterialTable(self, value: spMaterialTable) -> None:
        """! * The scene material table. 
         * @param value The scene material table. 
        """

        return _Simplygon.spChartAggregator_SetMaterialTable(self, value)


    def SetTextureTable(self, value: spTextureTable) -> None:
        """! * The scene texture table. 
         * @param value The scene texture table. 
        """

        return _Simplygon.spChartAggregator_SetTextureTable(self, value)


    def GetKeepOriginalChartSizesTextureWidth(self) -> int:
        """! * If KeepOriginalChartSizes is enabled: calling GetKeepOriginalChartSizesTextureWidth 
         * and GetKeepOriginalChartSizesTextureHeight after parameterization will return 
         * the final texture sizes. 
         * @return The current KeepOriginalChartSizesTextureWidth size. 
        """

        return _Simplygon.spChartAggregator_GetKeepOriginalChartSizesTextureWidth(self)


    def GetKeepOriginalChartSizesTextureWidthForMaterialIndex(self, OutputID: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_GetKeepOriginalChartSizesTextureWidthForMaterialIndex(self, OutputID)


    def GetKeepOriginalChartSizesTextureHeight(self) -> int:
        """! * If KeepOriginalChartSizes is enabled: calling GetKeepOriginalChartSizesTextureWidth 
         * and GetKeepOriginalChartSizesTextureHeight after parameterization will return 
         * the final texture sizes. 
         * @return The current KeepOriginalChartSizesTextureHeight size. 
        """

        return _Simplygon.spChartAggregator_GetKeepOriginalChartSizesTextureHeight(self)


    def GetKeepOriginalChartSizesTextureHeightForMaterialIndex(self, OutputID: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_GetKeepOriginalChartSizesTextureHeightForMaterialIndex(self, OutputID)


    def SetOriginalChartProportionsChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_SetOriginalChartProportionsChannel(self, value)


    def GetOriginalChartProportionsChannel(self) -> str:
        """! * Set OriginalChartProportionsChannel to an SG_MATERIAL_CHANNEL_[...]. This channel 
         * determines which texture channel to look at when determining which chart sizes 
         * to keep. 
        """

        return _Simplygon.spChartAggregator_GetOriginalChartProportionsChannel(self)


    def SetUseVertexWeights(self, value: bool) -> None:
        """! * The UseVertexWeights flag to scale the charts according to their vertex weights. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spChartAggregator_SetUseVertexWeights(self, value)


    def GetUseVertexWeights(self) -> bool:
        """! * The UseVertexWeights flag to scale the charts according to their vertex weights. 
         *  
        """

        return _Simplygon.spChartAggregator_GetUseVertexWeights(self)


    def SetLockUVRotation(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregator_SetLockUVRotation(self, value)


    def GetLockUVRotation(self) -> bool:
        """! * If LockUVRotation is enabled, only the original UV rotation will be used. Otherwise 
         * 4 rotations are used (90 degree rotations). 
        """

        return _Simplygon.spChartAggregator_GetLockUVRotation(self)


    def SetExpandZeroAreaUVs(self, value: bool) -> None:
        """! * If ExpandZeroAreaUVs is enabled then triangles that have zero area will be slightly 
         * expanded. 
         * @param value The new ExpandZeroAreaUVs. 
        """

        return _Simplygon.spChartAggregator_SetExpandZeroAreaUVs(self, value)


    def GetExpandZeroAreaUVs(self) -> bool:
        """! * If ExpandZeroAreaUVs is enabled then triangles that have zero area will be slightly 
         * expanded. 
        """

        return _Simplygon.spChartAggregator_GetExpandZeroAreaUVs(self)

    __swig_destroy__ = _Simplygon.delete_spChartAggregator

_Simplygon.spChartAggregator_swigregister(spChartAggregator)

def spChartAggregator_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spChartAggregator_IsClassA(type)

def spChartAggregator_SafeCast(other: spObject) -> spChartAggregator:
    """! * 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 
    """

    return _Simplygon.spChartAggregator_SafeCast(other)

class spVertexColorCasterSettings(spMaterialCasterSettings):
    """!VertexColorCasterSettings is the interface for basic vertex color caster settings."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spVertexColorCasterSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spVertexColorCasterSettings:
        """! * 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 
        """

        return _Simplygon.spVertexColorCasterSettings_SafeCast(other)

    def SetMaterialChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetMaterialChannel(self, value)


    def GetMaterialChannel(self) -> str:
        """! * The name of the input material channel to cast. Existing user channels of any 
         * arbitrary name in the input materials can be cast. 
        """

        return _Simplygon.spVertexColorCasterSettings_GetMaterialChannel(self)


    def SetOpacityChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetOpacityChannel(self, value)


    def GetOpacityChannel(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCasterSettings_GetOpacityChannel(self)


    def SetOpacityChannelComponent(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetOpacityChannelComponent(self, value)


    def GetOpacityChannelComponent(self):
        """! * The component in the opacity channel to use as opacity value. 
        """

        return _Simplygon.spVertexColorCasterSettings_GetOpacityChannelComponent(self)


    def SetDilation(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetDilation(self, value)


    def GetDilation(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spVertexColorCasterSettings_GetDilation(self)


    def SetOutputPixelFormat(self, value) -> None:
        """! * The output pixel format 
         * @param value The desired value to which OutputChannels will be set. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetOutputPixelFormat(self, value)


    def GetOutputPixelFormat(self):
        """! * The output pixel format 
        """

        return _Simplygon.spVertexColorCasterSettings_GetOutputPixelFormat(self)


    def SetDitherType(self, value) -> None:
        """! * The type of dithering to use when creating the output object. 
         * @param value The desired value of the DitherType to use. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetDitherType(self, value)


    def GetDitherType(self):
        """! * The type of dithering to use when creating the output object. 
        """

        return _Simplygon.spVertexColorCasterSettings_GetDitherType(self)


    def SetFillMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetFillMode(self, value)


    def GetFillMode(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spVertexColorCasterSettings_GetFillMode(self)


    def SetUseMultisampling(self, value: bool) -> None:
        """! * Enable or disable multisampling. 
         * @param value The desired value of the flag. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetUseMultisampling(self, value)


    def GetUseMultisampling(self) -> bool:
        """! * Enable or disable multisampling. 
        """

        return _Simplygon.spVertexColorCasterSettings_GetUseMultisampling(self)


    def SetOutputImageFileFormat(self, value) -> None:
        """! * File format for output texture. 
         * @param value The desired file format. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetOutputImageFileFormat(self, value)


    def GetOutputImageFileFormat(self):
        """! * File format for output texture. 
        """

        return _Simplygon.spVertexColorCasterSettings_GetOutputImageFileFormat(self)


    def SetOutputDDSCompressionType(self, value) -> None:
        """! * DDS compression if output format is DDS. 
         * @param value The desired DDS compression type. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetOutputDDSCompressionType(self, value)


    def GetOutputDDSCompressionType(self):
        """! * DDS compression if output format is DDS. 
        """

        return _Simplygon.spVertexColorCasterSettings_GetOutputDDSCompressionType(self)


    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spVertexColorCasterSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spVertexColorCasterSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVertexColorCasterSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVertexColorCasterSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVertexColorCasterSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVertexColorCasterSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVertexColorCasterSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spVertexColorCasterSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spVertexColorCasterSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spVertexColorCasterSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spVertexColorCasterSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spVertexColorCasterSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spVertexColorCasterSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetValidateParameterNames(self, validate)


    def SetOutputColorLevel(self, value: int) -> None:
        """! * The OutputColorLevel index. 
         * @param value The OutputColorLevel index value. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetOutputColorLevel(self, value)


    def GetOutputColorLevel(self) -> int:
        """! * The OutputColorLevel index. 
        """

        return _Simplygon.spVertexColorCasterSettings_GetOutputColorLevel(self)


    def SetOutputColorName(self, value: str) -> None:
        """! * The OutputColorName string . 
         * @param value The OutputColorLevel index value. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetOutputColorName(self, value)


    def GetOutputColorName(self) -> str:
        """! * The OutputColorName string . 
        """

        return _Simplygon.spVertexColorCasterSettings_GetOutputColorName(self)


    def SetColorSpaceEdgeThreshold(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCasterSettings_SetColorSpaceEdgeThreshold(self, value)


    def GetColorSpaceEdgeThreshold(self) -> float:
        """! * 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. 
         *  
        """

        return _Simplygon.spVertexColorCasterSettings_GetColorSpaceEdgeThreshold(self)

    __swig_destroy__ = _Simplygon.delete_spVertexColorCasterSettings

_Simplygon.spVertexColorCasterSettings_swigregister(spVertexColorCasterSettings)

def spVertexColorCasterSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spVertexColorCasterSettings_IsClassA(type)

def spVertexColorCasterSettings_SafeCast(other: spObject) -> spVertexColorCasterSettings:
    """! * 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 
    """

    return _Simplygon.spVertexColorCasterSettings_SafeCast(other)

class spVertexColorCaster(spMaterialCaster):
    """!VertexColorCaster."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spVertexColorCaster_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spVertexColorCaster:
        """! * 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 
        """

        return _Simplygon.spVertexColorCaster_SafeCast(other)

    def GetMaterialCasterSettings(self) -> spMaterialCasterSettings:
        """! * The settings object. 
        """

        return _Simplygon.spVertexColorCaster_GetMaterialCasterSettings(self)


    def SetSourceTextures(self, value: spTextureTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_SetSourceTextures(self, value)


    def GetSourceTextures(self) -> spTextureTable:
        """! * The SourceTextures object. The SourceTextures object contains all textures of 
         * the the source geometry. 
        """

        return _Simplygon.spVertexColorCaster_GetSourceTextures(self)


    def SetSourceMaterials(self, value: spMaterialTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_SetSourceMaterials(self, value)


    def GetSourceMaterials(self) -> spMaterialTable:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_GetSourceMaterials(self)


    def SetDestMaterialId(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_SetDestMaterialId(self, value)


    def GetDestMaterialId(self) -> int:
        """! * The DestMaterialId object. If set, only the parts of the destination map that. 
         * To disable, set to -1. 
        """

        return _Simplygon.spVertexColorCaster_GetDestMaterialId(self)


    def SetMappingImage(self, value: spMappingImage) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_SetMappingImage(self, value)


    def GetMappingImage(self) -> spMappingImage:
        """! * The MappingImage object. The MappingImage object contains the mapping between 
         * the Geometry and SourceGeometry objects. 
        """

        return _Simplygon.spVertexColorCaster_GetMappingImage(self)


    def SetOutputFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_SetOutputFilePath(self, value)


    def GetOutputFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_GetOutputFilePath(self)


    def SetOutputImage(self, value: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_SetOutputImage(self, value)


    def GetOutputImage(self) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_GetOutputImage(self)


    def NewCopy(self) -> spMaterialCaster:
        """! * Create a new clone of the material caster, copying all settings. 
        """

        return _Simplygon.spVertexColorCaster_NewCopy(self)


    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spVertexColorCaster_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spVertexColorCaster_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spVertexColorCaster_ToJSON(self)


    def SetScene(self, value: spScene) -> None:
        """! * The scene used for vertex casting. 
         * @param value Is the scene object. 
        """

        return _Simplygon.spVertexColorCaster_SetScene(self, value)


    def GetVertexColorCasterSettings(self) -> spVertexColorCasterSettings:
        """! * The color caster settings object. 
         * @return Color caster settings object 
        """

        return _Simplygon.spVertexColorCaster_GetVertexColorCasterSettings(self)

    __swig_destroy__ = _Simplygon.delete_spVertexColorCaster

_Simplygon.spVertexColorCaster_swigregister(spVertexColorCaster)

def spVertexColorCaster_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spVertexColorCaster_IsClassA(type)

def spVertexColorCaster_SafeCast(other: spObject) -> spVertexColorCaster:
    """! * 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 
    """

    return _Simplygon.spVertexColorCaster_SafeCast(other)

class spImageDataExporter(spObject):
    """!Class for saving image data to different file formats."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spImageDataExporter_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spImageDataExporter:
        """! * 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 
        """

        return _Simplygon.spImageDataExporter_SafeCast(other)

    def SetExportFilePath(self, value: str) -> None:
        """! * The main export file path. This must always be set. 
         * @param value The desired main export file path. 
        """

        return _Simplygon.spImageDataExporter_SetExportFilePath(self, value)


    def GetExportFilePath(self) -> str:
        """! * The main export file path. This must always be set. 
        """

        return _Simplygon.spImageDataExporter_GetExportFilePath(self)


    def SetImage(self, value: spImageData) -> None:
        """! * The image data to export. 
         * @param value The image data object to export. 
        """

        return _Simplygon.spImageDataExporter_SetImage(self, value)


    def RunExport(self) -> bool:
        """! * Runs the export. Note that all parameters must be setup before exporting. 
        """

        return _Simplygon.spImageDataExporter_RunExport(self)


    def SetImageFileFormat(self, value) -> None:
        """! * Output image file format to use. 
         * @param value The desired output image file format. 
        """

        return _Simplygon.spImageDataExporter_SetImageFileFormat(self, value)


    def GetImageFileFormat(self):
        """! * Output image file format to use. 
        """

        return _Simplygon.spImageDataExporter_GetImageFileFormat(self)


    def SetDDSCompressionType(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageDataExporter_SetDDSCompressionType(self, value)


    def GetDDSCompressionType(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spImageDataExporter_GetDDSCompressionType(self)


    def Clear(self) -> None:
        """! * Close any open file or stream, release any allocated data. 
        """

        return _Simplygon.spImageDataExporter_Clear(self)

    __swig_destroy__ = _Simplygon.delete_spImageDataExporter

_Simplygon.spImageDataExporter_swigregister(spImageDataExporter)

def spImageDataExporter_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spImageDataExporter_IsClassA(type)

def spImageDataExporter_SafeCast(other: spObject) -> spImageDataExporter:
    """! * 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 
    """

    return _Simplygon.spImageDataExporter_SafeCast(other)

class spAmbientOcclusionCaster(spMaterialCaster):
    """!AmbientOcclusionCaster generates an ambient occlusion map based on the original geometry, and casts it."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spAmbientOcclusionCaster_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spAmbientOcclusionCaster:
        """! * 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 
        """

        return _Simplygon.spAmbientOcclusionCaster_SafeCast(other)

    def GetMaterialCasterSettings(self) -> spMaterialCasterSettings:
        """! * The settings object. 
        """

        return _Simplygon.spAmbientOcclusionCaster_GetMaterialCasterSettings(self)


    def SetSourceTextures(self, value: spTextureTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_SetSourceTextures(self, value)


    def GetSourceTextures(self) -> spTextureTable:
        """! * The SourceTextures object. The SourceTextures object contains all textures of 
         * the the source geometry. 
        """

        return _Simplygon.spAmbientOcclusionCaster_GetSourceTextures(self)


    def SetSourceMaterials(self, value: spMaterialTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_SetSourceMaterials(self, value)


    def GetSourceMaterials(self) -> spMaterialTable:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_GetSourceMaterials(self)


    def SetDestMaterialId(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_SetDestMaterialId(self, value)


    def GetDestMaterialId(self) -> int:
        """! * The DestMaterialId object. If set, only the parts of the destination map that. 
         * To disable, set to -1. 
        """

        return _Simplygon.spAmbientOcclusionCaster_GetDestMaterialId(self)


    def SetMappingImage(self, value: spMappingImage) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_SetMappingImage(self, value)


    def GetMappingImage(self) -> spMappingImage:
        """! * The MappingImage object. The MappingImage object contains the mapping between 
         * the Geometry and SourceGeometry objects. 
        """

        return _Simplygon.spAmbientOcclusionCaster_GetMappingImage(self)


    def SetOutputFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_SetOutputFilePath(self, value)


    def GetOutputFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_GetOutputFilePath(self)


    def SetOutputImage(self, value: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_SetOutputImage(self, value)


    def GetOutputImage(self) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_GetOutputImage(self)


    def NewCopy(self) -> spMaterialCaster:
        """! * Create a new clone of the material caster, copying all settings. 
        """

        return _Simplygon.spAmbientOcclusionCaster_NewCopy(self)


    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spAmbientOcclusionCaster_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCaster_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spAmbientOcclusionCaster_ToJSON(self)


    def SetAdditionalSourceScene(self, value: spScene) -> None:
        """! * An additional scene that will be used to compute the ambient occlusion on the 
         * main scene. 
         * @param value The additional scene. 
        """

        return _Simplygon.spAmbientOcclusionCaster_SetAdditionalSourceScene(self, value)


    def GetAmbientOcclusionCasterSettings(self) -> spAmbientOcclusionCasterSettings:
        """! * The ambient occlusion caster settings object. 
         * @return Ambient occlusion caster settings object. 
        """

        return _Simplygon.spAmbientOcclusionCaster_GetAmbientOcclusionCasterSettings(self)

    __swig_destroy__ = _Simplygon.delete_spAmbientOcclusionCaster

_Simplygon.spAmbientOcclusionCaster_swigregister(spAmbientOcclusionCaster)

def spAmbientOcclusionCaster_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spAmbientOcclusionCaster_IsClassA(type)

def spAmbientOcclusionCaster_SafeCast(other: spObject) -> spAmbientOcclusionCaster:
    """! * 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 
    """

    return _Simplygon.spAmbientOcclusionCaster_SafeCast(other)

class spAmbientOcclusionCasterSettings(spMaterialCasterSettings):
    """!AmbientOcclusionCasterSettings manages settings for an ambient occlusion caster."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spAmbientOcclusionCasterSettings:
        """! * 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 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SafeCast(other)

    def SetMaterialChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetMaterialChannel(self, value)


    def GetMaterialChannel(self) -> str:
        """! * The name of the input material channel to cast. Existing user channels of any 
         * arbitrary name in the input materials can be cast. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetMaterialChannel(self)


    def SetOpacityChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetOpacityChannel(self, value)


    def GetOpacityChannel(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetOpacityChannel(self)


    def SetOpacityChannelComponent(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetOpacityChannelComponent(self, value)


    def GetOpacityChannelComponent(self):
        """! * The component in the opacity channel to use as opacity value. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetOpacityChannelComponent(self)


    def SetDilation(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetDilation(self, value)


    def GetDilation(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetDilation(self)


    def SetOutputPixelFormat(self, value) -> None:
        """! * The output pixel format 
         * @param value The desired value to which OutputChannels will be set. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetOutputPixelFormat(self, value)


    def GetOutputPixelFormat(self):
        """! * The output pixel format 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetOutputPixelFormat(self)


    def SetDitherType(self, value) -> None:
        """! * The type of dithering to use when creating the output object. 
         * @param value The desired value of the DitherType to use. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetDitherType(self, value)


    def GetDitherType(self):
        """! * The type of dithering to use when creating the output object. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetDitherType(self)


    def SetFillMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetFillMode(self, value)


    def GetFillMode(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetFillMode(self)


    def SetUseMultisampling(self, value: bool) -> None:
        """! * Enable or disable multisampling. 
         * @param value The desired value of the flag. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetUseMultisampling(self, value)


    def GetUseMultisampling(self) -> bool:
        """! * Enable or disable multisampling. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetUseMultisampling(self)


    def SetOutputImageFileFormat(self, value) -> None:
        """! * File format for output texture. 
         * @param value The desired file format. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetOutputImageFileFormat(self, value)


    def GetOutputImageFileFormat(self):
        """! * File format for output texture. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetOutputImageFileFormat(self)


    def SetOutputDDSCompressionType(self, value) -> None:
        """! * DDS compression if output format is DDS. 
         * @param value The desired DDS compression type. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetOutputDDSCompressionType(self, value)


    def GetOutputDDSCompressionType(self):
        """! * DDS compression if output format is DDS. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetOutputDDSCompressionType(self)


    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetValidateParameterNames(self, validate)


    def SetRaysPerPixel(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetRaysPerPixel(self, value)


    def GetRaysPerPixel(self) -> int:
        """! * This determines how many rays are traced per pixel (or subpixel) to evaluate 
         * the occlusion. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetRaysPerPixel(self)


    def SetOcclusionFalloff(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetOcclusionFalloff(self, value)


    def GetOcclusionFalloff(self) -> float:
        """! * How far away a surface has to be from another surface to generate no occlusion. 
         * Only applicable if SimpleOcclusionMode is off. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetOcclusionFalloff(self)


    def SetOcclusionMultiplier(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetOcclusionMultiplier(self, value)


    def GetOcclusionMultiplier(self) -> float:
        """! * This is just a basic intensity scaler. Higher is "darker". 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetOcclusionMultiplier(self)


    def SetUseSimpleOcclusionMode(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_SetUseSimpleOcclusionMode(self, value)


    def GetUseSimpleOcclusionMode(self) -> bool:
        """! * If set, occlusion will not scale with distance, each ray will only be either 
         * fully occluded or not at all. Speeds up processing time. 
        """

        return _Simplygon.spAmbientOcclusionCasterSettings_GetUseSimpleOcclusionMode(self)

    __swig_destroy__ = _Simplygon.delete_spAmbientOcclusionCasterSettings

_Simplygon.spAmbientOcclusionCasterSettings_swigregister(spAmbientOcclusionCasterSettings)

def spAmbientOcclusionCasterSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spAmbientOcclusionCasterSettings_IsClassA(type)

def spAmbientOcclusionCasterSettings_SafeCast(other: spObject) -> spAmbientOcclusionCasterSettings:
    """! * 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 
    """

    return _Simplygon.spAmbientOcclusionCasterSettings_SafeCast(other)

class spImpostorProcessor(spProcessingObject):
    """!The ImpostorProcessor generates an impostor of one of these impostor types: BillboardCloud, Flipbook or ImpostorFromSingleView."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spImpostorProcessor_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spImpostorProcessor:
        """! * 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 
        """

        return _Simplygon.spImpostorProcessor_SafeCast(other)

    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spImpostorProcessor_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spImpostorProcessor_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spImpostorProcessor_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spImpostorProcessor_ToJSON(self)


    def SetScene(self, value: spScene) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorProcessor_SetScene(self, value)


    def GetScene(self) -> spScene:
        """! * 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. 
        """

        return _Simplygon.spImpostorProcessor_GetScene(self)


    def GetImpostorSettings(self) -> spImpostorSettings:
        """! * The settings for the ImpostorProcessor. 
         * @return The ImpostorProcessor settings object associated with the processor 
        """

        return _Simplygon.spImpostorProcessor_GetImpostorSettings(self)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * The settings for the the MappingImage. 
         * @return The MappingImage settings object associated with the processor 
        """

        return _Simplygon.spImpostorProcessor_GetMappingImageSettings(self)


    def GetMappingImage(self) -> spMappingImage:
        """! * The MappingImage for the Impostor geometry. 
         * @return The MappingImage object associated with the processor 
        """

        return _Simplygon.spImpostorProcessor_GetMappingImage(self)


    def GetImpostorGeometryFromSingleView(self) -> spGeometryData:
        """! * If an impostor has been generated with ImpostorType: ImpostorFromSingleView, 
         * this function returns the quad GeometryData. 
         * @return The Impostor GeometryData object created by the processor 
        """

        return _Simplygon.spImpostorProcessor_GetImpostorGeometryFromSingleView(self)


    def GetSingleViewAspectRatio(self) -> float:
        """! * 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 
        """

        return _Simplygon.spImpostorProcessor_GetSingleViewAspectRatio(self)


    def GetBillboardCloudMaterialId(self) -> int:
        """! * If an impostor has been generated with ImpostorType: BillboardCloud, this function 
         * returns the material id of the generated material. 
        """

        return _Simplygon.spImpostorProcessor_GetBillboardCloudMaterialId(self)

    __swig_destroy__ = _Simplygon.delete_spImpostorProcessor

_Simplygon.spImpostorProcessor_swigregister(spImpostorProcessor)

def spImpostorProcessor_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spImpostorProcessor_IsClassA(type)

def spImpostorProcessor_SafeCast(other: spObject) -> spImpostorProcessor:
    """! * 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 
    """

    return _Simplygon.spImpostorProcessor_SafeCast(other)

class spImpostorSettings(spSettingsObject):
    """!Settings for the ImpostorProcessor"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spImpostorSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spImpostorSettings:
        """! * 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 
        """

        return _Simplygon.spImpostorSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spImpostorSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spImpostorSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spImpostorSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spImpostorSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spImpostorSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spImpostorSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spImpostorSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spImpostorSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorSettings_SetValidateParameterNames(self, validate)


    def SetImpostorType(self, value) -> None:
        """! * Specifies which type of impostor should be created: BillboardCloud, Flipbook 
         * or ImpostorFromSingleView. 
         * @param value The ImpostorType value to use. 
        """

        return _Simplygon.spImpostorSettings_SetImpostorType(self, value)


    def GetImpostorType(self):
        """! * Specifies which type of impostor should be created: BillboardCloud, Flipbook 
         * or ImpostorFromSingleView. 
        """

        return _Simplygon.spImpostorSettings_GetImpostorType(self)


    def SetProcessSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorSettings_SetProcessSelectionSetID(self, value)


    def GetProcessSelectionSetID(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spImpostorSettings_GetProcessSelectionSetID(self)


    def SetProcessSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorSettings_SetProcessSelectionSetName(self, value)


    def GetProcessSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spImpostorSettings_GetProcessSelectionSetName(self)


    def GetBillboardCloudSettings(self) -> spBillboardCloudSettings:
        """! * The settings for creating the billboard cloud. 
         * @return The settings for creating the billboard cloud. 
        """

        return _Simplygon.spImpostorSettings_GetBillboardCloudSettings(self)


    def GetFlipbookSettings(self) -> spFlipbookSettings:
        """! * The settings for creating the flipbook. 
         * @return The settings for creating the flipbook. 
        """

        return _Simplygon.spImpostorSettings_GetFlipbookSettings(self)


    def GetImpostorFromSingleViewSettings(self) -> spImpostorFromSingleViewSettings:
        """! * The settings for the single view impostor. 
         * @return The settings for the single view impostor. 
        """

        return _Simplygon.spImpostorSettings_GetImpostorFromSingleViewSettings(self)

    __swig_destroy__ = _Simplygon.delete_spImpostorSettings

_Simplygon.spImpostorSettings_swigregister(spImpostorSettings)

def spImpostorSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spImpostorSettings_IsClassA(type)

def spImpostorSettings_SafeCast(other: spObject) -> spImpostorSettings:
    """! * 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 
    """

    return _Simplygon.spImpostorSettings_SafeCast(other)

class spSurfaceMapper(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spSurfaceMapper_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spSurfaceMapper:
        """! * 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 
        """

        return _Simplygon.spSurfaceMapper_SafeCast(other)

    def SetSourceScene(self, value: spScene) -> None:
        """! * The scene used for the surface transfer source. 
         * @param value Is the source scene object. 
        """

        return _Simplygon.spSurfaceMapper_SetSourceScene(self, value)


    def GetSourceScene(self) -> spScene:
        """! * The scene used for the surface transfer source. 
        """

        return _Simplygon.spSurfaceMapper_GetSourceScene(self)


    def SetDestinationScene(self, value: spScene) -> None:
        """! * The scene used for the surface transfer destination. 
         * @param value Is the destination scene object. 
        """

        return _Simplygon.spSurfaceMapper_SetDestinationScene(self, value)


    def GetDestinationScene(self) -> spScene:
        """! * The scene used for the surface transfer destination. 
        """

        return _Simplygon.spSurfaceMapper_GetDestinationScene(self)


    def SetSourceGeometry(self, value: spGeometryData) -> None:
        """! * The source geometry data. 
         * @param value Is the source geometry. 
        """

        return _Simplygon.spSurfaceMapper_SetSourceGeometry(self, value)


    def GetSourceGeometry(self) -> spGeometryData:
        """! * The source geometry data. 
        """

        return _Simplygon.spSurfaceMapper_GetSourceGeometry(self)


    def SetDestinationGeometry(self, value: spGeometryData) -> None:
        """! * The destination geometry data. 
         * @param value Is the destination geometry. 
        """

        return _Simplygon.spSurfaceMapper_SetDestinationGeometry(self, value)


    def GetDestinationGeometry(self) -> spGeometryData:
        """! * The destination geometry data. 
        """

        return _Simplygon.spSurfaceMapper_GetDestinationGeometry(self)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spSurfaceMapper_GetMappingImageSettings(self)


    def GetMappingImage(self) -> spMappingImage:
        """! * The mapping image. 
         * @return the mapping image 
        """

        return _Simplygon.spSurfaceMapper_GetMappingImage(self)


    def SetRecalculateSearchDirection(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spSurfaceMapper_SetRecalculateSearchDirection(self, value)


    def GetRecalculateSearchDirection(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spSurfaceMapper_GetRecalculateSearchDirection(self)


    def SetSearchDirectionHardEdgeAngle(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spSurfaceMapper_SetSearchDirectionHardEdgeAngle(self, value)


    def GetSearchDirectionHardEdgeAngle(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spSurfaceMapper_GetSearchDirectionHardEdgeAngle(self)


    def SetSearchDistance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spSurfaceMapper_SetSearchDistance(self, value)


    def GetSearchDistance(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spSurfaceMapper_GetSearchDistance(self)


    def SetSearchOffset(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spSurfaceMapper_SetSearchOffset(self, value)


    def GetSearchOffset(self) -> float:
        """! * 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. 
         *  
        """

        return _Simplygon.spSurfaceMapper_GetSearchOffset(self)


    def RunSurfaceMapping(self) -> None:
        """! * Runs the surface mapping. 
        """

        return _Simplygon.spSurfaceMapper_RunSurfaceMapping(self)

    __swig_destroy__ = _Simplygon.delete_spSurfaceMapper

_Simplygon.spSurfaceMapper_swigregister(spSurfaceMapper)

def spSurfaceMapper_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spSurfaceMapper_IsClassA(type)

def spSurfaceMapper_SafeCast(other: spObject) -> spSurfaceMapper:
    """! * 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 
    """

    return _Simplygon.spSurfaceMapper_SafeCast(other)

class spOcclusionMeshProcessor(spProcessingObject):
    """!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"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshProcessor_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spOcclusionMeshProcessor:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshProcessor_SafeCast(other)

    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshProcessor_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spOcclusionMeshProcessor_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshProcessor_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spOcclusionMeshProcessor_ToJSON(self)


    def SetScene(self, value: spScene) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshProcessor_SetScene(self, value)


    def GetScene(self) -> spScene:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshProcessor_GetScene(self)


    def GetOcclusionMeshSettings(self) -> spOcclusionMeshSettings:
        """! * The settings for the OcclusionMeshProcessor. 
         * @return The ImpostorProcessor settings object associated with the processor 
        """

        return _Simplygon.spOcclusionMeshProcessor_GetOcclusionMeshSettings(self)

    __swig_destroy__ = _Simplygon.delete_spOcclusionMeshProcessor

_Simplygon.spOcclusionMeshProcessor_swigregister(spOcclusionMeshProcessor)

def spOcclusionMeshProcessor_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spOcclusionMeshProcessor_IsClassA(type)

def spOcclusionMeshProcessor_SafeCast(other: spObject) -> spOcclusionMeshProcessor:
    """! * 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 
    """

    return _Simplygon.spOcclusionMeshProcessor_SafeCast(other)

class spOcclusionMeshSettings(spSettingsObject):
    """!Settings for occlusion meshes"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spOcclusionMeshSettings:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spOcclusionMeshSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spOcclusionMeshSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spOcclusionMeshSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spOcclusionMeshSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spOcclusionMeshSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spOcclusionMeshSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spOcclusionMeshSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spOcclusionMeshSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_SetValidateParameterNames(self, validate)


    def SetOnScreenSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_SetOnScreenSize(self, value)


    def GetOnScreenSize(self) -> int:
        """! * The onscreen size (px) of the output utility mesh. This will determine triangle 
         * count and quality. 
        """

        return _Simplygon.spOcclusionMeshSettings_GetOnScreenSize(self)


    def SetOnScreenErrorTolerance(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_SetOnScreenErrorTolerance(self, value)


    def GetOnScreenErrorTolerance(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spOcclusionMeshSettings_GetOnScreenErrorTolerance(self)


    def SetInvertOutputMesh(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_SetInvertOutputMesh(self, value)


    def GetInvertOutputMesh(self) -> bool:
        """! * Flips the winding of the triangles of the output, making frontfaces backfaces 
         * and vice versa. Good for conservative z testing. 
        """

        return _Simplygon.spOcclusionMeshSettings_GetInvertOutputMesh(self)


    def SetTransferSkinning(self, value: bool) -> None:
        """! * Sets whether to transfer the bone weights and bone ids to the new geometry. 
         * @param value The desired value of InvertOutputMesh. 
        """

        return _Simplygon.spOcclusionMeshSettings_SetTransferSkinning(self, value)


    def GetTransferSkinning(self) -> bool:
        """! * Sets whether to transfer the bone weights and bone ids to the new geometry. 
        """

        return _Simplygon.spOcclusionMeshSettings_GetTransferSkinning(self)


    def SetUseCameras(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_SetUseCameras(self, value)


    def GetUseCameras(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_GetUseCameras(self)


    def SetCameraSelectionSetId(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_SetCameraSelectionSetId(self, value)


    def GetCameraSelectionSetId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_GetCameraSelectionSetId(self)


    def SetCameraSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_SetCameraSelectionSetName(self, value)


    def GetCameraSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_GetCameraSelectionSetName(self)


    def SetOcclusionMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_SetOcclusionMode(self, value)


    def GetOcclusionMode(self):
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshSettings_GetOcclusionMode(self)

    __swig_destroy__ = _Simplygon.delete_spOcclusionMeshSettings

_Simplygon.spOcclusionMeshSettings_swigregister(spOcclusionMeshSettings)

def spOcclusionMeshSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spOcclusionMeshSettings_IsClassA(type)

def spOcclusionMeshSettings_SafeCast(other: spObject) -> spOcclusionMeshSettings:
    """! * 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 
    """

    return _Simplygon.spOcclusionMeshSettings_SafeCast(other)

class spImageComparer(spObject):
    """!Compares images."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spImageComparer_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spImageComparer:
        """! * 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 
        """

        return _Simplygon.spImageComparer_SafeCast(other)

    def SetImages(self, beforeImg: spImageData, afterImg: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_SetImages(self, beforeImg, afterImg)


    def SetImageMasks(self, beforeImgMask: spBoolArray, afterImgMask: spBoolArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_SetImageMasks(self, beforeImgMask, afterImgMask)


    def CompareImages(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_CompareImages(self)


    def SetImagePathBeforeImg(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_SetImagePathBeforeImg(self, value)


    def SetImagePathAfterImg(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_SetImagePathAfterImg(self, value)


    def SetImageDiffExportPath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_SetImageDiffExportPath(self, value)


    def SetDiffHighlightsExportPath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_SetDiffHighlightsExportPath(self, value)


    def GetImageDiff(self) -> spImageData:
        """! * Returns the image for the resulting comparison. Can be used to get a visual feedback 
         * of the results of the comparison. 
        """

        return _Simplygon.spImageComparer_GetImageDiff(self)


    def GetDiffHighlights(self) -> spImageData:
        """! * 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". 
        """

        return _Simplygon.spImageComparer_GetDiffHighlights(self)


    def GetTotalMaskCoverage(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_GetTotalMaskCoverage(self)


    def GetMaxPixelError(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_GetMaxPixelError(self)


    def GetTotalPixelError(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_GetTotalPixelError(self)


    def GetHighlightAreaCoverage(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spImageComparer_GetHighlightAreaCoverage(self)


    def SetSilhouetteDifferenceError(self, value: float) -> None:
        """! * 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) 
        """

        return _Simplygon.spImageComparer_SetSilhouetteDifferenceError(self, value)

    __swig_destroy__ = _Simplygon.delete_spImageComparer

_Simplygon.spImageComparer_swigregister(spImageComparer)

def spImageComparer_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spImageComparer_IsClassA(type)

def spImageComparer_SafeCast(other: spObject) -> spImageComparer:
    """! * 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 
    """

    return _Simplygon.spImageComparer_SafeCast(other)

class spRecommendedTextureSizeCalculator(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spRecommendedTextureSizeCalculator_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spRecommendedTextureSizeCalculator:
        """! * 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 
        """

        return _Simplygon.spRecommendedTextureSizeCalculator_SafeCast(other)

    def SetForcePower2Texture(self, value: bool) -> None:
        """! * If true, then force the texture sizes to be a power of 2. 
         * @param value The desired flag. 
        """

        return _Simplygon.spRecommendedTextureSizeCalculator_SetForcePower2Texture(self, value)


    def GetForcePower2Texture(self) -> bool:
        """! * If true, then force the texture sizes to be a power of 2. 
        """

        return _Simplygon.spRecommendedTextureSizeCalculator_GetForcePower2Texture(self)


    def SetRecommendedTextureSizeMultiplier(self, value: float) -> None:
        """! * The texture size multiplier for the automatic texture size. 
         * @param value The desired multiplier. 
        """

        return _Simplygon.spRecommendedTextureSizeCalculator_SetRecommendedTextureSizeMultiplier(self, value)


    def GetRecommendedTextureSizeMultiplier(self) -> float:
        """! * The texture size multiplier for the automatic texture size. 
        """

        return _Simplygon.spRecommendedTextureSizeCalculator_GetRecommendedTextureSizeMultiplier(self)


    def GetRecommendedWidth(self) -> int:
        """! * The recommended width calculated in CalculateRecommendedTextureSize() 
         * @return The recommended width 
        """

        return _Simplygon.spRecommendedTextureSizeCalculator_GetRecommendedWidth(self)


    def GetRecommendedHeight(self) -> int:
        """! * The recommended height calculated in CalculateRecommendedTextureSize() 
         * @return The recommended height 
        """

        return _Simplygon.spRecommendedTextureSizeCalculator_GetRecommendedHeight(self)


    def CalculateBasedOnDeviation(self, geom: spGeometryData, deviation: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spRecommendedTextureSizeCalculator_CalculateBasedOnDeviation(self, geom, deviation)


    def CalculateBasedOnOnScreenSize(self, geom: spGeometryData, onScreenSize: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRecommendedTextureSizeCalculator_CalculateBasedOnOnScreenSize(self, geom, onScreenSize)

    __swig_destroy__ = _Simplygon.delete_spRecommendedTextureSizeCalculator

_Simplygon.spRecommendedTextureSizeCalculator_swigregister(spRecommendedTextureSizeCalculator)

def spRecommendedTextureSizeCalculator_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spRecommendedTextureSizeCalculator_IsClassA(type)

def spRecommendedTextureSizeCalculator_SafeCast(other: spObject) -> spRecommendedTextureSizeCalculator:
    """! * 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 
    """

    return _Simplygon.spRecommendedTextureSizeCalculator_SafeCast(other)

class spPartRemover(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spPartRemover_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spPartRemover:
        """! * 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 
        """

        return _Simplygon.spPartRemover_SafeCast(other)

    def RunPartRemoval(self) -> None:
        """! * Runs the part removal processing. 
        """

        return _Simplygon.spPartRemover_RunPartRemoval(self)


    def SetGeometry(self, value: spGeometryData) -> None:
        """! * 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. 
        """

        return _Simplygon.spPartRemover_SetGeometry(self, value)


    def GetGeometry(self) -> spGeometryData:
        """! * The geometry data object to run the part removal on. If a scene is set, this 
         * parameter is ignored by the reducer. 
        """

        return _Simplygon.spPartRemover_GetGeometry(self)


    def SetScene(self, value: spScene) -> None:
        """! * The scene object to run the part removal on. 
         * @param value The scene data to be used for processing. 
        """

        return _Simplygon.spPartRemover_SetScene(self, value)


    def GetScene(self) -> spScene:
        """! * The scene object to run the part removal on. 
        """

        return _Simplygon.spPartRemover_GetScene(self)


    def SetSizeThreshold(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spPartRemover_SetSizeThreshold(self, value)


    def GetSizeThreshold(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spPartRemover_GetSizeThreshold(self)


    def SetUsePerMaterialSizeThresholds(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spPartRemover_SetUsePerMaterialSizeThresholds(self, value)


    def GetUsePerMaterialSizeThresholds(self) -> bool:
        """! * The UsePerMaterialSizeThresholds flag. If true, the global SizeThreshold value 
         * will be ignored and the per-material values in the PerMaterialSizeThresholds 
         * will be used instead. 
        """

        return _Simplygon.spPartRemover_GetUsePerMaterialSizeThresholds(self)


    def GetPerMaterialSizeThresholds(self) -> spRealArray:
        """! * 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 
        """

        return _Simplygon.spPartRemover_GetPerMaterialSizeThresholds(self)

    __swig_destroy__ = _Simplygon.delete_spPartRemover

_Simplygon.spPartRemover_swigregister(spPartRemover)

def spPartRemover_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spPartRemover_IsClassA(type)

def spPartRemover_SafeCast(other: spObject) -> spPartRemover:
    """! * 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 
    """

    return _Simplygon.spPartRemover_SafeCast(other)

class spWelder(spProcessingObject):
    """!Welds vertices within the geometry or scene together."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spWelder_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spWelder:
        """! * 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 
        """

        return _Simplygon.spWelder_SafeCast(other)

    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spWelder_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spWelder_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spWelder_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spWelder_ToJSON(self)


    def SetScene(self, value: spScene) -> None:
        """! * The scene. 
         * @param value The scene object. 
        """

        return _Simplygon.spWelder_SetScene(self, value)


    def GetScene(self) -> spScene:
        """! * The scene. 
        """

        return _Simplygon.spWelder_GetScene(self)


    def SetProcessSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spWelder_SetProcessSelectionSetID(self, value)


    def GetProcessSelectionSetID(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spWelder_GetProcessSelectionSetID(self)


    def SetProcessSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spWelder_SetProcessSelectionSetName(self, value)


    def GetProcessSelectionSetName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spWelder_GetProcessSelectionSetName(self)


    def SetWeldDist(self, value: float) -> None:
        """! * The distance below which the vertices will be welded. 
         * @param value The weld distance. 
        """

        return _Simplygon.spWelder_SetWeldDist(self, value)


    def GetWeldDist(self) -> float:
        """! * The distance below which the vertices will be welded. 
        """

        return _Simplygon.spWelder_GetWeldDist(self)


    def WeldGeometry(self, geom: spGeometryData) -> None:
        """! * Welds the geometry. 
         * @param geom The geometry data object. 
        """

        return _Simplygon.spWelder_WeldGeometry(self, geom)


    def SetUpdateExtents(self, value: bool) -> None:
        """! * If true, the welder will call CalculateExtents on the geometry before welding. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spWelder_SetUpdateExtents(self, value)


    def GetUpdateExtents(self) -> bool:
        """! * If true, the welder will call CalculateExtents on the geometry before welding. 
         *  
        """

        return _Simplygon.spWelder_GetUpdateExtents(self)


    def SetProgressivePasses(self, value: int) -> None:
        """! * The number of progressive passes. 
         * @param value The number of passes to perform. 
        """

        return _Simplygon.spWelder_SetProgressivePasses(self, value)


    def GetProgressivePasses(self) -> int:
        """! * The number of progressive passes. 
        """

        return _Simplygon.spWelder_GetProgressivePasses(self)


    def SetIgnoreVertexLocks(self, value: bool) -> None:
        """! * If IgnoreVertexLocks is true, then also vertices that are locked may be welded. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spWelder_SetIgnoreVertexLocks(self, value)


    def GetIgnoreVertexLocks(self) -> bool:
        """! * If IgnoreVertexLocks is true, then also vertices that are locked may be welded. 
         *  
        """

        return _Simplygon.spWelder_GetIgnoreVertexLocks(self)


    def SetCompactMesh(self, value: bool) -> None:
        """! * If true, the welder will call Compact on the geometry after welding. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spWelder_SetCompactMesh(self, value)


    def GetCompactMesh(self) -> bool:
        """! * If true, the welder will call Compact on the geometry after welding. 
        """

        return _Simplygon.spWelder_GetCompactMesh(self)


    def SetOnlyBorders(self, value: bool) -> None:
        """! * If set, only vertices that are on the border are considered for the welding. 
         * @param value The new OnlyBorders value. 
        """

        return _Simplygon.spWelder_SetOnlyBorders(self, value)


    def GetOnlyBorders(self) -> bool:
        """! * If set, only vertices that are on the border are considered for the welding. 
         *  
        """

        return _Simplygon.spWelder_GetOnlyBorders(self)


    def SetOnlyWithinMaterial(self, value: bool) -> None:
        """! * If set, only vertices that are within the same material are welded. Vertices 
         * on material borders are locked. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spWelder_SetOnlyWithinMaterial(self, value)


    def GetOnlyWithinMaterial(self) -> bool:
        """! * If set, only vertices that are within the same material are welded. Vertices 
         * on material borders are locked. 
        """

        return _Simplygon.spWelder_GetOnlyWithinMaterial(self)


    def SetOnlyWithinSceneNode(self, value: bool) -> None:
        """! * If set, only vertices that are within the same scene node are welded. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spWelder_SetOnlyWithinSceneNode(self, value)


    def GetOnlyWithinSceneNode(self) -> bool:
        """! * If set, only vertices that are within the same scene node are welded. 
        """

        return _Simplygon.spWelder_GetOnlyWithinSceneNode(self)


    def SetOnlyBetweenSceneNodes(self, value: bool) -> None:
        """! * If set, only vertices that belong to different scene nodes are considered for 
         * the welding. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spWelder_SetOnlyBetweenSceneNodes(self, value)


    def GetOnlyBetweenSceneNodes(self) -> bool:
        """! * If set, only vertices that belong to different scene nodes are considered for 
         * the welding. 
        """

        return _Simplygon.spWelder_GetOnlyBetweenSceneNodes(self)

    __swig_destroy__ = _Simplygon.delete_spWelder

_Simplygon.spWelder_swigregister(spWelder)

def spWelder_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spWelder_IsClassA(type)

def spWelder_SafeCast(other: spObject) -> spWelder:
    """! * 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 
    """

    return _Simplygon.spWelder_SafeCast(other)

class spTJunctionEliminator(spObject):
    """!Removes t-junctions by subdividing triangles and welding vertices """

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spTJunctionEliminator_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spTJunctionEliminator:
        """! * 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 
        """

        return _Simplygon.spTJunctionEliminator_SafeCast(other)

    def SetScene(self, value: spScene) -> None:
        """! * The scene. 
         * @param value The scene object. 
        """

        return _Simplygon.spTJunctionEliminator_SetScene(self, value)


    def GetScene(self) -> spScene:
        """! * The scene. 
        """

        return _Simplygon.spTJunctionEliminator_GetScene(self)


    def RemoveTJunctionsInGeometry(self, geom: spGeometryData) -> None:
        """! * Removes the t-junctions in the geometry data. 
         * @param geom The geometry data object. 
        """

        return _Simplygon.spTJunctionEliminator_RemoveTJunctionsInGeometry(self, geom)


    def RemoveTJunctions(self) -> None:
        """! * Removes the t-junctions in the set scene, processing each sub-geometry individually. 
         *  
        """

        return _Simplygon.spTJunctionEliminator_RemoveTJunctions(self)


    def SetWeldDist(self, value: float) -> None:
        """! * The distance, below which, the t-junctions will be welded. 
         * @param value The welding distance. 
        """

        return _Simplygon.spTJunctionEliminator_SetWeldDist(self, value)


    def GetWeldDist(self) -> float:
        """! * The distance, below which, the t-junctions will be welded. 
        """

        return _Simplygon.spTJunctionEliminator_GetWeldDist(self)


    def SetOnlyObjectBoundaryFlag(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spTJunctionEliminator_SetOnlyObjectBoundaryFlag(self, value)


    def GetOnlyObjectBoundaryFlag(self) -> bool:
        """! * If set, only vertices that are on the boundary between two different objects 
         * are considered for the welding. 
        """

        return _Simplygon.spTJunctionEliminator_GetOnlyObjectBoundaryFlag(self)


    def SetProcessSelectionSetID(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spTJunctionEliminator_SetProcessSelectionSetID(self, value)


    def GetProcessSelectionSetID(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spTJunctionEliminator_GetProcessSelectionSetID(self)


    def SetProcessSelectionSetName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spTJunctionEliminator_SetProcessSelectionSetName(self, value)


    def GetProcessSelectionSetName(self) -> str:
        """! * 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. 
         *  
        """

        return _Simplygon.spTJunctionEliminator_GetProcessSelectionSetName(self)


    def SetOnlyWithinMaterialFlag(self, value: bool) -> None:
        """! * If set, only vertices that are within the same material are welded. Vertices 
         * on material borders are locked. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spTJunctionEliminator_SetOnlyWithinMaterialFlag(self, value)


    def GetOnlyWithinMaterialFlag(self) -> bool:
        """! * If set, only vertices that are within the same material are welded. Vertices 
         * on material borders are locked. 
        """

        return _Simplygon.spTJunctionEliminator_GetOnlyWithinMaterialFlag(self)


    def SetOnlyWithinSceneNode(self, value: bool) -> None:
        """! * If set, only vertices that are within the same scene node are welded. 
         * @param value The desired flag value. 
        """

        return _Simplygon.spTJunctionEliminator_SetOnlyWithinSceneNode(self, value)


    def GetOnlyWithinSceneNode(self) -> bool:
        """! * If set, only vertices that are within the same scene node are welded. 
        """

        return _Simplygon.spTJunctionEliminator_GetOnlyWithinSceneNode(self)

    __swig_destroy__ = _Simplygon.delete_spTJunctionEliminator

_Simplygon.spTJunctionEliminator_swigregister(spTJunctionEliminator)

def spTJunctionEliminator_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spTJunctionEliminator_IsClassA(type)

def spTJunctionEliminator_SafeCast(other: spObject) -> spTJunctionEliminator:
    """! * 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 
    """

    return _Simplygon.spTJunctionEliminator_SafeCast(other)

class spPipeline(spObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spPipeline:
        """! * 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 
        """

        return _Simplygon.spPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spPipeline_NewCopy(self)

    __swig_destroy__ = _Simplygon.delete_spPipeline

_Simplygon.spPipeline_swigregister(spPipeline)

def spPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spPipeline_IsClassA(type)

def spPipeline_SafeCast(other: spObject) -> spPipeline:
    """! * 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 
    """

    return _Simplygon.spPipeline_SafeCast(other)

class spPipelineBatch(spObject):
    """!Control object to launch pipelines in batches, both locally and distributed"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spPipelineBatch_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spPipelineBatch:
        """! * 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 
        """

        return _Simplygon.spPipelineBatch_SafeCast(other)

    def SetStoragePath(self, path: str) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spPipelineBatch_SetStoragePath(self, path)


    def GetStoragePath(self) -> str:
        """! * 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. 
         *  
        """

        return _Simplygon.spPipelineBatch_GetStoragePath(self)


    def Queue(self, pipeline: spPipeline, scene: spScene) -> int:
        """! * 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. 
        """

        return _Simplygon.spPipelineBatch_Queue(self, pipeline, scene)


    def QueueFile(self, pipeline: str, scene: str) -> int:
        """! * 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. 
        """

        return _Simplygon.spPipelineBatch_QueueFile(self, pipeline, scene)


    def Run(self, runMode):
        """! * 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. 
        """

        return _Simplygon.spPipelineBatch_Run(self, runMode)


    def LoadProcessedScene(self, handle: int) -> spScene:
        """! * 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. 
        """

        return _Simplygon.spPipelineBatch_LoadProcessedScene(self, handle)


    def GetBatchCount(self) -> int:
        """! * Get the number of pipelines queued in the pipeline batch. 
         * @return Number of pipelines queued in the pipeline batch. 
        """

        return _Simplygon.spPipelineBatch_GetBatchCount(self)


    def GetPipelinePath(self, index: int) -> str:
        """! * 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. 
        """

        return _Simplygon.spPipelineBatch_GetPipelinePath(self, index)


    def GetScenePath(self, index: int) -> str:
        """! * 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. 
         *  
        """

        return _Simplygon.spPipelineBatch_GetScenePath(self, index)


    def GetOutputPath(self, index: int) -> str:
        """! * 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. 
         *  
        """

        return _Simplygon.spPipelineBatch_GetOutputPath(self, index)


    def Clear(self) -> None:
        """! * Manually clear the queue. 
        """

        return _Simplygon.spPipelineBatch_Clear(self)


    def SetCascadedRunMode(self, mode) -> None:
        """! * The run mode to use on cascaded pipelines when executing the pipeline batch. 
         * @param mode The run mode to use for cascaded pipelines. 
        """

        return _Simplygon.spPipelineBatch_SetCascadedRunMode(self, mode)


    def GetCascadedRunMode(self):
        """! * The run mode to use on cascaded pipelines when executing the pipeline batch. 
         *  
        """

        return _Simplygon.spPipelineBatch_GetCascadedRunMode(self)


    def SetSimplygonBatchPath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipelineBatch_SetSimplygonBatchPath(self, value)


    def GetSimplygonBatchPath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spPipelineBatch_GetSimplygonBatchPath(self)

    __swig_destroy__ = _Simplygon.delete_spPipelineBatch

_Simplygon.spPipelineBatch_swigregister(spPipelineBatch)

def spPipelineBatch_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spPipelineBatch_IsClassA(type)

def spPipelineBatch_SafeCast(other: spObject) -> spPipelineBatch:
    """! * 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 
    """

    return _Simplygon.spPipelineBatch_SafeCast(other)

class spPipelineSerializer(spObject):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spPipelineSerializer_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spPipelineSerializer:
        """! * 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 
        """

        return _Simplygon.spPipelineSerializer_SafeCast(other)

    def LoadPipelineFromFile(self, path: str) -> spPipeline:
        """! * 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 
        """

        return _Simplygon.spPipelineSerializer_LoadPipelineFromFile(self, path)


    def SavePipelineToFile(self, path: str, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipelineSerializer_SavePipelineToFile(self, path, pipeline)


    def LoadPipelineBatchFromFile(self, path: str) -> spPipelineBatch:
        """! * 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 
        """

        return _Simplygon.spPipelineSerializer_LoadPipelineBatchFromFile(self, path)


    def SavePipelineBatchToFile(self, path: str, batch: spPipelineBatch) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipelineSerializer_SavePipelineBatchToFile(self, path, batch)

    __swig_destroy__ = _Simplygon.delete_spPipelineSerializer

_Simplygon.spPipelineSerializer_swigregister(spPipelineSerializer)

def spPipelineSerializer_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spPipelineSerializer_IsClassA(type)

def spPipelineSerializer_SafeCast(other: spObject) -> spPipelineSerializer:
    """! * 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 
    """

    return _Simplygon.spPipelineSerializer_SafeCast(other)

class spReductionPipeline(spPipeline):
    """!ReductionPipeline provides a pipeline for a single reduction processor to be applied on the input scene."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spReductionPipeline:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spReductionPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spReductionPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spReductionPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spReductionPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spReductionPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spReductionPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spReductionPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spReductionPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spReductionPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spReductionPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spReductionPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spReductionPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spReductionPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spReductionPipeline_NewCopy(self)


    def GetReductionSettings(self) -> spReductionSettings:
        """! * The reduction settings object containing the reduction settings for this pipeline. 
         * @return The reduction settings 
        """

        return _Simplygon.spReductionPipeline_GetReductionSettings(self)


    def GetRepairSettings(self) -> spRepairSettings:
        """! * The repair settings object containing the repair settings for this pipeline. 
         * @return The repair settings 
        """

        return _Simplygon.spReductionPipeline_GetRepairSettings(self)


    def GetNormalCalculationSettings(self) -> spNormalCalculationSettings:
        """! * The normal calculation settings object containing the normal calculation settings 
         * for this pipeline. 
         * @return The normal calculation settings 
        """

        return _Simplygon.spReductionPipeline_GetNormalCalculationSettings(self)


    def GetVisibilitySettings(self) -> spVisibilitySettings:
        """! * 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 
        """

        return _Simplygon.spReductionPipeline_GetVisibilitySettings(self)


    def GetBoneSettings(self) -> spBoneSettings:
        """! * The bone settings object containing the bone settings for this pipeline. 
         * @return The bone settings 
        """

        return _Simplygon.spReductionPipeline_GetBoneSettings(self)


    def GetVertexWeightSettings(self) -> spVertexWeightSettings:
        """! * The vertex weight settings object for this pipeline. 
         * @return The vertex weight settings 
        """

        return _Simplygon.spReductionPipeline_GetVertexWeightSettings(self)


    def GetResultDeviation(self) -> float:
        """! * Returns the max deviation reached for the last processing. 
         * @return The max deviation of the last processing 
        """

        return _Simplygon.spReductionPipeline_GetResultDeviation(self)

    __swig_destroy__ = _Simplygon.delete_spReductionPipeline

_Simplygon.spReductionPipeline_swigregister(spReductionPipeline)

def spReductionPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spReductionPipeline_IsClassA(type)

def spReductionPipeline_SafeCast(other: spObject) -> spReductionPipeline:
    """! * 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 
    """

    return _Simplygon.spReductionPipeline_SafeCast(other)

class spRemeshingLegacyPipeline(spPipeline):
    """!@deprecated Interface is marked as deprecated and will be removed in future version. RemeshingLegacyPipeline provides a pipeline for a single remeshing legacy processor to be applied on the input scene."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spRemeshingLegacyPipeline:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacyPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacyPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacyPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacyPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacyPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacyPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacyPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacyPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacyPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingLegacyPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacyPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spRemeshingLegacyPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spRemeshingLegacyPipeline_NewCopy(self)


    def GetRemeshingLegacySettings(self) -> spRemeshingLegacySettings:
        """! * The remeshing settings object containing the remeshing settings for this pipeline. 
         * @return The remeshing settings 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetRemeshingLegacySettings(self)


    def GetVisibilitySettings(self) -> spVisibilitySettings:
        """! * 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 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetVisibilitySettings(self)


    def GetBoneSettings(self) -> spBoneSettings:
        """! * The bone settings object containing the bone settings for this pipeline. 
         * @return The bone settings 
        """

        return _Simplygon.spRemeshingLegacyPipeline_GetBoneSettings(self)

    __swig_destroy__ = _Simplygon.delete_spRemeshingLegacyPipeline

_Simplygon.spRemeshingLegacyPipeline_swigregister(spRemeshingLegacyPipeline)

def spRemeshingLegacyPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spRemeshingLegacyPipeline_IsClassA(type)

def spRemeshingLegacyPipeline_SafeCast(other: spObject) -> spRemeshingLegacyPipeline:
    """! * 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 
    """

    return _Simplygon.spRemeshingLegacyPipeline_SafeCast(other)

class spAggregationPipeline(spPipeline):
    """!AggregationPipeline provides a pipeline for a single aggregation processor to be applied on the input scene."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spAggregationPipeline:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spAggregationPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spAggregationPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spAggregationPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spAggregationPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spAggregationPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spAggregationPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spAggregationPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spAggregationPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spAggregationPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spAggregationPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spAggregationPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spAggregationPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spAggregationPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spAggregationPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spAggregationPipeline_NewCopy(self)


    def GetAggregationSettings(self) -> spAggregationSettings:
        """! * The aggregation settings object for this pipeline. 
        """

        return _Simplygon.spAggregationPipeline_GetAggregationSettings(self)


    def GetVisibilitySettings(self) -> spVisibilitySettings:
        """! * 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 _Simplygon.spAggregationPipeline_GetVisibilitySettings(self)


    def GetGeometryCullingSettings(self) -> spGeometryCullingSettings:
        """! * The geometry culling settings object for this pipeline. 
        """

        return _Simplygon.spAggregationPipeline_GetGeometryCullingSettings(self)


    def GetVertexWeightSettings(self) -> spVertexWeightSettings:
        """! * The vertex weight settings object for this pipeline. 
        """

        return _Simplygon.spAggregationPipeline_GetVertexWeightSettings(self)


    def GetGenerateLightmapTexCoordSettings(self) -> spGenerateLightmapTexCoordSettings:
        """! * The settings object to create an extra set of TexCoord used for light mapping. 
         *  
        """

        return _Simplygon.spAggregationPipeline_GetGenerateLightmapTexCoordSettings(self)

    __swig_destroy__ = _Simplygon.delete_spAggregationPipeline

_Simplygon.spAggregationPipeline_swigregister(spAggregationPipeline)

def spAggregationPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spAggregationPipeline_IsClassA(type)

def spAggregationPipeline_SafeCast(other: spObject) -> spAggregationPipeline:
    """! * 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 
    """

    return _Simplygon.spAggregationPipeline_SafeCast(other)

class spPipelineSettings(spSettingsObject):
    """!PipelineSettings is the interface used to manage settings for a pipeline"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spPipelineSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spPipelineSettings:
        """! * 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 
        """

        return _Simplygon.spPipelineSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spPipelineSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spPipelineSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipelineSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipelineSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipelineSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipelineSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPipelineSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spPipelineSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spPipelineSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spPipelineSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spPipelineSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spPipelineSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spPipelineSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_SetValidateParameterNames(self, validate)


    def SetTextureOutputPath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_SetTextureOutputPath(self, value)


    def GetTextureOutputPath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_GetTextureOutputPath(self)


    def SetSimplygonBatchPath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_SetSimplygonBatchPath(self, value)


    def GetSimplygonBatchPath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_GetSimplygonBatchPath(self)


    def SetOutputMaterialName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_SetOutputMaterialName(self, value)


    def GetOutputMaterialName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_GetOutputMaterialName(self)


    def SetOutputUniqueMaterialNames(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_SetOutputUniqueMaterialNames(self, value)


    def GetOutputUniqueMaterialNames(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_GetOutputUniqueMaterialNames(self)


    def SetEmbedReferences(self, value: bool) -> None:
        """! * Set flag to control if output file formats that support embedding referenced 
         * resources (like textures) should do so. 
         * @param value Embed flag. 
        """

        return _Simplygon.spPipelineSettings_SetEmbedReferences(self, value)


    def GetEmbedReferences(self) -> bool:
        """! * Set flag to control if output file formats that support embedding referenced 
         * resources (like textures) should do so. 
        """

        return _Simplygon.spPipelineSettings_GetEmbedReferences(self)


    def SetIntermediateStep(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_SetIntermediateStep(self, value)


    def GetIntermediateStep(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spPipelineSettings_GetIntermediateStep(self)


    def SetCascadedRunMode(self, value) -> None:
        """! * Set run mode to use for cascaded child pipelines. 
         * @param value Run mode for cascaded child pipelines. 
        """

        return _Simplygon.spPipelineSettings_SetCascadedRunMode(self, value)


    def GetCascadedRunMode(self):
        """! * Set run mode to use for cascaded child pipelines. 
        """

        return _Simplygon.spPipelineSettings_GetCascadedRunMode(self)

    __swig_destroy__ = _Simplygon.delete_spPipelineSettings

_Simplygon.spPipelineSettings_swigregister(spPipelineSettings)

def spPipelineSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spPipelineSettings_IsClassA(type)

def spPipelineSettings_SafeCast(other: spObject) -> spPipelineSettings:
    """! * 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 
    """

    return _Simplygon.spPipelineSettings_SafeCast(other)

class spRemeshingPipeline(spPipeline):
    """!RemeshingPipeline provides a pipeline for a single remeshing processor to be applied on the input scene."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spRemeshingPipeline:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spRemeshingPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spRemeshingPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spRemeshingPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spRemeshingPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spRemeshingPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spRemeshingPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spRemeshingPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spRemeshingPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spRemeshingPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spRemeshingPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spRemeshingPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spRemeshingPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spRemeshingPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spRemeshingPipeline_NewCopy(self)


    def GetRemeshingSettings(self) -> spRemeshingSettings:
        """! * The remeshing settings object containing the remeshing settings for this pipeline. 
         * @return The remeshing settings 
        """

        return _Simplygon.spRemeshingPipeline_GetRemeshingSettings(self)


    def GetBoneSettings(self) -> spBoneSettings:
        """! * The bone settings object containing the bone settings for this pipeline. 
         * @return The bone settings 
        """

        return _Simplygon.spRemeshingPipeline_GetBoneSettings(self)


    def GetGeometryCullingSettings(self) -> spGeometryCullingSettings:
        """! * The settings for handling visibility weights. 
         * @return The geometry culling settings for this pipeline 
        """

        return _Simplygon.spRemeshingPipeline_GetGeometryCullingSettings(self)


    def GetVisibilitySettings(self) -> spVisibilitySettings:
        """! * 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 
        """

        return _Simplygon.spRemeshingPipeline_GetVisibilitySettings(self)

    __swig_destroy__ = _Simplygon.delete_spRemeshingPipeline

_Simplygon.spRemeshingPipeline_swigregister(spRemeshingPipeline)

def spRemeshingPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spRemeshingPipeline_IsClassA(type)

def spRemeshingPipeline_SafeCast(other: spObject) -> spRemeshingPipeline:
    """! * 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 
    """

    return _Simplygon.spRemeshingPipeline_SafeCast(other)

class spPassthroughPipeline(spPipeline):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spPassthroughPipeline:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spPassthroughPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spPassthroughPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spPassthroughPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spPassthroughPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spPassthroughPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spPassthroughPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPassthroughPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPassthroughPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPassthroughPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPassthroughPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPassthroughPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPassthroughPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spPassthroughPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spPassthroughPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spPassthroughPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spPassthroughPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spPassthroughPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spPassthroughPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spPassthroughPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spPassthroughPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spPassthroughPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spPassthroughPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spPassthroughPipeline_NewCopy(self)

    __swig_destroy__ = _Simplygon.delete_spPassthroughPipeline

_Simplygon.spPassthroughPipeline_swigregister(spPassthroughPipeline)

def spPassthroughPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spPassthroughPipeline_IsClassA(type)

def spPassthroughPipeline_SafeCast(other: spObject) -> spPassthroughPipeline:
    """! * 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 
    """

    return _Simplygon.spPassthroughPipeline_SafeCast(other)

class spGeometryDataCaster(spMaterialCaster):
    """!GeometryDataCaster is used to cast original GeometryData information to an image using mapping image"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCaster_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGeometryDataCaster:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCaster_SafeCast(other)

    def GetMaterialCasterSettings(self) -> spMaterialCasterSettings:
        """! * The settings object. 
        """

        return _Simplygon.spGeometryDataCaster_GetMaterialCasterSettings(self)


    def SetSourceTextures(self, value: spTextureTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_SetSourceTextures(self, value)


    def GetSourceTextures(self) -> spTextureTable:
        """! * The SourceTextures object. The SourceTextures object contains all textures of 
         * the the source geometry. 
        """

        return _Simplygon.spGeometryDataCaster_GetSourceTextures(self)


    def SetSourceMaterials(self, value: spMaterialTable) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_SetSourceMaterials(self, value)


    def GetSourceMaterials(self) -> spMaterialTable:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_GetSourceMaterials(self)


    def SetDestMaterialId(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_SetDestMaterialId(self, value)


    def GetDestMaterialId(self) -> int:
        """! * The DestMaterialId object. If set, only the parts of the destination map that. 
         * To disable, set to -1. 
        """

        return _Simplygon.spGeometryDataCaster_GetDestMaterialId(self)


    def SetMappingImage(self, value: spMappingImage) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_SetMappingImage(self, value)


    def GetMappingImage(self) -> spMappingImage:
        """! * The MappingImage object. The MappingImage object contains the mapping between 
         * the Geometry and SourceGeometry objects. 
        """

        return _Simplygon.spGeometryDataCaster_GetMappingImage(self)


    def SetOutputFilePath(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_SetOutputFilePath(self, value)


    def GetOutputFilePath(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_GetOutputFilePath(self)


    def SetOutputImage(self, value: spImageData) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_SetOutputImage(self, value)


    def GetOutputImage(self) -> spImageData:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_GetOutputImage(self)


    def NewCopy(self) -> spMaterialCaster:
        """! * Create a new clone of the material caster, copying all settings. 
        """

        return _Simplygon.spGeometryDataCaster_NewCopy(self)


    def RunProcessing(self):
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_RunProcessing(self)


    def Clear(self) -> None:
        """! * Clear all internal states of the object. This will NOT clear the parameters set 
         * in the object. 
        """

        return _Simplygon.spGeometryDataCaster_Clear(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCaster_GetPercentDone(self)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spGeometryDataCaster_ToJSON(self)


    def GetGeometryDataCasterSettings(self) -> spGeometryDataCasterSettings:
        """! * The GeometryDataCaster settings object. 
         * @return The caster settings object. 
        """

        return _Simplygon.spGeometryDataCaster_GetGeometryDataCasterSettings(self)

    __swig_destroy__ = _Simplygon.delete_spGeometryDataCaster

_Simplygon.spGeometryDataCaster_swigregister(spGeometryDataCaster)

def spGeometryDataCaster_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGeometryDataCaster_IsClassA(type)

def spGeometryDataCaster_SafeCast(other: spObject) -> spGeometryDataCaster:
    """! * 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 
    """

    return _Simplygon.spGeometryDataCaster_SafeCast(other)

class spGeometryDataCasterSettings(spMaterialCasterSettings):
    """!GeometryDataCasterSettings is the interface used to manage settings for GeometryDataCaster"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCasterSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGeometryDataCasterSettings:
        """! * 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 
        """

        return _Simplygon.spGeometryDataCasterSettings_SafeCast(other)

    def SetMaterialChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMaterialChannel(self, value)


    def GetMaterialChannel(self) -> str:
        """! * The name of the input material channel to cast. Existing user channels of any 
         * arbitrary name in the input materials can be cast. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetMaterialChannel(self)


    def SetOpacityChannel(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetOpacityChannel(self, value)


    def GetOpacityChannel(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetOpacityChannel(self)


    def SetOpacityChannelComponent(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetOpacityChannelComponent(self, value)


    def GetOpacityChannelComponent(self):
        """! * The component in the opacity channel to use as opacity value. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetOpacityChannelComponent(self)


    def SetDilation(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetDilation(self, value)


    def GetDilation(self) -> int:
        """! * 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. 
         *  
        """

        return _Simplygon.spGeometryDataCasterSettings_GetDilation(self)


    def SetOutputPixelFormat(self, value) -> None:
        """! * The output pixel format 
         * @param value The desired value to which OutputChannels will be set. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetOutputPixelFormat(self, value)


    def GetOutputPixelFormat(self):
        """! * The output pixel format 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetOutputPixelFormat(self)


    def SetDitherType(self, value) -> None:
        """! * The type of dithering to use when creating the output object. 
         * @param value The desired value of the DitherType to use. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetDitherType(self, value)


    def GetDitherType(self):
        """! * The type of dithering to use when creating the output object. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetDitherType(self)


    def SetFillMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetFillMode(self, value)


    def GetFillMode(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spGeometryDataCasterSettings_GetFillMode(self)


    def SetUseMultisampling(self, value: bool) -> None:
        """! * Enable or disable multisampling. 
         * @param value The desired value of the flag. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetUseMultisampling(self, value)


    def GetUseMultisampling(self) -> bool:
        """! * Enable or disable multisampling. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetUseMultisampling(self)


    def SetOutputImageFileFormat(self, value) -> None:
        """! * File format for output texture. 
         * @param value The desired file format. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetOutputImageFileFormat(self, value)


    def GetOutputImageFileFormat(self):
        """! * File format for output texture. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetOutputImageFileFormat(self)


    def SetOutputDDSCompressionType(self, value) -> None:
        """! * DDS compression if output format is DDS. 
         * @param value The desired DDS compression type. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetOutputDDSCompressionType(self, value)


    def GetOutputDDSCompressionType(self):
        """! * DDS compression if output format is DDS. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetOutputDDSCompressionType(self)


    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spGeometryDataCasterSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spGeometryDataCasterSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetValidateParameterNames(self, validate)


    def SetGeometryDataFieldType(self, FieldType) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetGeometryDataFieldType(self, FieldType)


    def GetGeometryDataFieldType(self):
        """! * The GeometryDataFieldType setting, which specifies what field type to cast in 
         * the GeometryDataCaster. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetGeometryDataFieldType(self)


    def SetGeometryDataFieldIndex(self, FieldIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetGeometryDataFieldIndex(self, FieldIndex)


    def GetGeometryDataFieldIndex(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetGeometryDataFieldIndex(self)


    def SetMappingLayerIndex(self, LayerIndex: int) -> None:
        """! * The MappingLayerIndex setting, which specifies the layer of the mapping image 
         * to use for mapping the geometry data. This is useful eg if you have decals which 
         * are on layer 0, and the real geometry on layer 1 
         * @param LayerIndex The layer index to use. Value cannot be less than 0. Value 
         * cannot be greater than UINT_MAX. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingLayerIndex(self, LayerIndex)


    def GetMappingLayerIndex(self) -> int:
        """! * The MappingLayerIndex setting, which specifies the layer of the mapping image 
         * to use for mapping the geometry data. This is useful eg if you have decals which 
         * are on layer 0, and the real geometry on layer 1 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetMappingLayerIndex(self)


    def SetMappingInfR(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingInfR(self, value)


    def GetMappingInfR(self) -> float:
        """! * 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 _Simplygon.spGeometryDataCasterSettings_GetMappingInfR(self)


    def SetMappingSupR(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingSupR(self, value)


    def GetMappingSupR(self) -> float:
        """! * 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 _Simplygon.spGeometryDataCasterSettings_GetMappingSupR(self)


    def SetMappingInfG(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingInfG(self, value)


    def GetMappingInfG(self) -> float:
        """! * 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 _Simplygon.spGeometryDataCasterSettings_GetMappingInfG(self)


    def SetMappingSupG(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingSupG(self, value)


    def GetMappingSupG(self) -> float:
        """! * 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 _Simplygon.spGeometryDataCasterSettings_GetMappingSupG(self)


    def SetMappingInfB(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingInfB(self, value)


    def GetMappingInfB(self) -> float:
        """! * 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 _Simplygon.spGeometryDataCasterSettings_GetMappingInfB(self)


    def SetMappingSupB(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingSupB(self, value)


    def GetMappingSupB(self) -> float:
        """! * 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 _Simplygon.spGeometryDataCasterSettings_GetMappingSupB(self)


    def SetMappingInfA(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingInfA(self, value)


    def GetMappingInfA(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetMappingInfA(self)


    def SetMappingSupA(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingSupA(self, value)


    def GetMappingSupA(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetMappingSupA(self)


    def SetMappingInf(self, vec_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingInf(self, vec_realInputDataPtr)


    def GetMappingInf(self) -> spRealData:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetMappingInf(self)


    def SetMappingSup(self, vec_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_SetMappingSup(self, vec_realInputDataPtr)


    def GetMappingSup(self) -> spRealData:
        """! * 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. 
        """

        return _Simplygon.spGeometryDataCasterSettings_GetMappingSup(self)

    __swig_destroy__ = _Simplygon.delete_spGeometryDataCasterSettings

_Simplygon.spGeometryDataCasterSettings_swigregister(spGeometryDataCasterSettings)

def spGeometryDataCasterSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGeometryDataCasterSettings_IsClassA(type)

def spGeometryDataCasterSettings_SafeCast(other: spObject) -> spGeometryDataCasterSettings:
    """! * 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 
    """

    return _Simplygon.spGeometryDataCasterSettings_SafeCast(other)

class spVertexWeightSettings(spSettingsObject):
    """!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."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spVertexWeightSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spVertexWeightSettings:
        """! * 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 
        """

        return _Simplygon.spVertexWeightSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spVertexWeightSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spVertexWeightSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVertexWeightSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVertexWeightSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVertexWeightSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVertexWeightSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spVertexWeightSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spVertexWeightSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spVertexWeightSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spVertexWeightSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spVertexWeightSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spVertexWeightSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spVertexWeightSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexWeightSettings_SetValidateParameterNames(self, validate)


    def SetUseVertexWeightsInReducer(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexWeightSettings_SetUseVertexWeightsInReducer(self, value)


    def GetUseVertexWeightsInReducer(self) -> bool:
        """! * If set, and using the reduction processor, the reduction will be weighted based 
         * on the weights in the "VertexWeights" vertex field. 
        """

        return _Simplygon.spVertexWeightSettings_GetUseVertexWeightsInReducer(self)


    def SetUseVertexWeightsInTexcoordGenerator(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexWeightSettings_SetUseVertexWeightsInTexcoordGenerator(self, value)


    def GetUseVertexWeightsInTexcoordGenerator(self) -> bool:
        """! * 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. 
        """

        return _Simplygon.spVertexWeightSettings_GetUseVertexWeightsInTexcoordGenerator(self)


    def SetWeightsFromColorName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexWeightSettings_SetWeightsFromColorName(self, value)


    def GetWeightsFromColorName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spVertexWeightSettings_GetWeightsFromColorName(self)


    def SetWeightsFromColorLevel(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexWeightSettings_SetWeightsFromColorLevel(self, value)


    def GetWeightsFromColorLevel(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spVertexWeightSettings_GetWeightsFromColorLevel(self)


    def SetWeightsFromColorComponent(self, value) -> None:
        """! * If converting vertex colors to weights, this setting controls which color component 
         * is used to create the weights. 
         * @param value The desired WeightsFromColorComponent. 
        """

        return _Simplygon.spVertexWeightSettings_SetWeightsFromColorComponent(self, value)


    def GetWeightsFromColorComponent(self):
        """! * If converting vertex colors to weights, this setting controls which color component 
         * is used to create the weights. 
        """

        return _Simplygon.spVertexWeightSettings_GetWeightsFromColorComponent(self)


    def SetWeightsFromColorMultiplier(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexWeightSettings_SetWeightsFromColorMultiplier(self, value)


    def GetWeightsFromColorMultiplier(self) -> float:
        """! * If converting vertex colors to weights, this setting controls the max and min 
         * resulting vertex weights generated by the input color. 
        """

        return _Simplygon.spVertexWeightSettings_GetWeightsFromColorMultiplier(self)


    def SetWeightsFromColorMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spVertexWeightSettings_SetWeightsFromColorMode(self, value)


    def GetWeightsFromColorMode(self):
        """! * 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]. 
        """

        return _Simplygon.spVertexWeightSettings_GetWeightsFromColorMode(self)

    __swig_destroy__ = _Simplygon.delete_spVertexWeightSettings

_Simplygon.spVertexWeightSettings_swigregister(spVertexWeightSettings)

def spVertexWeightSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spVertexWeightSettings_IsClassA(type)

def spVertexWeightSettings_SafeCast(other: spObject) -> spVertexWeightSettings:
    """! * 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 
    """

    return _Simplygon.spVertexWeightSettings_SafeCast(other)

class spGenerateLightmapTexCoordSettings(spSettingsObject):
    """!GenerateLightmapTexCoordSettings is the interface used to manage light map uv generation."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spGenerateLightmapTexCoordSettings:
        """! * 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 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetValidateParameterNames(self, validate)


    def SetGenerateLightmapTexCoord(self, value: bool) -> None:
        """! * Property for whether to generate an extra set of TexCoords for LightMapping. 
         * @param value The new value. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetGenerateLightmapTexCoord(self, value)


    def GetGenerateLightmapTexCoord(self) -> bool:
        """! * Property for whether to generate an extra set of TexCoords for LightMapping. 
         *  
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetGenerateLightmapTexCoord(self)


    def SetLightmapTexCoordLevel(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetLightmapTexCoordLevel(self, value)


    def GetLightmapTexCoordLevel(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetLightmapTexCoordLevel(self)


    def SetLightmapTexCoordName(self, value: str) -> None:
        """! * 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 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetLightmapTexCoordName(self, value)


    def GetLightmapTexCoordName(self) -> str:
        """! * 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 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetLightmapTexCoordName(self)


    def SetChartAggregatorMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetChartAggregatorMode(self, value)


    def GetChartAggregatorMode(self):
        """! * 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.");. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetChartAggregatorMode(self)


    def SetTextureWidth(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetTextureWidth(self, value)


    def GetTextureWidth(self) -> int:
        """! * The width of the texture of the output mapping image. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetTextureWidth(self)


    def SetTextureHeight(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetTextureHeight(self, value)


    def GetTextureHeight(self) -> int:
        """! * The height of the texture of the output mapping image. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetTextureHeight(self)


    def SetGutterSpace(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_SetGutterSpace(self, value)


    def GetGutterSpace(self) -> int:
        """! * The minimum number of pixels between charts of the output mapping image. 
        """

        return _Simplygon.spGenerateLightmapTexCoordSettings_GetGutterSpace(self)

    __swig_destroy__ = _Simplygon.delete_spGenerateLightmapTexCoordSettings

_Simplygon.spGenerateLightmapTexCoordSettings_swigregister(spGenerateLightmapTexCoordSettings)

def spGenerateLightmapTexCoordSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spGenerateLightmapTexCoordSettings_IsClassA(type)

def spGenerateLightmapTexCoordSettings_SafeCast(other: spObject) -> spGenerateLightmapTexCoordSettings:
    """! * 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 
    """

    return _Simplygon.spGenerateLightmapTexCoordSettings_SafeCast(other)

class spChartAggregatorSettings(spSettingsObject):
    """!Settings for the chart aggregator."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spChartAggregatorSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spChartAggregatorSettings:
        """! * 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 
        """

        return _Simplygon.spChartAggregatorSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spChartAggregatorSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spChartAggregatorSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spChartAggregatorSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spChartAggregatorSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spChartAggregatorSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spChartAggregatorSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spChartAggregatorSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spChartAggregatorSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spChartAggregatorSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spChartAggregatorSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spChartAggregatorSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spChartAggregatorSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spChartAggregatorSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregatorSettings_SetValidateParameterNames(self, validate)


    def SetChartAggregatorMode(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregatorSettings_SetChartAggregatorMode(self, value)


    def GetChartAggregatorMode(self):
        """! * 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. 
        """

        return _Simplygon.spChartAggregatorSettings_GetChartAggregatorMode(self)


    def SetSurfaceAreaScale(self, value) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregatorSettings_SetSurfaceAreaScale(self, value)


    def GetSurfaceAreaScale(self):
        """! * 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. 
         *  
        """

        return _Simplygon.spChartAggregatorSettings_GetSurfaceAreaScale(self)


    def SetOriginalTexCoordLevel(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregatorSettings_SetOriginalTexCoordLevel(self, value)


    def GetOriginalTexCoordLevel(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spChartAggregatorSettings_GetOriginalTexCoordLevel(self)


    def SetOriginalTexCoordName(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregatorSettings_SetOriginalTexCoordName(self, value)


    def GetOriginalTexCoordName(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spChartAggregatorSettings_GetOriginalTexCoordName(self)


    def SetSeparateOverlappingCharts(self, value: bool) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spChartAggregatorSettings_SetSeparateOverlappingCharts(self, value)


    def GetSeparateOverlappingCharts(self) -> bool:
        """! * Only used when the TexCoordGeneratorType is ChartAggregator. If set, charts that 
         * are overlapping in the original texture coords will be separated. 
        """

        return _Simplygon.spChartAggregatorSettings_GetSeparateOverlappingCharts(self)


    def SetOriginalChartProportionsChannel(self, value: str) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spChartAggregatorSettings_SetOriginalChartProportionsChannel(self, value)


    def GetOriginalChartProportionsChannel(self) -> str:
        """! * 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. 
        """

        return _Simplygon.spChartAggregatorSettings_GetOriginalChartProportionsChannel(self)


    def SetLockUVRotation(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spChartAggregatorSettings_SetLockUVRotation(self, value)


    def GetLockUVRotation(self) -> bool:
        """! * 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). 
        """

        return _Simplygon.spChartAggregatorSettings_GetLockUVRotation(self)

    __swig_destroy__ = _Simplygon.delete_spChartAggregatorSettings

_Simplygon.spChartAggregatorSettings_swigregister(spChartAggregatorSettings)

def spChartAggregatorSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spChartAggregatorSettings_IsClassA(type)

def spChartAggregatorSettings_SafeCast(other: spObject) -> spChartAggregatorSettings:
    """! * 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 
    """

    return _Simplygon.spChartAggregatorSettings_SafeCast(other)

class spParameterizerSettings(spSettingsObject):
    """!Settings for the parameterizer."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spParameterizerSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spParameterizerSettings:
        """! * 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 
        """

        return _Simplygon.spParameterizerSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spParameterizerSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spParameterizerSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spParameterizerSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spParameterizerSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spParameterizerSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spParameterizerSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spParameterizerSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spParameterizerSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spParameterizerSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spParameterizerSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spParameterizerSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spParameterizerSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spParameterizerSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizerSettings_SetValidateParameterNames(self, validate)


    def SetMaxStretch(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizerSettings_SetMaxStretch(self, value)


    def GetMaxStretch(self) -> float:
        """! * Only used when the TexCoordGeneratorType is Parameterizer. The maximum allowed 
         * texture stretch. Range 0->1. 
        """

        return _Simplygon.spParameterizerSettings_GetMaxStretch(self)


    def SetLargeChartsImportance(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spParameterizerSettings_SetLargeChartsImportance(self, value)


    def GetLargeChartsImportance(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spParameterizerSettings_GetLargeChartsImportance(self)

    __swig_destroy__ = _Simplygon.delete_spParameterizerSettings

_Simplygon.spParameterizerSettings_swigregister(spParameterizerSettings)

def spParameterizerSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spParameterizerSettings_IsClassA(type)

def spParameterizerSettings_SafeCast(other: spObject) -> spParameterizerSettings:
    """! * 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 
    """

    return _Simplygon.spParameterizerSettings_SafeCast(other)

class spBillboardCloudSettings(spSettingsObject):
    """!Settings for the ImpostorType: BillboardCloud"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spBillboardCloudSettings:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spBillboardCloudSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spBillboardCloudSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spBillboardCloudSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spBillboardCloudSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spBillboardCloudSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spBillboardCloudSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spBillboardCloudSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spBillboardCloudSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_SetValidateParameterNames(self, validate)


    def SetBillboardMode(self, value) -> None:
        """! * Specifies how the impostors should be mapped to the scene. 
         * @param value The BillboardMode value to use. 
        """

        return _Simplygon.spBillboardCloudSettings_SetBillboardMode(self, value)


    def GetBillboardMode(self):
        """! * Specifies how the impostors should be mapped to the scene. 
        """

        return _Simplygon.spBillboardCloudSettings_GetBillboardMode(self)


    def SetFavorVerticalPlanes(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_SetFavorVerticalPlanes(self, value)


    def GetFavorVerticalPlanes(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudSettings_GetFavorVerticalPlanes(self)


    def SetTwoSided(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_SetTwoSided(self, value)


    def GetTwoSided(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudSettings_GetTwoSided(self)


    def SetUseVisibilityWeights(self, value: bool) -> None:
        """! * Determines whether to prioritize accurately mapping triangles with higher visibility 
         * to billboards. 
         * @param value The new value. 
         * @return The current value. 
        """

        return _Simplygon.spBillboardCloudSettings_SetUseVisibilityWeights(self, value)


    def GetUseVisibilityWeights(self) -> bool:
        """! * Determines whether to prioritize accurately mapping triangles with higher visibility 
         * to billboards. 
         * @return The current value. Default value is true 
        """

        return _Simplygon.spBillboardCloudSettings_GetUseVisibilityWeights(self)


    def SetBillboardDensity(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_SetBillboardDensity(self, value)


    def GetBillboardDensity(self) -> float:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudSettings_GetBillboardDensity(self)


    def SetMaxPlaneCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_SetMaxPlaneCount(self, value)


    def GetMaxPlaneCount(self) -> int:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudSettings_GetMaxPlaneCount(self)


    def SetGeometricComplexity(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_SetGeometricComplexity(self, value)


    def GetGeometricComplexity(self) -> float:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudSettings_GetGeometricComplexity(self)


    def SetUpVector(self, value_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_SetUpVector(self, value_realInputDataPtr)


    def GetUpVector(self) -> spRealData:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_GetUpVector(self)


    def SetUpVectorX(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_SetUpVectorX(self, value)


    def GetUpVectorX(self) -> float:
        """! * 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 _Simplygon.spBillboardCloudSettings_GetUpVectorX(self)


    def SetUpVectorY(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_SetUpVectorY(self, value)


    def GetUpVectorY(self) -> float:
        """! * 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 _Simplygon.spBillboardCloudSettings_GetUpVectorY(self)


    def SetUpVectorZ(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudSettings_SetUpVectorZ(self, value)


    def GetUpVectorZ(self) -> float:
        """! * 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 _Simplygon.spBillboardCloudSettings_GetUpVectorZ(self)


    def GetFoliageSettings(self) -> spFoliageSettings:
        """! * Settings for foliage when BillboardMode is Foliage. 
         * @return The settings for foliage. 
        """

        return _Simplygon.spBillboardCloudSettings_GetFoliageSettings(self)

    __swig_destroy__ = _Simplygon.delete_spBillboardCloudSettings

_Simplygon.spBillboardCloudSettings_swigregister(spBillboardCloudSettings)

def spBillboardCloudSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spBillboardCloudSettings_IsClassA(type)

def spBillboardCloudSettings_SafeCast(other: spObject) -> spBillboardCloudSettings:
    """! * 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 
    """

    return _Simplygon.spBillboardCloudSettings_SafeCast(other)

class spFlipbookSettings(spSettingsObject):
    """!Settings for the ImpostorType: FlipBook"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spFlipbookSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spFlipbookSettings:
        """! * 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 
        """

        return _Simplygon.spFlipbookSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spFlipbookSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spFlipbookSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spFlipbookSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spFlipbookSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spFlipbookSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spFlipbookSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spFlipbookSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spFlipbookSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_SetValidateParameterNames(self, validate)


    def SetNumberOfViews(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_SetNumberOfViews(self, value)


    def GetNumberOfViews(self) -> int:
        """! * Determines the number of views generated for the flip book impostor. 
         * @return The current value. Default value is 9 
        """

        return _Simplygon.spFlipbookSettings_GetNumberOfViews(self)


    def SetViewDirection(self, value_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_SetViewDirection(self, value_realInputDataPtr)


    def GetViewDirection(self) -> spRealData:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_GetViewDirection(self)


    def SetViewDirectionX(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_SetViewDirectionX(self, value)


    def GetViewDirectionX(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_GetViewDirectionX(self)


    def SetViewDirectionY(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_SetViewDirectionY(self, value)


    def GetViewDirectionY(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_GetViewDirectionY(self)


    def SetViewDirectionZ(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_SetViewDirectionZ(self, value)


    def GetViewDirectionZ(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_GetViewDirectionZ(self)


    def SetUpVector(self, value_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_SetUpVector(self, value_realInputDataPtr)


    def GetUpVector(self) -> spRealData:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_GetUpVector(self)


    def SetUpVectorX(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_SetUpVectorX(self, value)


    def GetUpVectorX(self) -> float:
        """! * The views are rotated around the up vector and the rendered images are oriented 
         * with the up vector. 
        """

        return _Simplygon.spFlipbookSettings_GetUpVectorX(self)


    def SetUpVectorY(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_SetUpVectorY(self, value)


    def GetUpVectorY(self) -> float:
        """! * The views are rotated around the up vector and the rendered images are oriented 
         * with the up vector. 
        """

        return _Simplygon.spFlipbookSettings_GetUpVectorY(self)


    def SetUpVectorZ(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookSettings_SetUpVectorZ(self, value)


    def GetUpVectorZ(self) -> float:
        """! * The views are rotated around the up vector and the rendered images are oriented 
         * with the up vector. 
        """

        return _Simplygon.spFlipbookSettings_GetUpVectorZ(self)


    def SetVerticalAngle(self, value: float) -> None:
        """! * @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. 
        """

        return _Simplygon.spFlipbookSettings_SetVerticalAngle(self, value)


    def GetVerticalAngle(self) -> float:
        """! * @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 
        """

        return _Simplygon.spFlipbookSettings_GetVerticalAngle(self)

    __swig_destroy__ = _Simplygon.delete_spFlipbookSettings

_Simplygon.spFlipbookSettings_swigregister(spFlipbookSettings)

def spFlipbookSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spFlipbookSettings_IsClassA(type)

def spFlipbookSettings_SafeCast(other: spObject) -> spFlipbookSettings:
    """! * 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 
    """

    return _Simplygon.spFlipbookSettings_SafeCast(other)

class spImpostorFromSingleViewSettings(spSettingsObject):
    """!Settings for the ImpostorType: ImpostorFromSingleView."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spImpostorFromSingleViewSettings:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetValidateParameterNames(self, validate)


    def SetUseTightFitting(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetUseTightFitting(self, value)


    def GetUseTightFitting(self) -> bool:
        """! * If set, the impostor will exactly conform to the bounds of the geometry. If false, 
         * its dimensions will always be diameter*diameter. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetUseTightFitting(self)


    def SetTightFittingDepthOffset(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetTightFittingDepthOffset(self, value)


    def GetTightFittingDepthOffset(self) -> float:
        """! * This determines where the impostor will end up in depth. 0 is "center", 1 is 
         * "front" and -1 is "back". 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetTightFittingDepthOffset(self)


    def SetTwoSided(self, value: bool) -> None:
        """! * If set, the impostor will contain both front and back facing surfaces. 
         * @param value The new TwoSided value. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetTwoSided(self, value)


    def GetTwoSided(self) -> bool:
        """! * If set, the impostor will contain both front and back facing surfaces. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetTwoSided(self)


    def SetViewDirection(self, value_realInputDataPtr) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetViewDirection(self, value_realInputDataPtr)


    def GetViewDirection(self) -> spRealData:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetViewDirection(self)


    def SetViewDirectionX(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetViewDirectionX(self, value)


    def GetViewDirectionX(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetViewDirectionX(self)


    def SetViewDirectionY(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetViewDirectionY(self, value)


    def GetViewDirectionY(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetViewDirectionY(self)


    def SetViewDirectionZ(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetViewDirectionZ(self, value)


    def GetViewDirectionZ(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetViewDirectionZ(self)


    def SetTexCoordPadding(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_SetTexCoordPadding(self, value)


    def GetTexCoordPadding(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewSettings_GetTexCoordPadding(self)

    __swig_destroy__ = _Simplygon.delete_spImpostorFromSingleViewSettings

_Simplygon.spImpostorFromSingleViewSettings_swigregister(spImpostorFromSingleViewSettings)

def spImpostorFromSingleViewSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spImpostorFromSingleViewSettings_IsClassA(type)

def spImpostorFromSingleViewSettings_SafeCast(other: spObject) -> spImpostorFromSingleViewSettings:
    """! * 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 
    """

    return _Simplygon.spImpostorFromSingleViewSettings_SafeCast(other)

class spImpostorFromSingleViewPipeline(spPipeline):
    """!ImpostorFromSingleViewPipeline provides a pipeline for a impostor from single view impostor processor to be applied on the input scene."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spImpostorFromSingleViewPipeline:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_NewCopy(self)


    def GetImpostorFromSingleViewSettings(self) -> spImpostorFromSingleViewSettings:
        """! * The ImpostorFromSingleViewPipeline settings object containing the imposter settings 
         * from a single view for this pipeline. 
         * @return The ImpostorFromSingleView settings 
        """

        return _Simplygon.spImpostorFromSingleViewPipeline_GetImpostorFromSingleViewSettings(self)

    __swig_destroy__ = _Simplygon.delete_spImpostorFromSingleViewPipeline

_Simplygon.spImpostorFromSingleViewPipeline_swigregister(spImpostorFromSingleViewPipeline)

def spImpostorFromSingleViewPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spImpostorFromSingleViewPipeline_IsClassA(type)

def spImpostorFromSingleViewPipeline_SafeCast(other: spObject) -> spImpostorFromSingleViewPipeline:
    """! * 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 
    """

    return _Simplygon.spImpostorFromSingleViewPipeline_SafeCast(other)

class spBillboardCloudPipeline(spPipeline):
    """!BillboardCloudPipeline provides a pipeline for a billboard cloud impostor processor to be applied on the input scene."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spBillboardCloudPipeline:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spBillboardCloudPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spBillboardCloudPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spBillboardCloudPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spBillboardCloudPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spBillboardCloudPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spBillboardCloudPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spBillboardCloudPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spBillboardCloudPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spBillboardCloudPipeline_NewCopy(self)


    def GetBillboardCloudSettings(self) -> spBillboardCloudSettings:
        """! * The billboard cloud settings object containing the billboard cloud settings for 
         * this pipeline. 
         * @return The billboard cloud settings 
        """

        return _Simplygon.spBillboardCloudPipeline_GetBillboardCloudSettings(self)

    __swig_destroy__ = _Simplygon.delete_spBillboardCloudPipeline

_Simplygon.spBillboardCloudPipeline_swigregister(spBillboardCloudPipeline)

def spBillboardCloudPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spBillboardCloudPipeline_IsClassA(type)

def spBillboardCloudPipeline_SafeCast(other: spObject) -> spBillboardCloudPipeline:
    """! * 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 
    """

    return _Simplygon.spBillboardCloudPipeline_SafeCast(other)

class spBillboardCloudVegetationPipeline(spPipeline):
    """!BillboardCloudPipeline provides a pipeline for a billboard cloud vegetation impostor processor to be applied on the input scene."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spBillboardCloudVegetationPipeline:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_NewCopy(self)


    def GetBillboardCloudSettings(self) -> spBillboardCloudSettings:
        """! * The billboard cloud settings object containing the billboard cloud settings for 
         * this pipeline. 
         * @return The billboard cloud settings 
        """

        return _Simplygon.spBillboardCloudVegetationPipeline_GetBillboardCloudSettings(self)

    __swig_destroy__ = _Simplygon.delete_spBillboardCloudVegetationPipeline

_Simplygon.spBillboardCloudVegetationPipeline_swigregister(spBillboardCloudVegetationPipeline)

def spBillboardCloudVegetationPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spBillboardCloudVegetationPipeline_IsClassA(type)

def spBillboardCloudVegetationPipeline_SafeCast(other: spObject) -> spBillboardCloudVegetationPipeline:
    """! * 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 
    """

    return _Simplygon.spBillboardCloudVegetationPipeline_SafeCast(other)

class spFlipbookPipeline(spPipeline):
    """!FlipbookPipeline provides a pipeline for a flipbook impostor processor to be applied on the input scene."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spFlipbookPipeline:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spFlipbookPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spFlipbookPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spFlipbookPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spFlipbookPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spFlipbookPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFlipbookPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spFlipbookPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spFlipbookPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spFlipbookPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spFlipbookPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spFlipbookPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spFlipbookPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spFlipbookPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spFlipbookPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spFlipbookPipeline_NewCopy(self)


    def GetFlipbookSettings(self) -> spFlipbookSettings:
        """! * The flipbook settings object containing the flipbook settings for this pipeline. 
         * @return The flipbook settings 
        """

        return _Simplygon.spFlipbookPipeline_GetFlipbookSettings(self)

    __swig_destroy__ = _Simplygon.delete_spFlipbookPipeline

_Simplygon.spFlipbookPipeline_swigregister(spFlipbookPipeline)

def spFlipbookPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spFlipbookPipeline_IsClassA(type)

def spFlipbookPipeline_SafeCast(other: spObject) -> spFlipbookPipeline:
    """! * 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 
    """

    return _Simplygon.spFlipbookPipeline_SafeCast(other)

class spFoliageSettings(spSettingsObject):
    """!Settings for the BillboardMode: Foliage"""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spFoliageSettings_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spFoliageSettings:
        """! * 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 
        """

        return _Simplygon.spFoliageSettings_SafeCast(other)

    def ValidateSettings(self) -> bool:
        """! * Validates the current settings values. 
         * @return True if all settings are valid 
        """

        return _Simplygon.spFoliageSettings_ValidateSettings(self)


    def GetErrorString(self) -> str:
        """! * Returns a string describing the error that was found the last time ValidateSettings 
         * was performed. 
         * @return The last string describing the error 
        """

        return _Simplygon.spFoliageSettings_GetErrorString(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFoliageSettings_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFoliageSettings_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFoliageSettings_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFoliageSettings_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spFoliageSettings_SetStringParameter(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * Get a named parameter boolean value. 
         * @param name Parameter name. 
         * @return Parameter value, or false if mismatching type 
        """

        return _Simplygon.spFoliageSettings_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * Get a named parameter integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spFoliageSettings_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * Get a named parameter unsigned integer value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spFoliageSettings_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * Get a named parameter floating point value. 
         * @param name Parameter name. 
         * @return Parameter value, or 0 if mismatching type 
        """

        return _Simplygon.spFoliageSettings_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * Get a named parameter string value. 
         * @param name Parameter name. 
         * @return Parameter value, or null pointer if mismatching type 
        """

        return _Simplygon.spFoliageSettings_GetStringParameter(self, name)


    def ToJSON(self) -> str:
        """! * Get settings as JSON for debugging purposes. 
         * @return All settings as JSON 
        """

        return _Simplygon.spFoliageSettings_ToJSON(self)


    def SetValidateParameterNames(self, validate: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spFoliageSettings_SetValidateParameterNames(self, validate)


    def SetSeparateTrunkAndFoliage(self, value: bool) -> None:
        """! * 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. 
        """

        return _Simplygon.spFoliageSettings_SetSeparateTrunkAndFoliage(self, value)


    def GetSeparateTrunkAndFoliage(self) -> bool:
        """! * 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 
        """

        return _Simplygon.spFoliageSettings_GetSeparateTrunkAndFoliage(self)


    def SetSeparateFoliageTriangleRatio(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFoliageSettings_SetSeparateFoliageTriangleRatio(self, value)


    def GetSeparateFoliageTriangleRatio(self) -> float:
        """! * 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 
        """

        return _Simplygon.spFoliageSettings_GetSeparateFoliageTriangleRatio(self)


    def SetSeparateFoliageTriangleThreshold(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spFoliageSettings_SetSeparateFoliageTriangleThreshold(self, value)


    def GetSeparateFoliageTriangleThreshold(self) -> int:
        """! * 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 
        """

        return _Simplygon.spFoliageSettings_GetSeparateFoliageTriangleThreshold(self)


    def SetSeparateFoliageAreaThreshold(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFoliageSettings_SetSeparateFoliageAreaThreshold(self, value)


    def GetSeparateFoliageAreaThreshold(self) -> float:
        """! * 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 
        """

        return _Simplygon.spFoliageSettings_GetSeparateFoliageAreaThreshold(self)


    def SetSeparateFoliageSizeThreshold(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFoliageSettings_SetSeparateFoliageSizeThreshold(self, value)


    def GetSeparateFoliageSizeThreshold(self) -> float:
        """! * 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 
        """

        return _Simplygon.spFoliageSettings_GetSeparateFoliageSizeThreshold(self)


    def SetTrunkReductionRatio(self, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spFoliageSettings_SetTrunkReductionRatio(self, value)


    def GetTrunkReductionRatio(self) -> float:
        """! * 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 
        """

        return _Simplygon.spFoliageSettings_GetTrunkReductionRatio(self)

    __swig_destroy__ = _Simplygon.delete_spFoliageSettings

_Simplygon.spFoliageSettings_swigregister(spFoliageSettings)

def spFoliageSettings_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spFoliageSettings_IsClassA(type)

def spFoliageSettings_SafeCast(other: spObject) -> spFoliageSettings:
    """! * 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 
    """

    return _Simplygon.spFoliageSettings_SafeCast(other)

class spStringArray(spValueArray):
    """!StringArray is the string implementation of ValueArray. See ValueArray for a description."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spStringArray_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spStringArray:
        """! * 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 
        """

        return _Simplygon.spStringArray_SafeCast(other)

    def SetRealItem(self, id: int, value: float) -> None:
        """! * 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. 
        """

        return _Simplygon.spStringArray_SetRealItem(self, id, value)


    def GetRealItem(self, id: int) -> float:
        """! * 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. 
        """

        return _Simplygon.spStringArray_GetRealItem(self, id)


    def NewCopy(self, copy_data: bool) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spStringArray_NewCopy(self, copy_data)


    def NewPackedCopy(self, index_array: spRidArray) -> spArray:
        """! * 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. 
        """

        return _Simplygon.spStringArray_NewPackedCopy(self, index_array)


    def DeepCopy(self, source: spArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spStringArray_DeepCopy(self, source)


    def IndexedCopy(self, source: spArray, idtable: spRidArray, startId: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spStringArray_IndexedCopy(self, source, idtable, startId)


    def SetTupleSize(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spStringArray_SetTupleSize(self, value)


    def GetTupleSize(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spStringArray_GetTupleSize(self)


    def SetItemCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spStringArray_SetItemCount(self, value)


    def GetItemCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spStringArray_GetItemCount(self)


    def GetMaxItemId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spStringArray_GetMaxItemId(self)


    def Clear(self) -> None:
        """! * Clears the array and sets the tuple count to 0. Tuple size and name remains the 
         * same though. 
        """

        return _Simplygon.spStringArray_Clear(self)


    def IsEmpty(self) -> bool:
        """! * Returns true if the list is empty. 
        """

        return _Simplygon.spStringArray_IsEmpty(self)


    def SetTupleCount(self, value: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spStringArray_SetTupleCount(self, value)


    def GetTupleCount(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spStringArray_GetTupleCount(self)


    def GetMaxTupleId(self) -> int:
        """! * 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. 
        """

        return _Simplygon.spStringArray_GetMaxTupleId(self)


    def GetBaseType(self):
        """! * Returns the id of the basic type that the array is based on The ids are listed 
         * in the BaseTypes enumeration. 
        """

        return _Simplygon.spStringArray_GetBaseType(self)


    def AppendArray(self, source: spArray) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spStringArray_AppendArray(self, source)


    def ExtractTuples(self, dest: spArray, start: int, count: int) -> None:
        """! * 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. 
         *  
        """

        return _Simplygon.spStringArray_ExtractTuples(self, dest, start, count)


    def CopyTuple(self, sourceArray: spArray, dest_id: int, src_id: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spStringArray_CopyTuple(self, sourceArray, dest_id, src_id)


    def CompareTuples(self, otherArray: spArray, tuple_id: int, other_tuple_id: int) -> int:
        """! * 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. 
        """

        return _Simplygon.spStringArray_CompareTuples(self, otherArray, tuple_id, other_tuple_id)


    def CopyRange(self, source_array: spArray, start_dest_id: int, start_src_id: int, count: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spStringArray_CopyRange(self, source_array, start_dest_id, start_src_id, count)


    def SetAlternativeName(self, value: str) -> None:
        """! * A string that can be used to identify the array in collections. 
         * @param value The new alternative name. 
        """

        return _Simplygon.spStringArray_SetAlternativeName(self, value)


    def GetAlternativeName(self) -> str:
        """! * A string that can be used to identify the array in collections. 
        """

        return _Simplygon.spStringArray_GetAlternativeName(self)


    def AddItem(self, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spStringArray_AddItem(self, value)


    def SetItem(self, id: int, value: str) -> None:
        """! * 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. 
        """

        return _Simplygon.spStringArray_SetItem(self, id, value)


    def GetItem(self, id: int) -> str:
        """! * 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(). 
        """

        return _Simplygon.spStringArray_GetItem(self, id)

    __swig_destroy__ = _Simplygon.delete_spStringArray

_Simplygon.spStringArray_swigregister(spStringArray)

def spStringArray_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spStringArray_IsClassA(type)

def spStringArray_SafeCast(other: spObject) -> spStringArray:
    """! * 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 
    """

    return _Simplygon.spStringArray_SafeCast(other)

class spOcclusionMeshPipeline(spPipeline):
    """!OcclusionMeshPipeline provides a pipeline for a single occlusion mesh processor to be applied on the input scene."""

    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def IsClassA(type: str) -> bool:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_IsClassA(type)

    @staticmethod
    def SafeCast(other: spObject) -> spOcclusionMeshPipeline:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_SafeCast(other)

    def RunSceneFromFile(self, input_scene: str, output_scene: str, run_mode):
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshPipeline_RunSceneFromFile(self, input_scene, output_scene, run_mode)


    def RunScene(self, scene: spScene, run_mode):
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshPipeline_RunScene(self, scene, run_mode)


    def AddMaterialCaster(self, MaterialCaster: spMaterialCaster, MaterialIndex: int) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshPipeline_AddMaterialCaster(self, MaterialCaster, MaterialIndex)


    def AddMaterialCasterByType(self, CasterType: str, MaterialIndex: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_AddMaterialCasterByType(self, CasterType, MaterialIndex)


    def GetMaterialCasters(self) -> spObjectCollection:
        """! * The material casters for the pipeline. 
         * @return All material casters 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetMaterialCasters(self)


    def GetMaterialCasterCount(self) -> int:
        """! * Get the number of material casters for the pipeline. 
         * @return Number of material casters 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetMaterialCasterCount(self)


    def GetMaterialCasterByIndex(self, index: int) -> spMaterialCaster:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetMaterialCasterByIndex(self, index)


    def GetPipelineSettings(self) -> spPipelineSettings:
        """! * The settings for the pipeline. 
         * @return Settings object for pipeline 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetPipelineSettings(self)


    def SetBoolParameter(self, name: str, value: bool) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshPipeline_SetBoolParameter(self, name, value)


    def SetIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshPipeline_SetIntParameter(self, name, value)


    def SetUIntParameter(self, name: str, value: int) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshPipeline_SetUIntParameter(self, name, value)


    def SetDoubleParameter(self, name: str, value: float) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshPipeline_SetDoubleParameter(self, name, value)


    def SetStringParameter(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshPipeline_SetStringParameter(self, name, value)


    def SetEnumParameter(self, name: str, value: int, valueEnumType) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshPipeline_SetEnumParameter(self, name, value, valueEnumType)


    def SetParameterFromString(self, name: str, value: str) -> bool:
        """! * 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) 
        """

        return _Simplygon.spOcclusionMeshPipeline_SetParameterFromString(self, name, value)


    def GetBoolParameter(self, name: str) -> bool:
        """! * 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 
         *  
        """

        return _Simplygon.spOcclusionMeshPipeline_GetBoolParameter(self, name)


    def GetIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetIntParameter(self, name)


    def GetUIntParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetUIntParameter(self, name)


    def GetDoubleParameter(self, name: str) -> float:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetDoubleParameter(self, name)


    def GetStringParameter(self, name: str) -> str:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetStringParameter(self, name)


    def GetEnumParameter(self, name: str) -> int:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetEnumParameter(self, name)


    def GetParameterType(self, name: str):
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetParameterType(self, name)


    def GetMappingImageSettings(self) -> spMappingImageSettings:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetMappingImageSettings(self)


    def GetMappingImage(self, materialIndex: int) -> spMappingImage:
        """! * 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 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetMappingImage(self, materialIndex)


    def GetCascadedPipelineByIndex(self, index: int) -> spPipeline:
        """! * The cascaded child pipeline object for the given index. 
         * @param index The index of the cascaded child pipeline. 
         * @return The cascaded child pipeline 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetCascadedPipelineByIndex(self, index)


    def AddCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshPipeline_AddCascadedPipeline(self, pipeline)


    def RemoveCascadedPipeline(self, pipeline: spPipeline) -> None:
        """! * Remove a cascaded child pipeline. 
         * @param pipeline The pipeline to remove from list of cascaded child pipelines. 
         *  
        """

        return _Simplygon.spOcclusionMeshPipeline_RemoveCascadedPipeline(self, pipeline)


    def GetCascadedPipelineCount(self) -> int:
        """! * Get number of cascaded child pipelines. 
         * @return The number of cascaded child pipelines 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetCascadedPipelineCount(self)


    def GetProcessedScene(self) -> spScene:
        """! * The resulting scene from the last execution of this pipeline. 
         * @return The processed scene 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetProcessedScene(self)


    def GetPercentDone(self) -> float:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetPercentDone(self)


    def GetActiveSelectionSets(self, sets: spStringArray) -> None:
        """! * 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. 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetActiveSelectionSets(self, sets)


    def NewCopy(self) -> spPipeline:
        """! * Create a new clone of the pipeline, copying all settings and material casters 
         * as well as creating new copies of all cascaded pipelines. 
        """

        return _Simplygon.spOcclusionMeshPipeline_NewCopy(self)


    def GetOcclusionMeshSettings(self) -> spOcclusionMeshSettings:
        """! * The occlusion mesh settings object containing the occlusion mesh settings for 
         * this pipeline. 
         * @return The occlusion mesh settings 
        """

        return _Simplygon.spOcclusionMeshPipeline_GetOcclusionMeshSettings(self)

    __swig_destroy__ = _Simplygon.delete_spOcclusionMeshPipeline

_Simplygon.spOcclusionMeshPipeline_swigregister(spOcclusionMeshPipeline)

def spOcclusionMeshPipeline_IsClassA(type: str) -> bool:
    """! * 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 
    """

    return _Simplygon.spOcclusionMeshPipeline_IsClassA(type)

def spOcclusionMeshPipeline_SafeCast(other: spObject) -> spOcclusionMeshPipeline:
    """! * 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 
    """

    return _Simplygon.spOcclusionMeshPipeline_SafeCast(other)

class Observer(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def OnProgress(self, subject: spObject, progressPercent: float) -> bool:
        return _Simplygon.Observer_OnProgress(self, subject, progressPercent)

    def OnProcessStarted(self, subject: spObject, name: str) -> None:
        return _Simplygon.Observer_OnProcessStarted(self, subject, name)

    def OnShadingCustomNodeEvaluate(self, subject: spObject):
        return _Simplygon.Observer_OnShadingCustomNodeEvaluate(self, subject)

    def OnShadingCustomNodeGenerateShaderCode(self, subject: spObject, shaderLanguage) -> bool:
        return _Simplygon.Observer_OnShadingCustomNodeGenerateShaderCode(self, subject, shaderLanguage)

    def __init__(self):
        if self.__class__ == Observer:
            _self = None
        else:
            _self = self
        _Simplygon.Observer_swiginit(self, _Simplygon.new_Observer(_self, ))
    __swig_destroy__ = _Simplygon.delete_Observer
    def __disown__(self):
        self.this.disown()
        _Simplygon.disown_Observer(self)
        return weakref.proxy(self)

_Simplygon.Observer_swigregister(Observer)

class ErrorHandler(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")
    __repr__ = _swig_repr

    def HandleError(self, object: spObject, interfaceName: str, methodName: str, errorType: int, errorText: str) -> None:
        return _Simplygon.ErrorHandler_HandleError(self, object, interfaceName, methodName, errorType, errorText)

    def __init__(self):
        if self.__class__ == ErrorHandler:
            _self = None
        else:
            _self = self
        _Simplygon.ErrorHandler_swiginit(self, _Simplygon.new_ErrorHandler(_self, ))
    __swig_destroy__ = _Simplygon.delete_ErrorHandler
    def __disown__(self):
        self.this.disown()
        _Simplygon.disown_ErrorHandler(self)
        return weakref.proxy(self)

_Simplygon.ErrorHandler_swigregister(ErrorHandler)

class ISimplygon(object):
    thisown = property(lambda x: x.this.own(), lambda x, v: x.this.own(v), doc="The membership flag")

    def __init__(self, *args, **kwargs):
        raise AttributeError("No constructor defined")
    __repr__ = _swig_repr

    @staticmethod
    def CreateAPI(libHandle) -> ISimplygonSDK:
        return _Simplygon.ISimplygon_CreateAPI(libHandle)
    __swig_destroy__ = _Simplygon.delete_ISimplygon

    def CreateBoolArray(self) -> spBoolArray:
        return _Simplygon.ISimplygon_CreateBoolArray(self)

    def CreateCharArray(self) -> spCharArray:
        return _Simplygon.ISimplygon_CreateCharArray(self)

    def CreateDoubleArray(self) -> spDoubleArray:
        return _Simplygon.ISimplygon_CreateDoubleArray(self)

    def CreateFloatArray(self) -> spFloatArray:
        return _Simplygon.ISimplygon_CreateFloatArray(self)

    def CreateIntArray(self) -> spIntArray:
        return _Simplygon.ISimplygon_CreateIntArray(self)

    def CreateLongArray(self) -> spLongArray:
        return _Simplygon.ISimplygon_CreateLongArray(self)

    def CreateRealArray(self) -> spRealArray:
        return _Simplygon.ISimplygon_CreateRealArray(self)

    def CreateRidArray(self) -> spRidArray:
        return _Simplygon.ISimplygon_CreateRidArray(self)

    def CreateShortArray(self) -> spShortArray:
        return _Simplygon.ISimplygon_CreateShortArray(self)

    def CreateUnsignedCharArray(self) -> spUnsignedCharArray:
        return _Simplygon.ISimplygon_CreateUnsignedCharArray(self)

    def CreateUnsignedIntArray(self) -> spUnsignedIntArray:
        return _Simplygon.ISimplygon_CreateUnsignedIntArray(self)

    def CreateUnsignedLongArray(self) -> spUnsignedLongArray:
        return _Simplygon.ISimplygon_CreateUnsignedLongArray(self)

    def CreateUnsignedShortArray(self) -> spUnsignedShortArray:
        return _Simplygon.ISimplygon_CreateUnsignedShortArray(self)

    def CreateDirectXRenderer(self) -> spDirectXRenderer:
        return _Simplygon.ISimplygon_CreateDirectXRenderer(self)

    def CreateGeometryData(self) -> spGeometryData:
        return _Simplygon.ISimplygon_CreateGeometryData(self)

    def CreatePackedGeometryData(self) -> spPackedGeometryData:
        return _Simplygon.ISimplygon_CreatePackedGeometryData(self)

    def CreateImageData(self) -> spImageData:
        return _Simplygon.ISimplygon_CreateImageData(self)

    def CreateTable(self) -> spTable:
        return _Simplygon.ISimplygon_CreateTable(self)

    def CreateMaterial(self) -> spMaterial:
        return _Simplygon.ISimplygon_CreateMaterial(self)

    def CreateMaterialTable(self) -> spMaterialTable:
        return _Simplygon.ISimplygon_CreateMaterialTable(self)

    def CreateMatrix4x4(self) -> spMatrix4x4:
        return _Simplygon.ISimplygon_CreateMatrix4x4(self)

    def CreateTransform3(self) -> spTransform3:
        return _Simplygon.ISimplygon_CreateTransform3(self)

    def CreateParameterizer(self) -> spParameterizer:
        return _Simplygon.ISimplygon_CreateParameterizer(self)

    def CreateObjectCollection(self) -> spObjectCollection:
        return _Simplygon.ISimplygon_CreateObjectCollection(self)

    def CreateGeometryDataCollection(self) -> spGeometryDataCollection:
        return _Simplygon.ISimplygon_CreateGeometryDataCollection(self)

    def CreateWavefrontImporter(self) -> spWavefrontImporter:
        return _Simplygon.ISimplygon_CreateWavefrontImporter(self)

    def CreateGLTFImporter(self) -> spGLTFImporter:
        return _Simplygon.ISimplygon_CreateGLTFImporter(self)

    def CreateFBXImporter(self) -> spFBXImporter:
        return _Simplygon.ISimplygon_CreateFBXImporter(self)

    def CreateWavefrontExporter(self) -> spWavefrontExporter:
        return _Simplygon.ISimplygon_CreateWavefrontExporter(self)

    def CreateFBXExporter(self) -> spFBXExporter:
        return _Simplygon.ISimplygon_CreateFBXExporter(self)

    def CreateGLTFExporter(self) -> spGLTFExporter:
        return _Simplygon.ISimplygon_CreateGLTFExporter(self)

    def CreateBinaryImporter(self) -> spBinaryImporter:
        return _Simplygon.ISimplygon_CreateBinaryImporter(self)

    def CreateBinaryExporter(self) -> spBinaryExporter:
        return _Simplygon.ISimplygon_CreateBinaryExporter(self)

    def CreateGeometryValidator(self) -> spGeometryValidator:
        return _Simplygon.ISimplygon_CreateGeometryValidator(self)

    def CreateMaterialCasterSettings(self) -> spMaterialCasterSettings:
        return _Simplygon.ISimplygon_CreateMaterialCasterSettings(self)

    def CreateColorCaster(self) -> spColorCaster:
        return _Simplygon.ISimplygon_CreateColorCaster(self)

    def CreateColorCasterSettings(self) -> spColorCasterSettings:
        return _Simplygon.ISimplygon_CreateColorCasterSettings(self)

    def CreateOpacityCaster(self) -> spOpacityCaster:
        return _Simplygon.ISimplygon_CreateOpacityCaster(self)

    def CreateOpacityCasterSettings(self) -> spOpacityCasterSettings:
        return _Simplygon.ISimplygon_CreateOpacityCasterSettings(self)

    def CreateNormalCaster(self) -> spNormalCaster:
        return _Simplygon.ISimplygon_CreateNormalCaster(self)

    def CreateNormalCasterSettings(self) -> spNormalCasterSettings:
        return _Simplygon.ISimplygon_CreateNormalCasterSettings(self)

    def CreateNormalRepairer(self) -> spNormalRepairer:
        return _Simplygon.ISimplygon_CreateNormalRepairer(self)

    def CreateDisplacementCaster(self) -> spDisplacementCaster:
        return _Simplygon.ISimplygon_CreateDisplacementCaster(self)

    def CreateDisplacementCasterSettings(self) -> spDisplacementCasterSettings:
        return _Simplygon.ISimplygon_CreateDisplacementCasterSettings(self)

    def CreateTangentCalculator(self) -> spTangentCalculator:
        return _Simplygon.ISimplygon_CreateTangentCalculator(self)

    def CreateReductionSettings(self) -> spReductionSettings:
        return _Simplygon.ISimplygon_CreateReductionSettings(self)

    def CreateReductionProcessor(self) -> spReductionProcessor:
        return _Simplygon.ISimplygon_CreateReductionProcessor(self)

    def CreateRemeshingLegacyProcessor(self) -> spRemeshingLegacyProcessor:
        return _Simplygon.ISimplygon_CreateRemeshingLegacyProcessor(self)

    def CreateRemeshingProcessor(self) -> spRemeshingProcessor:
        return _Simplygon.ISimplygon_CreateRemeshingProcessor(self)

    def CreateScene(self) -> spScene:
        return _Simplygon.ISimplygon_CreateScene(self)

    def CreateSceneNode(self) -> spSceneNode:
        return _Simplygon.ISimplygon_CreateSceneNode(self)

    def CreateSceneNodeCollection(self) -> spSceneNodeCollection:
        return _Simplygon.ISimplygon_CreateSceneNodeCollection(self)

    def CreateSceneMesh(self) -> spSceneMesh:
        return _Simplygon.ISimplygon_CreateSceneMesh(self)

    def CreateSceneLodGroup(self) -> spSceneLodGroup:
        return _Simplygon.ISimplygon_CreateSceneLodGroup(self)

    def CreateSceneBone(self) -> spSceneBone:
        return _Simplygon.ISimplygon_CreateSceneBone(self)

    def CreateSceneBoneTable(self) -> spSceneBoneTable:
        return _Simplygon.ISimplygon_CreateSceneBoneTable(self)

    def CreateScenePlane(self) -> spScenePlane:
        return _Simplygon.ISimplygon_CreateScenePlane(self)

    def CreateSceneCamera(self) -> spSceneCamera:
        return _Simplygon.ISimplygon_CreateSceneCamera(self)

    def CreateSceneExporter(self) -> spSceneExporter:
        return _Simplygon.ISimplygon_CreateSceneExporter(self)

    def CreateSceneImporter(self) -> spSceneImporter:
        return _Simplygon.ISimplygon_CreateSceneImporter(self)

    def CreateSelectionSet(self) -> spSelectionSet:
        return _Simplygon.ISimplygon_CreateSelectionSet(self)

    def CreateSelectionSetTable(self) -> spSelectionSetTable:
        return _Simplygon.ISimplygon_CreateSelectionSetTable(self)

    def CreateTexture(self) -> spTexture:
        return _Simplygon.ISimplygon_CreateTexture(self)

    def CreateTextureTable(self) -> spTextureTable:
        return _Simplygon.ISimplygon_CreateTextureTable(self)

    def CreateImageDataImporter(self) -> spImageDataImporter:
        return _Simplygon.ISimplygon_CreateImageDataImporter(self)

    def CreateShadingTextureNode(self) -> spShadingTextureNode:
        return _Simplygon.ISimplygon_CreateShadingTextureNode(self)

    def CreateShadingSwizzlingNode(self) -> spShadingSwizzlingNode:
        return _Simplygon.ISimplygon_CreateShadingSwizzlingNode(self)

    def CreateShadingColorNode(self) -> spShadingColorNode:
        return _Simplygon.ISimplygon_CreateShadingColorNode(self)

    def CreateShadingAddNode(self) -> spShadingAddNode:
        return _Simplygon.ISimplygon_CreateShadingAddNode(self)

    def CreateShadingSubtractNode(self) -> spShadingSubtractNode:
        return _Simplygon.ISimplygon_CreateShadingSubtractNode(self)

    def CreateShadingMultiplyNode(self) -> spShadingMultiplyNode:
        return _Simplygon.ISimplygon_CreateShadingMultiplyNode(self)

    def CreateShadingColorCorrectionNode(self) -> spShadingColorCorrectionNode:
        return _Simplygon.ISimplygon_CreateShadingColorCorrectionNode(self)

    def CreateShadingBrightnessContrastNode(self) -> spShadingBrightnessContrastNode:
        return _Simplygon.ISimplygon_CreateShadingBrightnessContrastNode(self)

    def CreateShadingPowNode(self) -> spShadingPowNode:
        return _Simplygon.ISimplygon_CreateShadingPowNode(self)

    def CreateShadingDivideNode(self) -> spShadingDivideNode:
        return _Simplygon.ISimplygon_CreateShadingDivideNode(self)

    def CreateShadingClampNode(self) -> spShadingClampNode:
        return _Simplygon.ISimplygon_CreateShadingClampNode(self)

    def CreateShadingMaxNode(self) -> spShadingMaxNode:
        return _Simplygon.ISimplygon_CreateShadingMaxNode(self)

    def CreateShadingMinNode(self) -> spShadingMinNode:
        return _Simplygon.ISimplygon_CreateShadingMinNode(self)

    def CreateShadingStepNode(self) -> spShadingStepNode:
        return _Simplygon.ISimplygon_CreateShadingStepNode(self)

    def CreateShadingEqualNode(self) -> spShadingEqualNode:
        return _Simplygon.ISimplygon_CreateShadingEqualNode(self)

    def CreateShadingNotEqualNode(self) -> spShadingNotEqualNode:
        return _Simplygon.ISimplygon_CreateShadingNotEqualNode(self)

    def CreateShadingVertexColorNode(self) -> spShadingVertexColorNode:
        return _Simplygon.ISimplygon_CreateShadingVertexColorNode(self)

    def CreateShadingInterpolateNode(self) -> spShadingInterpolateNode:
        return _Simplygon.ISimplygon_CreateShadingInterpolateNode(self)

    def CreateShadingCustomNode(self) -> spShadingCustomNode:
        return _Simplygon.ISimplygon_CreateShadingCustomNode(self)

    def CreateShadingLayeredBlendNode(self) -> spShadingLayeredBlendNode:
        return _Simplygon.ISimplygon_CreateShadingLayeredBlendNode(self)

    def CreateShadingNormalize3Node(self) -> spShadingNormalize3Node:
        return _Simplygon.ISimplygon_CreateShadingNormalize3Node(self)

    def CreateShadingSqrtNode(self) -> spShadingSqrtNode:
        return _Simplygon.ISimplygon_CreateShadingSqrtNode(self)

    def CreateShadingDot3Node(self) -> spShadingDot3Node:
        return _Simplygon.ISimplygon_CreateShadingDot3Node(self)

    def CreateShadingCross3Node(self) -> spShadingCross3Node:
        return _Simplygon.ISimplygon_CreateShadingCross3Node(self)

    def CreateShadingCosNode(self) -> spShadingCosNode:
        return _Simplygon.ISimplygon_CreateShadingCosNode(self)

    def CreateShadingSinNode(self) -> spShadingSinNode:
        return _Simplygon.ISimplygon_CreateShadingSinNode(self)

    def CreateShadingGreaterThanNode(self) -> spShadingGreaterThanNode:
        return _Simplygon.ISimplygon_CreateShadingGreaterThanNode(self)

    def CreateShadingLessThanNode(self) -> spShadingLessThanNode:
        return _Simplygon.ISimplygon_CreateShadingLessThanNode(self)

    def CreateShadingGeometryFieldNode(self) -> spShadingGeometryFieldNode:
        return _Simplygon.ISimplygon_CreateShadingGeometryFieldNode(self)

    def CreateShaderGenerator(self) -> spShaderGenerator:
        return _Simplygon.ISimplygon_CreateShaderGenerator(self)

    def CreateAggregationProcessor(self) -> spAggregationProcessor:
        return _Simplygon.ISimplygon_CreateAggregationProcessor(self)

    def CreateAggregationSettings(self) -> spAggregationSettings:
        return _Simplygon.ISimplygon_CreateAggregationSettings(self)

    def CreateChartAggregator(self) -> spChartAggregator:
        return _Simplygon.ISimplygon_CreateChartAggregator(self)

    def CreateVertexColorCasterSettings(self) -> spVertexColorCasterSettings:
        return _Simplygon.ISimplygon_CreateVertexColorCasterSettings(self)

    def CreateVertexColorCaster(self) -> spVertexColorCaster:
        return _Simplygon.ISimplygon_CreateVertexColorCaster(self)

    def CreateImageDataExporter(self) -> spImageDataExporter:
        return _Simplygon.ISimplygon_CreateImageDataExporter(self)

    def CreateAmbientOcclusionCaster(self) -> spAmbientOcclusionCaster:
        return _Simplygon.ISimplygon_CreateAmbientOcclusionCaster(self)

    def CreateAmbientOcclusionCasterSettings(self) -> spAmbientOcclusionCasterSettings:
        return _Simplygon.ISimplygon_CreateAmbientOcclusionCasterSettings(self)

    def CreateImpostorProcessor(self) -> spImpostorProcessor:
        return _Simplygon.ISimplygon_CreateImpostorProcessor(self)

    def CreateImpostorSettings(self) -> spImpostorSettings:
        return _Simplygon.ISimplygon_CreateImpostorSettings(self)

    def CreateSurfaceMapper(self) -> spSurfaceMapper:
        return _Simplygon.ISimplygon_CreateSurfaceMapper(self)

    def CreateOcclusionMeshProcessor(self) -> spOcclusionMeshProcessor:
        return _Simplygon.ISimplygon_CreateOcclusionMeshProcessor(self)

    def CreateImageComparer(self) -> spImageComparer:
        return _Simplygon.ISimplygon_CreateImageComparer(self)

    def CreateRecommendedTextureSizeCalculator(self) -> spRecommendedTextureSizeCalculator:
        return _Simplygon.ISimplygon_CreateRecommendedTextureSizeCalculator(self)

    def CreatePartRemover(self) -> spPartRemover:
        return _Simplygon.ISimplygon_CreatePartRemover(self)

    def CreateWelder(self) -> spWelder:
        return _Simplygon.ISimplygon_CreateWelder(self)

    def CreateTJunctionEliminator(self) -> spTJunctionEliminator:
        return _Simplygon.ISimplygon_CreateTJunctionEliminator(self)

    def CreatePipelineBatch(self) -> spPipelineBatch:
        return _Simplygon.ISimplygon_CreatePipelineBatch(self)

    def CreatePipelineSerializer(self) -> spPipelineSerializer:
        return _Simplygon.ISimplygon_CreatePipelineSerializer(self)

    def CreateReductionPipeline(self) -> spReductionPipeline:
        return _Simplygon.ISimplygon_CreateReductionPipeline(self)

    def CreateRemeshingLegacyPipeline(self) -> spRemeshingLegacyPipeline:
        return _Simplygon.ISimplygon_CreateRemeshingLegacyPipeline(self)

    def CreateAggregationPipeline(self) -> spAggregationPipeline:
        return _Simplygon.ISimplygon_CreateAggregationPipeline(self)

    def CreatePipelineSettings(self) -> spPipelineSettings:
        return _Simplygon.ISimplygon_CreatePipelineSettings(self)

    def CreateRemeshingPipeline(self) -> spRemeshingPipeline:
        return _Simplygon.ISimplygon_CreateRemeshingPipeline(self)

    def CreatePassthroughPipeline(self) -> spPassthroughPipeline:
        return _Simplygon.ISimplygon_CreatePassthroughPipeline(self)

    def CreateGeometryDataCaster(self) -> spGeometryDataCaster:
        return _Simplygon.ISimplygon_CreateGeometryDataCaster(self)

    def CreateGeometryDataCasterSettings(self) -> spGeometryDataCasterSettings:
        return _Simplygon.ISimplygon_CreateGeometryDataCasterSettings(self)

    def CreateGenerateLightmapTexCoordSettings(self) -> spGenerateLightmapTexCoordSettings:
        return _Simplygon.ISimplygon_CreateGenerateLightmapTexCoordSettings(self)

    def CreateBillboardCloudSettings(self) -> spBillboardCloudSettings:
        return _Simplygon.ISimplygon_CreateBillboardCloudSettings(self)

    def CreateFlipbookSettings(self) -> spFlipbookSettings:
        return _Simplygon.ISimplygon_CreateFlipbookSettings(self)

    def CreateImpostorFromSingleViewSettings(self) -> spImpostorFromSingleViewSettings:
        return _Simplygon.ISimplygon_CreateImpostorFromSingleViewSettings(self)

    def CreateImpostorFromSingleViewPipeline(self) -> spImpostorFromSingleViewPipeline:
        return _Simplygon.ISimplygon_CreateImpostorFromSingleViewPipeline(self)

    def CreateBillboardCloudPipeline(self) -> spBillboardCloudPipeline:
        return _Simplygon.ISimplygon_CreateBillboardCloudPipeline(self)

    def CreateBillboardCloudVegetationPipeline(self) -> spBillboardCloudVegetationPipeline:
        return _Simplygon.ISimplygon_CreateBillboardCloudVegetationPipeline(self)

    def CreateFlipbookPipeline(self) -> spFlipbookPipeline:
        return _Simplygon.ISimplygon_CreateFlipbookPipeline(self)

    def CreateStringArray(self) -> spStringArray:
        return _Simplygon.ISimplygon_CreateStringArray(self)

    def CreateOcclusionMeshPipeline(self) -> spOcclusionMeshPipeline:
        return _Simplygon.ISimplygon_CreateOcclusionMeshPipeline(self)

    def SetErrorHandler(self, handler):
        return _Simplygon.ISimplygon_SetErrorHandler(self, handler)

    def GetVersion(self) -> str:
        return _Simplygon.ISimplygon_GetVersion(self)

    def SendTelemetry(self, eventCategory: str, integrationName: str, integrationVersion: str, contentJson: str) -> None:
        return _Simplygon.ISimplygon_SendTelemetry(self, eventCategory, integrationName, integrationVersion, contentJson)

    def WarningOccurred(self) -> bool:
        return _Simplygon.ISimplygon_WarningOccurred(self)

    def ErrorOccurred(self) -> bool:
        return _Simplygon.ISimplygon_ErrorOccurred(self)

    def GetWarningMessages(self, messages: spStringArray) -> None:
        return _Simplygon.ISimplygon_GetWarningMessages(self, messages)

    def GetErrorMessages(self, messages: spStringArray) -> None:
        return _Simplygon.ISimplygon_GetErrorMessages(self, messages)

    def ClearWarningMessages(self) -> None:
        return _Simplygon.ISimplygon_ClearWarningMessages(self)

    def ClearErrorMessages(self) -> None:
        return _Simplygon.ISimplygon_ClearErrorMessages(self)

    def SetGlobalBoolSetting(self, setting_name: str, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalBoolSetting(self, setting_name, value)

    def SetGlobalIntSetting(self, setting_name: str, value: int) -> None:
        return _Simplygon.ISimplygon_SetGlobalIntSetting(self, setting_name, value)

    def SetGlobalFloatSetting(self, setting_name: str, value: float) -> None:
        return _Simplygon.ISimplygon_SetGlobalFloatSetting(self, setting_name, value)

    def SetGlobalStringSetting(self, setting_name: str, value: str) -> None:
        return _Simplygon.ISimplygon_SetGlobalStringSetting(self, setting_name, value)

    def GetGlobalBoolSetting(self, setting_name: str) -> bool:
        return _Simplygon.ISimplygon_GetGlobalBoolSetting(self, setting_name)

    def GetGlobalIntSetting(self, setting_name: str) -> int:
        return _Simplygon.ISimplygon_GetGlobalIntSetting(self, setting_name)

    def GetGlobalFloatSetting(self, setting_name: str) -> float:
        return _Simplygon.ISimplygon_GetGlobalFloatSetting(self, setting_name)

    def GetGlobalStringSetting(self, setting_name: str) -> str:
        return _Simplygon.ISimplygon_GetGlobalStringSetting(self, setting_name)

    def SetThreadLocalStringSetting(self, setting_name: str, value: str) -> None:
        return _Simplygon.ISimplygon_SetThreadLocalStringSetting(self, setting_name, value)

    def GetThreadLocalStringSetting(self, setting_name: str) -> str:
        return _Simplygon.ISimplygon_GetThreadLocalStringSetting(self, setting_name)

    def EnableLogToFile(self, *args) -> None:
        return _Simplygon.ISimplygon_EnableLogToFile(self, *args)

    def SetGlobalDefaultTangentCalculatorTypeSetting(self, value) -> None:
        return _Simplygon.ISimplygon_SetGlobalDefaultTangentCalculatorTypeSetting(self, value)

    def GetGlobalDefaultTangentCalculatorTypeSetting(self):
        return _Simplygon.ISimplygon_GetGlobalDefaultTangentCalculatorTypeSetting(self)

    def SetGlobalAllowDirectXSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalAllowDirectXSetting(self, value)

    def GetGlobalAllowDirectXSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalAllowDirectXSetting(self)

    def SetGlobalAllowGPUAccelerationSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalAllowGPUAccelerationSetting(self, value)

    def GetGlobalAllowGPUAccelerationSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalAllowGPUAccelerationSetting(self)

    def SetGlobalAllowTextureSamplingInterpolationSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalAllowTextureSamplingInterpolationSetting(self, value)

    def GetGlobalAllowTextureSamplingInterpolationSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalAllowTextureSamplingInterpolationSetting(self)

    def SetGlobalAllowShadingNetworkCachingSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalAllowShadingNetworkCachingSetting(self, value)

    def GetGlobalAllowShadingNetworkCachingSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalAllowShadingNetworkCachingSetting(self)

    def SetGlobalAllowDistributionLocalFallbackSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalAllowDistributionLocalFallbackSetting(self, value)

    def GetGlobalAllowDistributionLocalFallbackSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalAllowDistributionLocalFallbackSetting(self)

    def SetGlobalUnpackFBXInSimplygonTempDirectorySetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalUnpackFBXInSimplygonTempDirectorySetting(self, value)

    def GetGlobalUnpackFBXInSimplygonTempDirectorySetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalUnpackFBXInSimplygonTempDirectorySetting(self)

    def SetGlobalAutomaticGuidGenerationSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalAutomaticGuidGenerationSetting(self, value)

    def GetGlobalAutomaticGuidGenerationSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalAutomaticGuidGenerationSetting(self)

    def SetGlobalCacheToDiskSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalCacheToDiskSetting(self, value)

    def GetGlobalCacheToDiskSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalCacheToDiskSetting(self)

    def SetGlobalPreventDirectXThreadingOptimizationsSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalPreventDirectXThreadingOptimizationsSetting(self, value)

    def GetGlobalPreventDirectXThreadingOptimizationsSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalPreventDirectXThreadingOptimizationsSetting(self)

    def SetGlobalLogicalCoreLimitSetting(self, value: int) -> None:
        return _Simplygon.ISimplygon_SetGlobalLogicalCoreLimitSetting(self, value)

    def GetGlobalLogicalCoreLimitSetting(self) -> int:
        return _Simplygon.ISimplygon_GetGlobalLogicalCoreLimitSetting(self)

    def SetGlobalMaskFPExceptionsSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalMaskFPExceptionsSetting(self, value)

    def GetGlobalMaskFPExceptionsSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalMaskFPExceptionsSetting(self)

    def SetGlobalValidRealThresholdSetting(self, value: float) -> None:
        return _Simplygon.ISimplygon_SetGlobalValidRealThresholdSetting(self, value)

    def GetGlobalValidRealThresholdSetting(self) -> float:
        return _Simplygon.ISimplygon_GetGlobalValidRealThresholdSetting(self)

    def SetGlobalValidateProcessingSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalValidateProcessingSetting(self, value)

    def GetGlobalValidateProcessingSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalValidateProcessingSetting(self)

    def SetGlobalValidateProcessingAssertOnErrorSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalValidateProcessingAssertOnErrorSetting(self, value)

    def GetGlobalValidateProcessingAssertOnErrorSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalValidateProcessingAssertOnErrorSetting(self)

    def SetGlobalIgnorePNGGammaOnImageLoadSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalIgnorePNGGammaOnImageLoadSetting(self, value)

    def GetGlobalIgnorePNGGammaOnImageLoadSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalIgnorePNGGammaOnImageLoadSetting(self)

    def SetGlobalValidateProcessingDebugLevelSetting(self, value: int) -> None:
        return _Simplygon.ISimplygon_SetGlobalValidateProcessingDebugLevelSetting(self, value)

    def GetGlobalValidateProcessingDebugLevelSetting(self) -> int:
        return _Simplygon.ISimplygon_GetGlobalValidateProcessingDebugLevelSetting(self)

    def SetGlobalValidateProcessingOutputDirectorySetting(self, value: str) -> None:
        return _Simplygon.ISimplygon_SetGlobalValidateProcessingOutputDirectorySetting(self, value)

    def GetGlobalValidateProcessingOutputDirectorySetting(self) -> str:
        return _Simplygon.ISimplygon_GetGlobalValidateProcessingOutputDirectorySetting(self)

    def SetGlobalEnableLogSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalEnableLogSetting(self, value)

    def GetGlobalEnableLogSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalEnableLogSetting(self)

    def SetGlobalLogToFileSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalLogToFileSetting(self, value)

    def GetGlobalLogToFileSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalLogToFileSetting(self)

    def SetGlobalFlushLogPerRowSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalFlushLogPerRowSetting(self, value)

    def GetGlobalFlushLogPerRowSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalFlushLogPerRowSetting(self)

    def SetGlobalLogOutputToTraceWindowSetting(self, value: bool) -> None:
        return _Simplygon.ISimplygon_SetGlobalLogOutputToTraceWindowSetting(self, value)

    def GetGlobalLogOutputToTraceWindowSetting(self) -> bool:
        return _Simplygon.ISimplygon_GetGlobalLogOutputToTraceWindowSetting(self)

    def SetGlobalLogLevelSetting(self, value) -> None:
        return _Simplygon.ISimplygon_SetGlobalLogLevelSetting(self, value)

    def GetGlobalLogLevelSetting(self):
        return _Simplygon.ISimplygon_GetGlobalLogLevelSetting(self)

    def SetGlobalLogDecorationMaskSetting(self, value: int) -> None:
        return _Simplygon.ISimplygon_SetGlobalLogDecorationMaskSetting(self, value)

    def GetGlobalLogDecorationMaskSetting(self) -> int:
        return _Simplygon.ISimplygon_GetGlobalLogDecorationMaskSetting(self)

    def SetGlobalLogFileNameSetting(self, value: str) -> None:
        return _Simplygon.ISimplygon_SetGlobalLogFileNameSetting(self, value)

    def GetGlobalLogFileNameSetting(self) -> str:
        return _Simplygon.ISimplygon_GetGlobalLogFileNameSetting(self)

    def SetGlobalInputSceneValidationActionSetting(self, value) -> None:
        return _Simplygon.ISimplygon_SetGlobalInputSceneValidationActionSetting(self, value)

    def GetGlobalInputSceneValidationActionSetting(self):
        return _Simplygon.ISimplygon_GetGlobalInputSceneValidationActionSetting(self)

    def SetThreadLocalLogFileNameSetting(self, value: str) -> None:
        return _Simplygon.ISimplygon_SetThreadLocalLogFileNameSetting(self, value)

    def GetThreadLocalLogFileNameSetting(self) -> str:
        return _Simplygon.ISimplygon_GetThreadLocalLogFileNameSetting(self)

_Simplygon.ISimplygon_swigregister(ISimplygon)

def ISimplygon_CreateAPI(libHandle) -> ISimplygonSDK:
    return _Simplygon.ISimplygon_CreateAPI(libHandle)


def GetInterfaceVersionHash() -> str:
    return _Simplygon.GetInterfaceVersionHash()

def GetHeaderVersion() -> str:
    return _Simplygon.GetHeaderVersion()

def InitializeSimplygon(SDKPath: str=None, LicenseDataText: str=None) -> ISimplygonSDK:
    return _Simplygon.InitializeSimplygon(SDKPath, LicenseDataText)

def DeinitializeSimplygonThread() -> None:
    return _Simplygon.DeinitializeSimplygonThread()

def GetLastInitializationError():
    return _Simplygon.GetLastInitializationError()

def GetErrorString(error_code) -> str:
    return _Simplygon.GetErrorString(error_code)



