[
  {
    "path": ".appveyor.yml",
    "content": "environment:\n  git_user_email: normand.erwan@protonmail.com\n  git_user_name: NormandErwan\n  auth_token:\n    secure: rAvGzxn8QfY9CapiOocIVsgDya7dnnh3bRzxAGDntS8axguyhTt1nyH7przrm3LF\ninstall: choco install docfx -y\nbuild_script:\n  # Inspired by: https://github.com/docascode/docfx-seed/blob/master/appveyor.yml\n  - ps: |\n        copy README.md Documentation\\index.md\n        docfx Documentation\\docfx.json\n        if ($lastexitcode -ne 0) {\n          throw [System.Exception] \"docfx build failed with exit code $lastexitcode.\"\n        }\n\n        git clone https://github.com/NormandErwan/ArucoUnity -b gh-pages gh-pages -q\n        Remove-Item gh-pages\\* -recurse\n        Copy-Item _site\\* gh-pages -recurse\n\n        git config --global credential.helper store\n        Add-Content \"$env:USERPROFILE\\.git-credentials\" \"https://$($env:auth_token):x-oauth-basic@github.com`n\"\n        git config --global user.email $env:git_user_email\n        git config --global user.name $env:git_user_name\n\n        cd gh-pages\n        git add -A | out-null\n        git commit -m \"Documentation update\" -q\n        git push origin gh-pages -q"
  },
  {
    "path": ".editorconfig",
    "content": "root = true\n\n[*]\nend_of_line = lf\n\n[*.{compute,cs,hlsl,xml}]\nindent_style = space\nindent_size = 4\ntrim_trailing_whitespace = true\n\n[*.cs]\n# See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#normalize_modifiers\ndotnet_style_require_accessibility_modifiers = always:warning\ncsharp_preferred_modifier_order = public,private,protected,internal,static,extern,new,virtual,abstract,sealed,override,readonly,unsafe,volatile,async:warning\ndotnet_style_readonly_field = true:warning\n\n# See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#parentheses\ndotnet_style_parentheses_in_arithmetic_binary_operators = always_for_clarity:suggestion\ndotnet_style_parentheses_in_relational_binary_operators = always_for_clarity:suggestion\ndotnet_style_parentheses_in_other_binary_operators = always_for_clarity:suggestion\ndotnet_style_parentheses_in_other_operators = never_if_unnecessary:suggestion\n\n# See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#expression_level\ndotnet_style_prefer_auto_properties = true:suggestion\ndotnet_style_prefer_is_null_check_over_reference_equality_method = true:suggestion\ndotnet_style_prefer_conditional_expression_over_assignment = true:suggestion\n\n# See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#implicit-and-explicit-types\ncsharp_style_var_for_built_in_types = false:warning\ncsharp_style_var_when_type_is_apparent = true:suggestion\n\n# See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#code_block\ncsharp_prefer_braces = true:warning\n\n# See https://docs.microsoft.com/fr-fr/visualstudio/ide/editorconfig-code-style-settings-reference?view=vs-2017#wrapping\ncsharp_preserve_single_line_statements = false\n\n## Styles\ndotnet_naming_style.pascal_case_style.capitalization = pascal_case\ndotnet_naming_style.camel_case_style.capitalization = camel_case\n\ndotnet_naming_style.interfaces_style.capitalization = pascal_case\ndotnet_naming_style.interfaces_style.required_prefix = I\n\n## Symbols\n# Suppress: EC114\n# The EditorConfig extension is not up to date\ndotnet_naming_symbols.pascal_case_symbols.applicable_kinds = namespace, class, struct, enum, property, method, event, delegate\ndotnet_naming_symbols.pascal_case_symbols.applicable_accessibilities = *\n\ndotnet_naming_symbols.const_static_fields.applicable_kinds = field\ndotnet_naming_symbols.const_static_fields.applicable_accessibilities = *\ndotnet_naming_symbols.const_static_fields.required_modifiers = const, static\n\ndotnet_naming_symbols.camel_case_symbols.applicable_kinds = field, parameter\ndotnet_naming_symbols.camel_case_symbols.applicable_accessibilities = *\n\ndotnet_naming_symbols.interfaces.applicable_kinds = interface\ndotnet_naming_symbols.interfaces.applicable_accessibilities = *\n\n## Rules\ndotnet_naming_rule.pascal_case_naming.symbols = pascal_case_symbols\ndotnet_naming_rule.pascal_case_naming.style = pascal_case_style\ndotnet_naming_rule.pascal_case_naming.severity = warning\n\ndotnet_naming_rule.static_fields_naming.symbols = const_static_fields\ndotnet_naming_rule.static_fields_naming.style = pascal_case_style\ndotnet_naming_rule.static_fields_naming.severity = warning\n\ndotnet_naming_rule.camel_case_naming.symbols = camel_case_symbols\ndotnet_naming_rule.camel_case_naming.style = camel_case_style\ndotnet_naming_rule.camel_case_naming.severity = warning\n\ndotnet_naming_rule.interfaces_naming.symbols = interfaces\ndotnet_naming_rule.interfaces_naming.style = interfaces_style\ndotnet_naming_rule.interfaces_naming.severity = warning"
  },
  {
    "path": ".gitattributes",
    "content": "* text=auto\n\n.gitignore text\n*.asset text eol=crlf\n*.cs text diff=csharp\n*.json text\n*.mat text eol=crlf\n*.md text\n*.meta text eol=crlf\n*.prefab text eol=crlf\n*.rsp text eol=crlf\n*.txt text\n*.xml text diff=html\n*.yml text\n\nPackages/** text eol=crlf\n\n*.gif binary\n*.jpg binary\n*.png binary\n*.unity binary"
  },
  {
    "path": ".gitignore",
    "content": "# ArucoUnity\n\n**/Assets/ArucoUnity/Images*\n**/Assets/ArucoUnity/Calibrations*\n**/Assets/ArucoUnity/CameraParameters*\n**/Assets/ArucoUnity/Plugins*\n\n# Documentation\n\nDocumentation/api/\nDocumentation/index.*\n_site/\nAssets/**/obj*\n\n# OS and IDEs\n\n*.sublime-*\n.DS_Store\n.DS_Store?\n._*\n.Spotlight-V100\n.Trashes\n.vscode\n\n# Unity\n\n[Ll]ibrary/\n[Tt]emp/\n[Oo]bj/\n[Bb]uild/\n[Bb]uilds/\nAssets/AssetStoreTools*\nUnityPackageManager/*\nPackages/*\n\n## Visual Studio cache directory\n.vs/\n\n## Autogenerated VS/MD/Consulo solution and project files\nExportedObj/\n.consulo/\n#*.csproj\n*.unityproj\n#*.sln\n*.suo\n*.tmp\n*.user\n*.userprefs\n*.pidb\n*.booproj\n*.svd\n*.pdb\n*.opendb\n\n## Unity3D generated meta files\n*.pidb.meta\n*.pdb.meta\n\n## Unity3D Generated File On Crash Reports\nsysinfo.txt\n\n## Builds\n*.apk\n*.unitypackage"
  },
  {
    "path": "ArucoUnity.Editor.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{D0E49199-C143-EDFC-AC89-62E94AD9FAA0}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AssemblyName>Assembly-CSharp-Editor</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <TargetFrameworkProfile></TargetFrameworkProfile>\n    <CompilerResponseFile></CompilerResponseFile>\n    <UnityProjectType>Editor:5</UnityProjectType>\n    <UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget>\n    <UnityVersion>2017.4.14f1</UnityVersion>\n    <RootNamespace></RootNamespace>\n    <LangVersion>6</LangVersion>\n  </PropertyGroup>\n  <PropertyGroup>\n    <NoConfig>true</NoConfig>\n    <NoStdLib>true</NoStdLib>\n    <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Temp\\UnityVS_bin\\Debug\\</OutputPath>\n    <IntermediateOutputPath>Temp\\UnityVS_obj\\Debug\\</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_14;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU;</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Temp\\UnityVS_bin\\Release\\</OutputPath>\n    <IntermediateOutputPath>Temp\\UnityVS_obj\\Release\\</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_14;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU;</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"mscorlib\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\mscorlib.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\System.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.XML\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\System.XML.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\System.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\Microsoft.CSharp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\System.Runtime.Serialization.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\System.Xml.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEditor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.CoreModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.AccessibilityModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ParticleSystemModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.PhysicsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.VehiclesModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ClothModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.AIModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.AnimationModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.TextRenderingModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UIModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.TerrainPhysicsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.IMGUIModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ClusterInputModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ClusterRendererModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UNETModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.DirectorModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityAnalyticsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.PerformanceReportingModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityConnectModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.WebModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.WebModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ARModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.VRModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UIElementsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.StyleSheetsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.StyleSheetsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.AssetBundleModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.AudioModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.CrashReportingModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.GameCenterModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.GridModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ImageConversionModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.InputModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.JSONSerializeModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ParticlesLegacyModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticlesLegacyModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Physics2DModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ScreenCaptureModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.SharedInternalsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.SpriteMaskModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.SpriteShapeModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.TerrainModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.TilemapModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityWebRequestModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityWebRequestAudioModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityWebRequestTextureModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityWebRequestWWWModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.VideoModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.WindModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UI\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.UI\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/GUISystem/Editor/UnityEditor.UI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.TestRunner\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/Editor/UnityEditor.TestRunner.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.TestRunner\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll</HintPath>\n    </Reference>\n    <Reference Include=\"nunit.framework\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Timeline\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.Timeline\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Timeline/Editor/UnityEditor.Timeline.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.TreeEditor\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TreeEditor/Editor/UnityEditor.TreeEditor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UIAutomation\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UIAutomation/UnityEngine.UIAutomation.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.UIAutomation\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UIAutomation/Editor/UnityEditor.UIAutomation.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Networking\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.Networking\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Networking/Editor/UnityEditor.Networking.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.GoogleAudioSpatializer\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/Editor/UnityEditor.GoogleAudioSpatializer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.GoogleAudioSpatializer\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.HoloLens\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/Editor/UnityEditor.HoloLens.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.HoloLens\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/RuntimeEditor/UnityEngine.HoloLens.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.SpatialTracking\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/Editor/UnityEditor.SpatialTracking.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.SpatialTracking\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.VR\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityVR/Editor/UnityEditor.VR.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.Graphs\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEditor.Graphs.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.Android.Extensions\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/PlaybackEngines/AndroidPlayer/UnityEditor.Android.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.WindowsStandalone.Extensions\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/PlaybackEngines/windowsstandalonesupport/UnityEditor.WindowsStandalone.Extensions.dll</HintPath>\n    </Reference>\n    <Reference Include=\"SyntaxTree.VisualStudio.Unity.Bridge\">\n      <HintPath>C:/Program Files (x86)/Microsoft Visual Studio Tools for Unity/15.0/Editor/SyntaxTree.VisualStudio.Unity.Bridge.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.Advertisements\">\n      <HintPath>C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.ads@2.0.8/Editor/UnityEditor.Advertisements.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Analytics\">\n      <HintPath>C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.analytics@2.0.13/UnityEngine.Analytics.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.Analytics\">\n      <HintPath>C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.analytics@2.0.13/Editor/UnityEditor.Analytics.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Purchasing\">\n      <HintPath>C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.purchasing@0.0.19/UnityEngine.Purchasing.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor.Purchasing\">\n      <HintPath>C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.purchasing@0.0.19/Editor/UnityEditor.Purchasing.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.StandardEvents\">\n      <HintPath>C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.standardevents@1.0.10/UnityEngine.StandardEvents.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <ProjectReference Include=\"ArucoUnity.csproj\">\n      <Project>{DF8C363E-9189-BE3F-CC58-F45623E9217A}</Project>\n      <Name>ArucoUnity</Name>\n    </ProjectReference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Assets\\Editor\\ExportArucoUnityPackage.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Assets\\StreamingAssets\\ArucoUnity\\ArucoWebcamExample.xml\" />\n    <None Include=\"Assets\\StreamingAssets\\ArucoUnity\\StereoArucoWebcamExample.xml\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Target Name=\"GenerateTargetFrameworkMonikerAttribute\" />\n</Project>\n"
  },
  {
    "path": "ArucoUnity.csproj",
    "content": "﻿<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<Project ToolsVersion=\"4.0\" DefaultTargets=\"Build\" xmlns=\"http://schemas.microsoft.com/developer/msbuild/2003\">\n  <PropertyGroup>\n    <Configuration Condition=\" '$(Configuration)' == '' \">Debug</Configuration>\n    <Platform Condition=\" '$(Platform)' == '' \">AnyCPU</Platform>\n    <ProductVersion>10.0.20506</ProductVersion>\n    <SchemaVersion>2.0</SchemaVersion>\n    <ProjectGuid>{DF8C363E-9189-BE3F-CC58-F45623E9217A}</ProjectGuid>\n    <OutputType>Library</OutputType>\n    <AssemblyName>Assembly-CSharp</AssemblyName>\n    <FileAlignment>512</FileAlignment>\n    <ProjectTypeGuids>{E097FAD1-6243-4DAD-9C02-E9B9EFC3FFC1};{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}</ProjectTypeGuids>\n    <TargetFrameworkIdentifier>.NETFramework</TargetFrameworkIdentifier>\n    <TargetFrameworkVersion>v4.6</TargetFrameworkVersion>\n    <TargetFrameworkProfile></TargetFrameworkProfile>\n    <CompilerResponseFile></CompilerResponseFile>\n    <UnityProjectType>Game:1</UnityProjectType>\n    <UnityBuildTarget>StandaloneWindows64:19</UnityBuildTarget>\n    <UnityVersion>2017.4.14f1</UnityVersion>\n    <RootNamespace></RootNamespace>\n    <LangVersion>6</LangVersion>\n  </PropertyGroup>\n  <PropertyGroup>\n    <NoConfig>true</NoConfig>\n    <NoStdLib>true</NoStdLib>\n    <AddAdditionalExplicitAssemblyReferences>false</AddAdditionalExplicitAssemblyReferences>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Temp\\UnityVS_bin\\Debug\\</OutputPath>\n    <IntermediateOutputPath>Temp\\UnityVS_obj\\Debug\\</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>DEBUG;TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_14;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU;</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <PropertyGroup Condition=\" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' \">\n    <DebugType>pdbonly</DebugType>\n    <Optimize>false</Optimize>\n    <OutputPath>Temp\\UnityVS_bin\\Release\\</OutputPath>\n    <IntermediateOutputPath>Temp\\UnityVS_obj\\Release\\</IntermediateOutputPath>\n    <ErrorReport>prompt</ErrorReport>\n    <WarningLevel>4</WarningLevel>\n    <DefineConstants>TRACE;UNITY_5_3_OR_NEWER;UNITY_5_4_OR_NEWER;UNITY_5_5_OR_NEWER;UNITY_5_6_OR_NEWER;UNITY_2017_1_OR_NEWER;UNITY_2017_2_OR_NEWER;UNITY_2017_3_OR_NEWER;UNITY_2017_4_OR_NEWER;UNITY_2017_4_14;UNITY_2017_4;UNITY_2017;PLATFORM_ARCH_64;UNITY_64;ENABLE_AUDIO;ENABLE_CACHING;ENABLE_CLOTH;ENABLE_DUCK_TYPING;ENABLE_GENERICS;ENABLE_PVR_GI;ENABLE_MICROPHONE;ENABLE_MULTIPLE_DISPLAYS;ENABLE_PHYSICS;ENABLE_SPRITERENDERER_FLIPPING;ENABLE_SPRITES;ENABLE_GRID;ENABLE_TILEMAP;ENABLE_TERRAIN;ENABLE_RAKNET;ENABLE_DIRECTOR;ENABLE_UNET;ENABLE_LZMA;ENABLE_UNITYEVENTS;ENABLE_WEBCAM;ENABLE_WWW;ENABLE_CLOUD_SERVICES_COLLAB;ENABLE_CLOUD_SERVICES_COLLAB_SOFTLOCKS;ENABLE_CLOUD_SERVICES_ADS;ENABLE_CLOUD_HUB;ENABLE_CLOUD_PROJECT_ID;ENABLE_CLOUD_SERVICES_USE_WEBREQUEST;ENABLE_CLOUD_SERVICES_UNET;ENABLE_CLOUD_SERVICES_BUILD;ENABLE_CLOUD_LICENSE;ENABLE_EDITOR_HUB;ENABLE_EDITOR_HUB_LICENSE;ENABLE_WEBSOCKET_CLIENT;ENABLE_DIRECTOR_AUDIO;ENABLE_DIRECTOR_TEXTURE;ENABLE_TIMELINE;ENABLE_EDITOR_METRICS;ENABLE_EDITOR_METRICS_CACHING;ENABLE_NATIVE_ARRAY;ENABLE_SPRITE_MASKING;INCLUDE_DYNAMIC_GI;INCLUDE_GI;ENABLE_MONO_BDWGC;PLATFORM_SUPPORTS_MONO;RENDER_SOFTWARE_CURSOR;INCLUDE_PUBNUB;ENABLE_PLAYMODE_TESTS_RUNNER;ENABLE_VIDEO;ENABLE_RMGUI;ENABLE_PACKMAN;ENABLE_CUSTOM_RENDER_TEXTURE;ENABLE_STYLE_SHEETS;ENABLE_LOCALIZATION;PLATFORM_STANDALONE_WIN;PLATFORM_STANDALONE;UNITY_STANDALONE_WIN;UNITY_STANDALONE;ENABLE_SUBSTANCE;ENABLE_RUNTIME_GI;ENABLE_MOVIES;ENABLE_NETWORK;ENABLE_CRUNCH_TEXTURE_COMPRESSION;ENABLE_UNITYWEBREQUEST;ENABLE_CLOUD_SERVICES;ENABLE_CLOUD_SERVICES_ANALYTICS;ENABLE_CLOUD_SERVICES_PURCHASING;ENABLE_CLOUD_SERVICES_CRASH_REPORTING;ENABLE_EVENT_QUEUE;ENABLE_CLUSTERINPUT;ENABLE_VR;ENABLE_AR;ENABLE_WEBSOCKET_HOST;ENABLE_MONO;NET_4_6;ENABLE_PROFILER;DEBUG;TRACE;UNITY_ASSERTIONS;UNITY_EDITOR;UNITY_EDITOR_64;UNITY_EDITOR_WIN;ENABLE_NATIVE_ARRAY_CHECKS;UNITY_TEAM_LICENSE;ENABLE_VSTU;</DefineConstants>\n    <AllowUnsafeBlocks>true</AllowUnsafeBlocks>\n  </PropertyGroup>\n  <ItemGroup>\n    <Reference Include=\"mscorlib\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\mscorlib.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\System.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.XML\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\System.XML.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Core\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\System.Core.dll</HintPath>\n    </Reference>\n    <Reference Include=\"Microsoft.CSharp\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\Microsoft.CSharp.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Runtime.Serialization\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\System.Runtime.Serialization.dll</HintPath>\n    </Reference>\n    <Reference Include=\"System.Xml.Linq\">\n      <HintPath>C:\\Program Files\\Unity\\Hub\\Editor\\2017.4.14f1\\Editor\\Data\\MonoBleedingEdge\\lib\\mono\\4.6-api\\System.Xml.Linq.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEditor\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEditor.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.CoreModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.CoreModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.AccessibilityModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AccessibilityModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ParticleSystemModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticleSystemModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.PhysicsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.PhysicsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.VehiclesModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VehiclesModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ClothModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClothModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.AIModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AIModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.AnimationModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AnimationModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.TextRenderingModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TextRenderingModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UIModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.TerrainPhysicsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainPhysicsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.IMGUIModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.IMGUIModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ClusterInputModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterInputModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ClusterRendererModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ClusterRendererModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UNETModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UNETModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.DirectorModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.DirectorModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityAnalyticsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityAnalyticsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.PerformanceReportingModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.PerformanceReportingModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityConnectModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityConnectModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.WebModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.WebModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ARModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ARModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.VRModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VRModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UIElementsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UIElementsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.StyleSheetsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.StyleSheetsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.AssetBundleModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AssetBundleModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.AudioModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.AudioModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.CrashReportingModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.CrashReportingModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.GameCenterModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.GameCenterModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.GridModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.GridModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ImageConversionModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ImageConversionModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.InputModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.InputModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.JSONSerializeModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.JSONSerializeModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ParticlesLegacyModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ParticlesLegacyModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Physics2DModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.Physics2DModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.ScreenCaptureModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.ScreenCaptureModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.SharedInternalsModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SharedInternalsModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.SpriteMaskModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteMaskModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.SpriteShapeModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.SpriteShapeModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.TerrainModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TerrainModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.TilemapModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.TilemapModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityWebRequestModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityWebRequestAudioModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestAudioModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityWebRequestTextureModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestTextureModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UnityWebRequestWWWModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.UnityWebRequestWWWModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.VideoModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.VideoModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.WindModule\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/Managed/UnityEngine/UnityEngine.WindModule.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UI\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/GUISystem/UnityEngine.UI.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.TestRunner\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/UnityEngine.TestRunner.dll</HintPath>\n    </Reference>\n    <Reference Include=\"nunit.framework\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/TestRunner/net35/unity-custom/nunit.framework.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Timeline\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Timeline/RuntimeEditor/UnityEngine.Timeline.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.UIAutomation\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UIAutomation/UnityEngine.UIAutomation.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Networking\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/Networking/UnityEngine.Networking.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.GoogleAudioSpatializer\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityGoogleAudioSpatializer/RuntimeEditor/UnityEngine.GoogleAudioSpatializer.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.HoloLens\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnityHoloLens/RuntimeEditor/UnityEngine.HoloLens.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.SpatialTracking\">\n      <HintPath>C:/Program Files/Unity/Hub/Editor/2017.4.14f1/Editor/Data/UnityExtensions/Unity/UnitySpatialTracking/RuntimeEditor/UnityEngine.SpatialTracking.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Analytics\">\n      <HintPath>C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.analytics@2.0.13/UnityEngine.Analytics.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.Purchasing\">\n      <HintPath>C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.purchasing@0.0.19/UnityEngine.Purchasing.dll</HintPath>\n    </Reference>\n    <Reference Include=\"UnityEngine.StandardEvents\">\n      <HintPath>C:/Users/Erwan/AppData/Local/Unity/cache/packages/packages.unity.com/com.unity.standardevents@1.0.10/UnityEngine.StandardEvents.dll</HintPath>\n    </Reference>\n  </ItemGroup>\n  <ItemGroup>\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\ArucoCameraCalibration.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\ArucoCameraCalibrationGeneric.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\ArucoCameraCalibrationGUI.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\CalibrationFlags.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\CalibrationFlagsGeneric.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\Omnidir\\OmnidirCameraCalibration.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\Omnidir\\OmnidirCameraCalibrationFlags.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\Omnidir\\StereoOmnidirCameraCalibration.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\Pinhole\\PinholeCameraCalibration.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\Pinhole\\PinholeCameraCalibrationBase.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\Pinhole\\PinholeCameraCalibrationFlags.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Calibrations\\Pinhole\\StereoPinholeCameraCalibration.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\ArucoCamera.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\ArucoCameraController.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\ArucoWebcam.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Displays\\ArucoCameraDisplay.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Displays\\ArucoCameraDisplayGeneric.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Displays\\IArucoCameraDisplay.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Displays\\MonoArucoCameraDisplay.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Displays\\StereoArucoCameraDisplay.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Displays\\StereoVRArucoCameraDisplay.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\IArucoCamera.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\IArucoCameraController.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Parameters\\ArucoCameraParameters.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Parameters\\ArucoCameraParametersController.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Parameters\\ArucoStereoCameraParameters.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Parameters\\IHasArucoCameraParameters.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\StereoArucoCamera.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\StereoArucoWebcam.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Undistortions\\ArucoCameraUndistortion.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Undistortions\\ArucoCameraUndistortionGeneric.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Undistortions\\IArucoCameraUndistortion.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Undistortions\\Omnidir\\OmnidirCameraUndistortion.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Undistortions\\Omnidir\\OmnidirCameraUndistortionGeneric.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Undistortions\\Omnidir\\StereoOmnidirCameraUndistortion.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Undistortions\\Pinhole\\PinholeCameraUndistortion.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Undistortions\\Pinhole\\PinholeCameraUndistortionGeneric.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Cameras\\Undistortions\\Pinhole\\StereoPinholeCameraUndistortion.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Controller.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\IController.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\ArucoBoard.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\ArucoCharucoBoard.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\ArucoDiamond.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\ArucoGridBoard.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\ArucoMarker.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\ArucoObject.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Displayers\\ArucoObjectCreator.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Displayers\\ArucoObjectDisplayer.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\ArucoCharucoBoardTracker.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\ArucoDiamondTracker.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\ArucoGridBoardTracker.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\ArucoMarkerTracker.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\ArucoObjectDetector.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\ArucoObjectsController.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\ArucoObjectsTracker.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\ArucoObjectTracker.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\DetectorParametersController.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\IArucoObjectsController.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\IArucoObjectsTracker.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Objects\\Trackers\\IHasDetectorParameter.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Aruco\\Aruco.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Aruco\\Board.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Aruco\\CharucoBoard.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Aruco\\DetectorParameters.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Aruco\\Dictionary.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Aruco\\GridBoard.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Calib3d.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Ccalib.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Core.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Exception.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Imgproc.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Mat.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Point2f.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Point3f.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Rect.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Scalar.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Size.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\TermCriteria.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Vec3d.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Cv\\Vec4i.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\HandleCppPtr.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorDouble.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorInt.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorMat.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorPoint2f.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorPoint3f.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorVec3d.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorVec4i.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorVectorInt.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorVectorPoint2f.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorVectorPoint3f.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Plugins\\Std\\VectorVectorVectorPoint2f.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Utilities\\ArucoCameraSeparateThread.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Utilities\\CvMatExtensions.cs\" />\n    <Compile Include=\"Assets\\ArucoUnity\\Scripts\\Utilities\\WebcamController.cs\" />\n  </ItemGroup>\n  <ItemGroup>\n    <None Include=\"Assets\\StreamingAssets\\ArucoUnity\\ArucoWebcamExample.xml\" />\n    <None Include=\"Assets\\StreamingAssets\\ArucoUnity\\StereoArucoWebcamExample.xml\" />\n  </ItemGroup>\n  <Import Project=\"$(MSBuildToolsPath)\\Microsoft.CSharp.targets\" />\n  <Target Name=\"GenerateTargetFrameworkMonikerAttribute\" />\n</Project>\n"
  },
  {
    "path": "ArucoUnity.sln",
    "content": "﻿\nMicrosoft Visual Studio Solution File, Format Version 12.00\n# Visual Studio 2017\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ArucoUnity\", \"ArucoUnity.csproj\", \"{DF8C363E-9189-BE3F-CC58-F45623E9217A}\"\nEndProject\nProject(\"{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}\") = \"ArucoUnity.Editor\", \"ArucoUnity.Editor.csproj\", \"{D0E49199-C143-EDFC-AC89-62E94AD9FAA0}\"\nEndProject\nGlobal\n\tGlobalSection(SolutionConfigurationPlatforms) = preSolution\n\t\tDebug|Any CPU = Debug|Any CPU\n\t\tRelease|Any CPU = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(ProjectConfigurationPlatforms) = postSolution\n\t\t{DF8C363E-9189-BE3F-CC58-F45623E9217A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{DF8C363E-9189-BE3F-CC58-F45623E9217A}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{DF8C363E-9189-BE3F-CC58-F45623E9217A}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{DF8C363E-9189-BE3F-CC58-F45623E9217A}.Release|Any CPU.Build.0 = Release|Any CPU\n\t\t{D0E49199-C143-EDFC-AC89-62E94AD9FAA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU\n\t\t{D0E49199-C143-EDFC-AC89-62E94AD9FAA0}.Debug|Any CPU.Build.0 = Debug|Any CPU\n\t\t{D0E49199-C143-EDFC-AC89-62E94AD9FAA0}.Release|Any CPU.ActiveCfg = Release|Any CPU\n\t\t{D0E49199-C143-EDFC-AC89-62E94AD9FAA0}.Release|Any CPU.Build.0 = Release|Any CPU\n\tEndGlobalSection\n\tGlobalSection(SolutionProperties) = preSolution\n\t\tHideSolutionNode = FALSE\n\tEndGlobalSection\nEndGlobal\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/Black.mat",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!21 &2100000\r\nMaterial:\r\n  serializedVersion: 6\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_Name: Black\r\n  m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_ShaderKeywords: _EMISSION\r\n  m_LightmapFlags: 1\r\n  m_EnableInstancingVariants: 0\r\n  m_DoubleSidedGI: 0\r\n  m_CustomRenderQueue: -1\r\n  stringTagMap: {}\r\n  disabledShaderPasses: []\r\n  m_SavedProperties:\r\n    serializedVersion: 3\r\n    m_TexEnvs:\r\n    - _BumpMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailAlbedoMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailMask:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailNormalMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _EmissionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MainTex:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MetallicGlossMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _OcclusionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _ParallaxMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    m_Floats:\r\n    - _BumpScale: 1\r\n    - _Cutoff: 0.5\r\n    - _DetailNormalMapScale: 1\r\n    - _DstBlend: 0\r\n    - _GlossMapScale: 1\r\n    - _Glossiness: 0.695\r\n    - _GlossyReflections: 1\r\n    - _Metallic: 0.707\r\n    - _Mode: 0\r\n    - _OcclusionStrength: 1\r\n    - _Parallax: 0.02\r\n    - _SmoothnessTextureChannel: 0\r\n    - _SpecularHighlights: 1\r\n    - _SrcBlend: 1\r\n    - _UVSec: 0\r\n    - _ZWrite: 1\r\n    m_Colors:\r\n    - _Color: {r: 0, g: 0, b: 0, a: 1}\r\n    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/Black.mat.meta",
    "content": "fileFormatVersion: 2\r\nguid: 6190c33accc60224bbb0454dd4be9685\r\ntimeCreated: 1484160421\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/Blue.mat",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!21 &2100000\r\nMaterial:\r\n  serializedVersion: 6\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_Name: Blue\r\n  m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_ShaderKeywords: _EMISSION\r\n  m_LightmapFlags: 1\r\n  m_EnableInstancingVariants: 0\r\n  m_DoubleSidedGI: 0\r\n  m_CustomRenderQueue: -1\r\n  stringTagMap: {}\r\n  disabledShaderPasses: []\r\n  m_SavedProperties:\r\n    serializedVersion: 3\r\n    m_TexEnvs:\r\n    - _BumpMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailAlbedoMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailMask:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailNormalMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _EmissionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MainTex:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MetallicGlossMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _OcclusionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _ParallaxMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    m_Floats:\r\n    - _BumpScale: 1\r\n    - _Cutoff: 0.5\r\n    - _DetailNormalMapScale: 1\r\n    - _DstBlend: 0\r\n    - _GlossMapScale: 1\r\n    - _Glossiness: 0.5\r\n    - _GlossyReflections: 1\r\n    - _Metallic: 0\r\n    - _Mode: 0\r\n    - _OcclusionStrength: 1\r\n    - _Parallax: 0.02\r\n    - _SmoothnessTextureChannel: 0\r\n    - _SpecularHighlights: 1\r\n    - _SrcBlend: 1\r\n    - _UVSec: 0\r\n    - _ZWrite: 1\r\n    m_Colors:\r\n    - _Color: {r: 0.14318116, g: 0.11678202, b: 0.88235295, a: 1}\r\n    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/Blue.mat.meta",
    "content": "fileFormatVersion: 2\r\nguid: c90c33d2d9c0e54409acab106b4326fd\r\ntimeCreated: 1484090184\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/Green.mat",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!21 &2100000\r\nMaterial:\r\n  serializedVersion: 6\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_Name: Green\r\n  m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_ShaderKeywords: _EMISSION\r\n  m_LightmapFlags: 1\r\n  m_EnableInstancingVariants: 0\r\n  m_DoubleSidedGI: 0\r\n  m_CustomRenderQueue: -1\r\n  stringTagMap: {}\r\n  disabledShaderPasses: []\r\n  m_SavedProperties:\r\n    serializedVersion: 3\r\n    m_TexEnvs:\r\n    - _BumpMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailAlbedoMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailMask:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailNormalMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _EmissionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MainTex:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MetallicGlossMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _OcclusionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _ParallaxMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    m_Floats:\r\n    - _BumpScale: 1\r\n    - _Cutoff: 0.5\r\n    - _DetailNormalMapScale: 1\r\n    - _DstBlend: 0\r\n    - _GlossMapScale: 1\r\n    - _Glossiness: 0.5\r\n    - _GlossyReflections: 1\r\n    - _Metallic: 0\r\n    - _Mode: 0\r\n    - _OcclusionStrength: 1\r\n    - _Parallax: 0.02\r\n    - _SmoothnessTextureChannel: 0\r\n    - _SpecularHighlights: 1\r\n    - _SrcBlend: 1\r\n    - _UVSec: 0\r\n    - _ZWrite: 1\r\n    m_Colors:\r\n    - _Color: {r: 0.26816607, g: 0.85294116, b: 0.037629742, a: 1}\r\n    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/Green.mat.meta",
    "content": "fileFormatVersion: 2\r\nguid: 34e890fc50f03814daac3dd16e73b140\r\ntimeCreated: 1484090078\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/Red.mat",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!21 &2100000\r\nMaterial:\r\n  serializedVersion: 6\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_Name: Red\r\n  m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_ShaderKeywords: _EMISSION\r\n  m_LightmapFlags: 1\r\n  m_EnableInstancingVariants: 0\r\n  m_DoubleSidedGI: 0\r\n  m_CustomRenderQueue: -1\r\n  stringTagMap: {}\r\n  disabledShaderPasses: []\r\n  m_SavedProperties:\r\n    serializedVersion: 3\r\n    m_TexEnvs:\r\n    - _BumpMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailAlbedoMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailMask:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailNormalMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _EmissionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MainTex:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MetallicGlossMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _OcclusionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _ParallaxMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    m_Floats:\r\n    - _BumpScale: 1\r\n    - _Cutoff: 0.5\r\n    - _DetailNormalMapScale: 1\r\n    - _DstBlend: 0\r\n    - _GlossMapScale: 1\r\n    - _Glossiness: 0.5\r\n    - _GlossyReflections: 1\r\n    - _Metallic: 0\r\n    - _Mode: 0\r\n    - _OcclusionStrength: 1\r\n    - _Parallax: 0.02\r\n    - _SmoothnessTextureChannel: 0\r\n    - _SpecularHighlights: 1\r\n    - _SrcBlend: 1\r\n    - _UVSec: 0\r\n    - _ZWrite: 1\r\n    m_Colors:\r\n    - _Color: {r: 0.83823526, g: 0.049307954, b: 0.049307954, a: 1}\r\n    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/Red.mat.meta",
    "content": "fileFormatVersion: 2\r\nguid: edff0e56dd5f1424688617c697177ece\r\ntimeCreated: 1484090179\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/TransparentRed.mat",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!21 &2100000\r\nMaterial:\r\n  serializedVersion: 6\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_Name: TransparentRed\r\n  m_Shader: {fileID: 46, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_ShaderKeywords: _ALPHAPREMULTIPLY_ON _EMISSION\r\n  m_LightmapFlags: 1\r\n  m_EnableInstancingVariants: 0\r\n  m_DoubleSidedGI: 0\r\n  m_CustomRenderQueue: 3000\r\n  stringTagMap:\r\n    RenderType: Transparent\r\n  disabledShaderPasses: []\r\n  m_SavedProperties:\r\n    serializedVersion: 3\r\n    m_TexEnvs:\r\n    - _BumpMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailAlbedoMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailMask:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailNormalMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _EmissionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MainTex:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MetallicGlossMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _OcclusionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _ParallaxMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    m_Floats:\r\n    - _BumpScale: 1\r\n    - _Cutoff: 0.5\r\n    - _DetailNormalMapScale: 1\r\n    - _DstBlend: 10\r\n    - _GlossMapScale: 1\r\n    - _Glossiness: 0.5\r\n    - _GlossyReflections: 1\r\n    - _Metallic: 0\r\n    - _Mode: 3\r\n    - _OcclusionStrength: 1\r\n    - _Parallax: 0.02\r\n    - _SmoothnessTextureChannel: 0\r\n    - _SpecularHighlights: 1\r\n    - _SrcBlend: 1\r\n    - _UVSec: 0\r\n    - _ZWrite: 0\r\n    m_Colors:\r\n    - _Color: {r: 1, g: 0, b: 0, a: 0.19607843}\r\n    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/TransparentRed.mat.meta",
    "content": "fileFormatVersion: 2\r\nguid: ce995bb8fb0591f419ea7d43d1199afe\r\ntimeCreated: 1477406477\r\nlicenseType: Pro\r\nNativeFormatImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/UnlitTexture.mat",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!21 &2100000\r\nMaterial:\r\n  serializedVersion: 6\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_Name: UnlitTexture\r\n  m_Shader: {fileID: 10752, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_ShaderKeywords: _EMISSION\r\n  m_LightmapFlags: 1\r\n  m_EnableInstancingVariants: 0\r\n  m_DoubleSidedGI: 0\r\n  m_CustomRenderQueue: -1\r\n  stringTagMap: {}\r\n  disabledShaderPasses: []\r\n  m_SavedProperties:\r\n    serializedVersion: 3\r\n    m_TexEnvs:\r\n    - _BumpMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailAlbedoMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailMask:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _DetailNormalMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _EmissionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MainTex:\r\n        m_Texture: {fileID: 2800000, guid: d263dba086ea0a8469cbf24719fc7002, type: 3}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _MetallicGlossMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _OcclusionMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    - _ParallaxMap:\r\n        m_Texture: {fileID: 0}\r\n        m_Scale: {x: 1, y: 1}\r\n        m_Offset: {x: 0, y: 0}\r\n    m_Floats:\r\n    - _BumpScale: 1\r\n    - _Cutoff: 0.5\r\n    - _DetailNormalMapScale: 1\r\n    - _DstBlend: 0\r\n    - _GlossMapScale: 1\r\n    - _Glossiness: 0.5\r\n    - _GlossyReflections: 1\r\n    - _Metallic: 0\r\n    - _Mode: 0\r\n    - _OcclusionStrength: 1\r\n    - _Parallax: 0.02\r\n    - _SmoothnessTextureChannel: 0\r\n    - _SpecularHighlights: 1\r\n    - _SrcBlend: 1\r\n    - _UVSec: 0\r\n    - _ZWrite: 1\r\n    m_Colors:\r\n    - _Color: {r: 1, g: 1, b: 1, a: 1}\r\n    - _EmissionColor: {r: 0, g: 0, b: 0, a: 1}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials/UnlitTexture.mat.meta",
    "content": "fileFormatVersion: 2\r\nguid: a937e1f0eb227c44ebbdf6578da8c572\r\ntimeCreated: 1479757966\r\nlicenseType: Pro\r\nNativeFormatImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Materials.meta",
    "content": "fileFormatVersion: 2\r\nguid: 9f23006cfd1f3bd4987f776e583ad967\r\nfolderAsset: yes\r\ntimeCreated: 1477406462\r\nlicenseType: Pro\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations/ArucoCameraCalibrationGUI.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1001 &100100000\r\nPrefab:\r\n  m_ObjectHideFlags: 1\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications: []\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 0}\r\n  m_RootGameObject: {fileID: 1522649181537600}\r\n  m_IsPrefabParent: 1\r\n--- !u!1 &1204266652295122\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224597920615529612}\r\n  - component: {fileID: 114749267454286240}\r\n  m_Layer: 0\r\n  m_Name: CalibrationButtons\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1240726913532800\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224128273805902562}\r\n  - component: {fileID: 222882260662199102}\r\n  - component: {fileID: 114957343417044190}\r\n  m_Layer: 0\r\n  m_Name: Text\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1286907453202508\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224456132469896268}\r\n  - component: {fileID: 222754602470142944}\r\n  - component: {fileID: 114803774593854036}\r\n  - component: {fileID: 114449490830645698}\r\n  - component: {fileID: 114734750577440894}\r\n  m_Layer: 0\r\n  m_Name: ResetButton\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1287661284403720\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224089052195935730}\r\n  - component: {fileID: 222336901271446468}\r\n  - component: {fileID: 114689996810644530}\r\n  - component: {fileID: 114363236922486004}\r\n  - component: {fileID: 114797022340791080}\r\n  m_Layer: 0\r\n  m_Name: AddImagesButton\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1299933135069082\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224455664766988868}\r\n  m_Layer: 0\r\n  m_Name: ArucoCameraImages\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1331403283991896\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224870151546417610}\r\n  - component: {fileID: 222396420443960968}\r\n  - component: {fileID: 114023500679225480}\r\n  - component: {fileID: 114943742696020814}\r\n  - component: {fileID: 114504283703635730}\r\n  m_Layer: 0\r\n  m_Name: CalibrateButton\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1374436642224286\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224500930484029984}\r\n  - component: {fileID: 222673927580719158}\r\n  - component: {fileID: 114043367593250692}\r\n  m_Layer: 0\r\n  m_Name: Text\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1522649181537600\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224187818345042460}\r\n  - component: {fileID: 223287078443635166}\r\n  - component: {fileID: 114375293875652280}\r\n  - component: {fileID: 114559322710731554}\r\n  - component: {fileID: 114680838840418534}\r\n  m_Layer: 0\r\n  m_Name: ArucoCameraCalibrationGUI\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1645301085675522\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224354081902056526}\r\n  - component: {fileID: 222397243288984880}\r\n  - component: {fileID: 114480577296959298}\r\n  - component: {fileID: 114411881691531006}\r\n  m_Layer: 0\r\n  m_Name: ImagesCountText\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1649973171149934\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224816888888654422}\r\n  - component: {fileID: 222888581635740192}\r\n  - component: {fileID: 114139504794437290}\r\n  m_Layer: 0\r\n  m_Name: Text\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1703110363387122\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 224190136141352184}\r\n  - component: {fileID: 222981599754570666}\r\n  - component: {fileID: 114390200818231822}\r\n  - component: {fileID: 114428696961855108}\r\n  m_Layer: 0\r\n  m_Name: CalibrationStatusText\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!114 &114023500679225480\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1331403283991896}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Material: {fileID: 0}\r\n  m_Color: {r: 1, g: 1, b: 1, a: 1}\r\n  m_RaycastTarget: 1\r\n  m_OnCullStateChanged:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,\r\n      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\r\n  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_Type: 1\r\n  m_PreserveAspect: 0\r\n  m_FillCenter: 1\r\n  m_FillMethod: 4\r\n  m_FillAmount: 1\r\n  m_FillClockwise: 1\r\n  m_FillOrigin: 0\r\n--- !u!114 &114043367593250692\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1374436642224286}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Material: {fileID: 0}\r\n  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}\r\n  m_RaycastTarget: 1\r\n  m_OnCullStateChanged:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,\r\n      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\r\n  m_FontData:\r\n    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}\r\n    m_FontSize: 15\r\n    m_FontStyle: 0\r\n    m_BestFit: 0\r\n    m_MinSize: 1\r\n    m_MaxSize: 40\r\n    m_Alignment: 4\r\n    m_AlignByGeometry: 0\r\n    m_RichText: 1\r\n    m_HorizontalOverflow: 0\r\n    m_VerticalOverflow: 0\r\n    m_LineSpacing: 1\r\n  m_Text: Calibrate\r\n--- !u!114 &114139504794437290\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1649973171149934}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Material: {fileID: 0}\r\n  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}\r\n  m_RaycastTarget: 1\r\n  m_OnCullStateChanged:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,\r\n      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\r\n  m_FontData:\r\n    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}\r\n    m_FontSize: 15\r\n    m_FontStyle: 0\r\n    m_BestFit: 0\r\n    m_MinSize: 1\r\n    m_MaxSize: 40\r\n    m_Alignment: 4\r\n    m_AlignByGeometry: 0\r\n    m_RichText: 1\r\n    m_HorizontalOverflow: 0\r\n    m_VerticalOverflow: 0\r\n    m_LineSpacing: 1\r\n  m_Text: Add Images\r\n--- !u!114 &114363236922486004\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1287661284403720}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Navigation:\r\n    m_Mode: 3\r\n    m_SelectOnUp: {fileID: 0}\r\n    m_SelectOnDown: {fileID: 0}\r\n    m_SelectOnLeft: {fileID: 0}\r\n    m_SelectOnRight: {fileID: 0}\r\n  m_Transition: 1\r\n  m_Colors:\r\n    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}\r\n    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}\r\n    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}\r\n    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}\r\n    m_ColorMultiplier: 1\r\n    m_FadeDuration: 0.1\r\n  m_SpriteState:\r\n    m_HighlightedSprite: {fileID: 0}\r\n    m_PressedSprite: {fileID: 0}\r\n    m_DisabledSprite: {fileID: 0}\r\n  m_AnimationTriggers:\r\n    m_NormalTrigger: Normal\r\n    m_HighlightedTrigger: Highlighted\r\n    m_PressedTrigger: Pressed\r\n    m_DisabledTrigger: Disabled\r\n  m_Interactable: 1\r\n  m_TargetGraphic: {fileID: 114689996810644530}\r\n  m_OnClick:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,\r\n      Culture=neutral, PublicKeyToken=null\r\n--- !u!114 &114375293875652280\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1522649181537600}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1980459831, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_UiScaleMode: 1\r\n  m_ReferencePixelsPerUnit: 100\r\n  m_ScaleFactor: 1\r\n  m_ReferenceResolution: {x: 800, y: 600}\r\n  m_ScreenMatchMode: 0\r\n  m_MatchWidthOrHeight: 0.5\r\n  m_PhysicalUnit: 3\r\n  m_FallbackScreenDPI: 96\r\n  m_DefaultSpriteDPI: 96\r\n  m_DynamicPixelsPerUnit: 1\r\n--- !u!114 &114390200818231822\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1703110363387122}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Material: {fileID: 0}\r\n  m_Color: {r: 1, g: 1, b: 1, a: 1}\r\n  m_RaycastTarget: 1\r\n  m_OnCullStateChanged:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,\r\n      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\r\n  m_FontData:\r\n    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}\r\n    m_FontSize: 15\r\n    m_FontStyle: 0\r\n    m_BestFit: 0\r\n    m_MinSize: 1\r\n    m_MaxSize: 40\r\n    m_Alignment: 0\r\n    m_AlignByGeometry: 0\r\n    m_RichText: 1\r\n    m_HorizontalOverflow: 0\r\n    m_VerticalOverflow: 0\r\n    m_LineSpacing: 1\r\n  m_Text: 'Calibration status : stopped'\r\n--- !u!114 &114411881691531006\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1645301085675522}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_IgnoreLayout: 0\r\n  m_MinWidth: -1\r\n  m_MinHeight: -1\r\n  m_PreferredWidth: -1\r\n  m_PreferredHeight: 60\r\n  m_FlexibleWidth: -1\r\n  m_FlexibleHeight: -1\r\n  m_LayoutPriority: 1\r\n--- !u!114 &114428696961855108\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1703110363387122}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_IgnoreLayout: 0\r\n  m_MinWidth: -1\r\n  m_MinHeight: -1\r\n  m_PreferredWidth: -1\r\n  m_PreferredHeight: 60\r\n  m_FlexibleWidth: -1\r\n  m_FlexibleHeight: -1\r\n  m_LayoutPriority: 1\r\n--- !u!114 &114449490830645698\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1286907453202508}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Navigation:\r\n    m_Mode: 3\r\n    m_SelectOnUp: {fileID: 0}\r\n    m_SelectOnDown: {fileID: 0}\r\n    m_SelectOnLeft: {fileID: 0}\r\n    m_SelectOnRight: {fileID: 0}\r\n  m_Transition: 1\r\n  m_Colors:\r\n    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}\r\n    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}\r\n    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}\r\n    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}\r\n    m_ColorMultiplier: 1\r\n    m_FadeDuration: 0.1\r\n  m_SpriteState:\r\n    m_HighlightedSprite: {fileID: 0}\r\n    m_PressedSprite: {fileID: 0}\r\n    m_DisabledSprite: {fileID: 0}\r\n  m_AnimationTriggers:\r\n    m_NormalTrigger: Normal\r\n    m_HighlightedTrigger: Highlighted\r\n    m_PressedTrigger: Pressed\r\n    m_DisabledTrigger: Disabled\r\n  m_Interactable: 1\r\n  m_TargetGraphic: {fileID: 114803774593854036}\r\n  m_OnClick:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,\r\n      Culture=neutral, PublicKeyToken=null\r\n--- !u!114 &114480577296959298\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1645301085675522}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Material: {fileID: 0}\r\n  m_Color: {r: 1, g: 1, b: 1, a: 1}\r\n  m_RaycastTarget: 1\r\n  m_OnCullStateChanged:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,\r\n      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\r\n  m_FontData:\r\n    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}\r\n    m_FontSize: 15\r\n    m_FontStyle: 0\r\n    m_BestFit: 0\r\n    m_MinSize: 1\r\n    m_MaxSize: 40\r\n    m_Alignment: 0\r\n    m_AlignByGeometry: 0\r\n    m_RichText: 1\r\n    m_HorizontalOverflow: 0\r\n    m_VerticalOverflow: 0\r\n    m_LineSpacing: 1\r\n  m_Text: 'Images count: 000'\r\n--- !u!114 &114504283703635730\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1331403283991896}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_IgnoreLayout: 0\r\n  m_MinWidth: -1\r\n  m_MinHeight: -1\r\n  m_PreferredWidth: -1\r\n  m_PreferredHeight: 30\r\n  m_FlexibleWidth: -1\r\n  m_FlexibleHeight: -1\r\n  m_LayoutPriority: 1\r\n--- !u!114 &114559322710731554\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1522649181537600}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1301386320, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_IgnoreReversedGraphics: 1\r\n  m_BlockingObjects: 0\r\n  m_BlockingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294967295\r\n--- !u!114 &114680838840418534\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1522649181537600}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: ede7fb9eabbd29442941c6491f769102, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoCameraCalibration: {fileID: 0}\r\n  arucoCameraImagesRect: {fileID: 224455664766988868}\r\n  addImagesButton: {fileID: 114363236922486004}\r\n  imagesCountText: {fileID: 114480577296959298}\r\n  calibrateButton: {fileID: 114943742696020814}\r\n  calibrationStatusText: {fileID: 114390200818231822}\r\n  resetButton: {fileID: 114449490830645698}\r\n--- !u!114 &114689996810644530\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1287661284403720}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Material: {fileID: 0}\r\n  m_Color: {r: 1, g: 1, b: 1, a: 1}\r\n  m_RaycastTarget: 1\r\n  m_OnCullStateChanged:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,\r\n      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\r\n  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_Type: 1\r\n  m_PreserveAspect: 0\r\n  m_FillCenter: 1\r\n  m_FillMethod: 4\r\n  m_FillAmount: 1\r\n  m_FillClockwise: 1\r\n  m_FillOrigin: 0\r\n--- !u!114 &114734750577440894\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1286907453202508}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_IgnoreLayout: 1\r\n  m_MinWidth: -1\r\n  m_MinHeight: -1\r\n  m_PreferredWidth: -1\r\n  m_PreferredHeight: -1\r\n  m_FlexibleWidth: -1\r\n  m_FlexibleHeight: -1\r\n  m_LayoutPriority: 1\r\n--- !u!114 &114749267454286240\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1204266652295122}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1297475563, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Padding:\r\n    m_Left: 5\r\n    m_Right: 5\r\n    m_Top: 5\r\n    m_Bottom: 5\r\n  m_ChildAlignment: 0\r\n  m_Spacing: 10\r\n  m_ChildForceExpandWidth: 1\r\n  m_ChildForceExpandHeight: 0\r\n  m_ChildControlWidth: 1\r\n  m_ChildControlHeight: 1\r\n--- !u!114 &114797022340791080\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1287661284403720}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1679637790, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_IgnoreLayout: 0\r\n  m_MinWidth: -1\r\n  m_MinHeight: -1\r\n  m_PreferredWidth: -1\r\n  m_PreferredHeight: 30\r\n  m_FlexibleWidth: -1\r\n  m_FlexibleHeight: -1\r\n  m_LayoutPriority: 1\r\n--- !u!114 &114803774593854036\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1286907453202508}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: -765806418, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Material: {fileID: 0}\r\n  m_Color: {r: 1, g: 1, b: 1, a: 1}\r\n  m_RaycastTarget: 1\r\n  m_OnCullStateChanged:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,\r\n      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\r\n  m_Sprite: {fileID: 10905, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_Type: 1\r\n  m_PreserveAspect: 0\r\n  m_FillCenter: 1\r\n  m_FillMethod: 4\r\n  m_FillAmount: 1\r\n  m_FillClockwise: 1\r\n  m_FillOrigin: 0\r\n--- !u!114 &114943742696020814\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1331403283991896}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1392445389, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Navigation:\r\n    m_Mode: 3\r\n    m_SelectOnUp: {fileID: 0}\r\n    m_SelectOnDown: {fileID: 0}\r\n    m_SelectOnLeft: {fileID: 0}\r\n    m_SelectOnRight: {fileID: 0}\r\n  m_Transition: 1\r\n  m_Colors:\r\n    m_NormalColor: {r: 1, g: 1, b: 1, a: 1}\r\n    m_HighlightedColor: {r: 0.9607843, g: 0.9607843, b: 0.9607843, a: 1}\r\n    m_PressedColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 1}\r\n    m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608}\r\n    m_ColorMultiplier: 1\r\n    m_FadeDuration: 0.1\r\n  m_SpriteState:\r\n    m_HighlightedSprite: {fileID: 0}\r\n    m_PressedSprite: {fileID: 0}\r\n    m_DisabledSprite: {fileID: 0}\r\n  m_AnimationTriggers:\r\n    m_NormalTrigger: Normal\r\n    m_HighlightedTrigger: Highlighted\r\n    m_PressedTrigger: Pressed\r\n    m_DisabledTrigger: Disabled\r\n  m_Interactable: 1\r\n  m_TargetGraphic: {fileID: 114023500679225480}\r\n  m_OnClick:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.Button+ButtonClickedEvent, UnityEngine.UI, Version=1.0.0.0,\r\n      Culture=neutral, PublicKeyToken=null\r\n--- !u!114 &114957343417044190\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1240726913532800}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 708705254, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_Material: {fileID: 0}\r\n  m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1}\r\n  m_RaycastTarget: 1\r\n  m_OnCullStateChanged:\r\n    m_PersistentCalls:\r\n      m_Calls: []\r\n    m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,\r\n      Version=1.0.0.0, Culture=neutral, PublicKeyToken=null\r\n  m_FontData:\r\n    m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0}\r\n    m_FontSize: 15\r\n    m_FontStyle: 0\r\n    m_BestFit: 0\r\n    m_MinSize: 1\r\n    m_MaxSize: 40\r\n    m_Alignment: 4\r\n    m_AlignByGeometry: 0\r\n    m_RichText: 1\r\n    m_HorizontalOverflow: 0\r\n    m_VerticalOverflow: 0\r\n    m_LineSpacing: 1\r\n  m_Text: Reset\r\n--- !u!222 &222336901271446468\r\nCanvasRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1287661284403720}\r\n--- !u!222 &222396420443960968\r\nCanvasRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1331403283991896}\r\n--- !u!222 &222397243288984880\r\nCanvasRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1645301085675522}\r\n--- !u!222 &222673927580719158\r\nCanvasRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1374436642224286}\r\n--- !u!222 &222754602470142944\r\nCanvasRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1286907453202508}\r\n--- !u!222 &222882260662199102\r\nCanvasRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1240726913532800}\r\n--- !u!222 &222888581635740192\r\nCanvasRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1649973171149934}\r\n--- !u!222 &222981599754570666\r\nCanvasRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1703110363387122}\r\n--- !u!223 &223287078443635166\r\nCanvas:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1522649181537600}\r\n  m_Enabled: 1\r\n  serializedVersion: 3\r\n  m_RenderMode: 0\r\n  m_Camera: {fileID: 0}\r\n  m_PlaneDistance: 100\r\n  m_PixelPerfect: 0\r\n  m_ReceivesEvents: 1\r\n  m_OverrideSorting: 0\r\n  m_OverridePixelPerfect: 0\r\n  m_SortingBucketNormalizedSize: 0\r\n  m_AdditionalShaderChannelsFlag: 0\r\n  m_SortingLayerID: 0\r\n  m_SortingOrder: 0\r\n  m_TargetDisplay: 0\r\n--- !u!224 &224089052195935730\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1287661284403720}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 224816888888654422}\r\n  m_Father: {fileID: 224597920615529612}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 0, y: 0}\r\n  m_AnchorMax: {x: 0, y: 0}\r\n  m_AnchoredPosition: {x: 0, y: 0}\r\n  m_SizeDelta: {x: 0, y: 0}\r\n  m_Pivot: {x: 0.5, y: 1}\r\n--- !u!224 &224128273805902562\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1240726913532800}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 224456132469896268}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 0, y: 0}\r\n  m_AnchorMax: {x: 1, y: 1}\r\n  m_AnchoredPosition: {x: 0, y: 0}\r\n  m_SizeDelta: {x: 0, y: 0}\r\n  m_Pivot: {x: 0.5, y: 0.5}\r\n--- !u!224 &224187818345042460\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1522649181537600}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 0, y: 0, z: 0}\r\n  m_Children:\r\n  - {fileID: 224455664766988868}\r\n  - {fileID: 224597920615529612}\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 0, y: 0}\r\n  m_AnchorMax: {x: 0, y: 0}\r\n  m_AnchoredPosition: {x: 0, y: 0}\r\n  m_SizeDelta: {x: 0, y: 0}\r\n  m_Pivot: {x: 0, y: 0}\r\n--- !u!224 &224190136141352184\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1703110363387122}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 224597920615529612}\r\n  m_RootOrder: 3\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 0, y: 0}\r\n  m_AnchorMax: {x: 0, y: 0}\r\n  m_AnchoredPosition: {x: 0, y: 0}\r\n  m_SizeDelta: {x: 0, y: 0}\r\n  m_Pivot: {x: 0.5, y: 1}\r\n--- !u!224 &224354081902056526\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1645301085675522}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 224597920615529612}\r\n  m_RootOrder: 1\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 0, y: 0}\r\n  m_AnchorMax: {x: 0, y: 0}\r\n  m_AnchoredPosition: {x: 0, y: 0}\r\n  m_SizeDelta: {x: 0, y: 0}\r\n  m_Pivot: {x: 0.5, y: 1}\r\n--- !u!224 &224455664766988868\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1299933135069082}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 224187818345042460}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 0, y: 0}\r\n  m_AnchorMax: {x: 1, y: 1}\r\n  m_AnchoredPosition: {x: -67.5, y: 0}\r\n  m_SizeDelta: {x: -135, y: 0}\r\n  m_Pivot: {x: 0.5, y: 0.5}\r\n--- !u!224 &224456132469896268\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1286907453202508}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 224128273805902562}\r\n  m_Father: {fileID: 224597920615529612}\r\n  m_RootOrder: 4\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 0, y: 0}\r\n  m_AnchorMax: {x: 1, y: 0}\r\n  m_AnchoredPosition: {x: 0, y: 5}\r\n  m_SizeDelta: {x: -10, y: 30}\r\n  m_Pivot: {x: 0.5, y: 0}\r\n--- !u!224 &224500930484029984\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1374436642224286}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 224870151546417610}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 0, y: 0}\r\n  m_AnchorMax: {x: 1, y: 1}\r\n  m_AnchoredPosition: {x: 0, y: 0}\r\n  m_SizeDelta: {x: 0, y: 0}\r\n  m_Pivot: {x: 0.5, y: 0.5}\r\n--- !u!224 &224597920615529612\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1204266652295122}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 224089052195935730}\r\n  - {fileID: 224354081902056526}\r\n  - {fileID: 224870151546417610}\r\n  - {fileID: 224190136141352184}\r\n  - {fileID: 224456132469896268}\r\n  m_Father: {fileID: 224187818345042460}\r\n  m_RootOrder: 1\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 1, y: 0}\r\n  m_AnchorMax: {x: 1, y: 1}\r\n  m_AnchoredPosition: {x: 0, y: 0}\r\n  m_SizeDelta: {x: 135, y: 0}\r\n  m_Pivot: {x: 1, y: 0.5}\r\n--- !u!224 &224816888888654422\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1649973171149934}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 224089052195935730}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 0, y: 0}\r\n  m_AnchorMax: {x: 1, y: 1}\r\n  m_AnchoredPosition: {x: 0, y: 0}\r\n  m_SizeDelta: {x: 0, y: 0}\r\n  m_Pivot: {x: 0.5, y: 0.5}\r\n--- !u!224 &224870151546417610\r\nRectTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1331403283991896}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 224500930484029984}\r\n  m_Father: {fileID: 224597920615529612}\r\n  m_RootOrder: 2\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n  m_AnchorMin: {x: 0, y: 0}\r\n  m_AnchorMax: {x: 0, y: 0}\r\n  m_AnchoredPosition: {x: 0, y: 0}\r\n  m_SizeDelta: {x: 0, y: 0}\r\n  m_Pivot: {x: 0.5, y: 1}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations/ArucoCameraCalibrationGUI.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: 7d56e1e25cfe0d746a30e519e829f8e6\r\ntimeCreated: 1510855839\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  externalObjects: {}\r\n  mainObjectFileID: 100100000\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations/OmnidirCameraCalibration.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1001 &100100000\r\nPrefab:\r\n  m_ObjectHideFlags: 1\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications: []\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 0}\r\n  m_RootGameObject: {fileID: 1831836218230788}\r\n  m_IsPrefabParent: 1\r\n--- !u!1 &1831836218230788\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4153927219464056}\r\n  - component: {fileID: 114218203924508940}\r\n  - component: {fileID: 114900348844413008}\r\n  - component: {fileID: 114758305632993188}\r\n  - component: {fileID: 114449972534273376}\r\n  m_Layer: 0\r\n  m_Name: OmnidirCameraCalibration\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4153927219464056\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1831836218230788}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 0.255, y: 0.03, z: 0.17999999}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &114218203924508940\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1831836218230788}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 4b6859419089da74a90f9ad6387a7983, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  detectorParametersController: {fileID: 114900348844413008}\r\n  calibrationBoard: {fileID: 0}\r\n  refineMarkersDetection: 0\r\n  cameraParametersController: {fileID: 114758305632993188}\r\n  arucoCamera: {fileID: 0}\r\n  calibrationFlags: {fileID: 114449972534273376}\r\n--- !u!114 &114449972534273376\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1831836218230788}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 4cfa914475d82db49b6f0d7f57d13438, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  useIntrinsicGuess: 0\r\n  fixKDistorsionCoefficients: 0000\r\n  fixSkew: 0\r\n  fixP: 0000\r\n  fixXi: 0\r\n  fixGamma: 0\r\n  fixCenter: 0\r\n--- !u!114 &114758305632993188\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1831836218230788}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoLoadFile: 0\r\n  cameraParametersFolderPath: ArucoUnity/CameraParameters/\r\n  cameraParametersFilename: \r\n--- !u!114 &114900348844413008\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1831836218230788}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 91ed676394d8639429b6c76f63c37c18, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  adaptiveThreshWinSizeMin: 3\r\n  adaptiveThreshWinSizeMax: 23\r\n  adaptiveThreshWinSizeStep: 10\r\n  adaptiveThreshConstant: 7\r\n  minMarkerPerimeterRate: 0.03\r\n  maxMarkerPerimeterRate: 4\r\n  polygonalApproxAccuracyRate: 0.03\r\n  minCornerDistanceRate: 0.05\r\n  minDistanceToBorder: 3\r\n  minMarkerDistanceRate: 0.05\r\n  cornerRefinementMethod: 0\r\n  cornerRefinementWinSize: 5\r\n  cornerRefinementMaxIterations: 30\r\n  cornerRefinementMinAccuracy: 0.1\r\n  markerBorderBits: 1\r\n  perspectiveRemovePixelPerCell: 8\r\n  perspectiveRemoveIgnoredMarginPerCell: 0.13\r\n  maxErroneousBitsInBorderRate: 0.35\r\n  minOtsuStdDev: 5\r\n  errorCorrectionRate: 0.6\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations/OmnidirCameraCalibration.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: d9192212aa3edd94c8f032782c211dd7\r\ntimeCreated: 1510855992\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  externalObjects: {}\r\n  mainObjectFileID: 100100000\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations/PinholeCameraCalibration.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1001 &100100000\r\nPrefab:\r\n  m_ObjectHideFlags: 1\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications: []\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 0}\r\n  m_RootGameObject: {fileID: 1379392284713990}\r\n  m_IsPrefabParent: 1\r\n--- !u!1 &1379392284713990\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4443830380264692}\r\n  - component: {fileID: 114208106215188584}\r\n  - component: {fileID: 114479760342518650}\r\n  - component: {fileID: 114381304389912768}\r\n  - component: {fileID: 114472875458148954}\r\n  m_Layer: 0\r\n  m_Name: PinholeCameraCalibration\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4443830380264692\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1379392284713990}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 0.255, y: 0.03, z: 0.17999999}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &114208106215188584\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1379392284713990}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: a8936dfef56ecc642bce8962a9434dd2, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  detectorParametersController: {fileID: 114479760342518650}\r\n  calibrationBoard: {fileID: 0}\r\n  refineMarkersDetection: 0\r\n  cameraParametersController: {fileID: 114381304389912768}\r\n  arucoCamera: {fileID: 0}\r\n  calibrationFlags: {fileID: 114472875458148954}\r\n--- !u!114 &114381304389912768\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1379392284713990}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoLoadFile: 0\r\n  cameraParametersFolderPath: ArucoUnity/CameraParameters/\r\n  cameraParametersFilename: \r\n--- !u!114 &114472875458148954\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1379392284713990}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 44099b4ed8318e845a10ed126f62bbe2, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  useIntrinsicGuess: 0\r\n  fixKDistorsionCoefficients: 000000000000\r\n  fixPrincipalPoint: 0\r\n  fixAspectRatio: 0\r\n  fixAspectRatioValue: 1\r\n  zeroTangentialDistorsion: 0\r\n  rationalModel: 0\r\n  thinPrismModel: 0\r\n  fixS1_S2_S3_S4: 0\r\n  tiltedModel: 0\r\n  fixTauxTauy: 0\r\n  fixFocalLength: 0\r\n  fixIntrinsic: 1\r\n  sameFocalLength: 0\r\n--- !u!114 &114479760342518650\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1379392284713990}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 91ed676394d8639429b6c76f63c37c18, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  adaptiveThreshWinSizeMin: 3\r\n  adaptiveThreshWinSizeMax: 23\r\n  adaptiveThreshWinSizeStep: 10\r\n  adaptiveThreshConstant: 7\r\n  minMarkerPerimeterRate: 0.03\r\n  maxMarkerPerimeterRate: 4\r\n  polygonalApproxAccuracyRate: 0.03\r\n  minCornerDistanceRate: 0.05\r\n  minDistanceToBorder: 3\r\n  minMarkerDistanceRate: 0.05\r\n  cornerRefinementMethod: 0\r\n  cornerRefinementWinSize: 5\r\n  cornerRefinementMaxIterations: 30\r\n  cornerRefinementMinAccuracy: 0.1\r\n  markerBorderBits: 1\r\n  perspectiveRemovePixelPerCell: 8\r\n  perspectiveRemoveIgnoredMarginPerCell: 0.13\r\n  maxErroneousBitsInBorderRate: 0.35\r\n  minOtsuStdDev: 5\r\n  errorCorrectionRate: 0.6\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations/PinholeCameraCalibration.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: 33877b17cdcf7334bbd2152625efad87\r\ntimeCreated: 1510855570\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  externalObjects: {}\r\n  mainObjectFileID: 100100000\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations/StereoOmnidirCameraCalibration.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1001 &100100000\r\nPrefab:\r\n  m_ObjectHideFlags: 1\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications: []\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 0}\r\n  m_RootGameObject: {fileID: 1796862874369070}\r\n  m_IsPrefabParent: 1\r\n--- !u!1 &1796862874369070\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4771018156846152}\r\n  - component: {fileID: 114717443885570236}\r\n  - component: {fileID: 114566421423305350}\r\n  - component: {fileID: 114562014380628764}\r\n  - component: {fileID: 114202863759725284}\r\n  m_Layer: 0\r\n  m_Name: StereoOmnidirCameraCalibration\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4771018156846152\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1796862874369070}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 0.255, y: 0.03, z: 0.17999999}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &114202863759725284\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1796862874369070}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 4cfa914475d82db49b6f0d7f57d13438, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  useIntrinsicGuess: 0\r\n  fixKDistorsionCoefficients: 0000\r\n  fixSkew: 0\r\n  fixP: 0000\r\n  fixXi: 0\r\n  fixGamma: 0\r\n  fixCenter: 0\r\n--- !u!114 &114562014380628764\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1796862874369070}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoLoadFile: 0\r\n  cameraParametersFolderPath: ArucoUnity/CameraParameters/\r\n  cameraParametersFilename: \r\n--- !u!114 &114566421423305350\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1796862874369070}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 91ed676394d8639429b6c76f63c37c18, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  adaptiveThreshWinSizeMin: 3\r\n  adaptiveThreshWinSizeMax: 23\r\n  adaptiveThreshWinSizeStep: 10\r\n  adaptiveThreshConstant: 7\r\n  minMarkerPerimeterRate: 0.03\r\n  maxMarkerPerimeterRate: 4\r\n  polygonalApproxAccuracyRate: 0.03\r\n  minCornerDistanceRate: 0.05\r\n  minDistanceToBorder: 3\r\n  minMarkerDistanceRate: 0.05\r\n  cornerRefinementMethod: 0\r\n  cornerRefinementWinSize: 5\r\n  cornerRefinementMaxIterations: 30\r\n  cornerRefinementMinAccuracy: 0.1\r\n  markerBorderBits: 1\r\n  perspectiveRemovePixelPerCell: 8\r\n  perspectiveRemoveIgnoredMarginPerCell: 0.13\r\n  maxErroneousBitsInBorderRate: 0.35\r\n  minOtsuStdDev: 5\r\n  errorCorrectionRate: 0.6\r\n--- !u!114 &114717443885570236\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1796862874369070}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: e66674f2448052d4eaf3e9159a923d7b, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  detectorParametersController: {fileID: 114566421423305350}\r\n  calibrationBoard: {fileID: 0}\r\n  refineMarkersDetection: 0\r\n  cameraParametersController: {fileID: 114562014380628764}\r\n  arucoCamera: {fileID: 0}\r\n  calibrationFlags: {fileID: 114202863759725284}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations/StereoOmnidirCameraCalibration.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: a4c21835cfef5a24ea2dc1e73e31831a\r\ntimeCreated: 1511911175\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  externalObjects: {}\r\n  mainObjectFileID: 100100000\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations/StereoPinholeCameraCalibration.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1001 &100100000\r\nPrefab:\r\n  m_ObjectHideFlags: 1\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications: []\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 0}\r\n  m_RootGameObject: {fileID: 1063750291374120}\r\n  m_IsPrefabParent: 1\r\n--- !u!1 &1063750291374120\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4646850064639340}\r\n  - component: {fileID: 114854326495929632}\r\n  - component: {fileID: 114659781309666906}\r\n  - component: {fileID: 114304372869992102}\r\n  - component: {fileID: 114591552896006750}\r\n  m_Layer: 0\r\n  m_Name: StereoPinholeCameraCalibration\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4646850064639340\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1063750291374120}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 0.255, y: 0.03, z: 0.17999999}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &114304372869992102\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1063750291374120}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoLoadFile: 0\r\n  cameraParametersFolderPath: ArucoUnity/CameraParameters/\r\n  cameraParametersFilename: \r\n--- !u!114 &114591552896006750\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1063750291374120}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 44099b4ed8318e845a10ed126f62bbe2, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  useIntrinsicGuess: 0\r\n  fixKDistorsionCoefficients: 000000000000\r\n  fixPrincipalPoint: 0\r\n  fixAspectRatio: 0\r\n  fixAspectRatioValue: 1\r\n  zeroTangentialDistorsion: 0\r\n  rationalModel: 0\r\n  thinPrismModel: 0\r\n  fixS1_S2_S3_S4: 0\r\n  tiltedModel: 0\r\n  fixTauxTauy: 0\r\n  fixFocalLength: 0\r\n  fixIntrinsic: 1\r\n  sameFocalLength: 0\r\n--- !u!114 &114659781309666906\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1063750291374120}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 91ed676394d8639429b6c76f63c37c18, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  adaptiveThreshWinSizeMin: 3\r\n  adaptiveThreshWinSizeMax: 23\r\n  adaptiveThreshWinSizeStep: 10\r\n  adaptiveThreshConstant: 7\r\n  minMarkerPerimeterRate: 0.03\r\n  maxMarkerPerimeterRate: 4\r\n  polygonalApproxAccuracyRate: 0.03\r\n  minCornerDistanceRate: 0.05\r\n  minDistanceToBorder: 3\r\n  minMarkerDistanceRate: 0.05\r\n  cornerRefinementMethod: 0\r\n  cornerRefinementWinSize: 5\r\n  cornerRefinementMaxIterations: 30\r\n  cornerRefinementMinAccuracy: 0.1\r\n  markerBorderBits: 1\r\n  perspectiveRemovePixelPerCell: 8\r\n  perspectiveRemoveIgnoredMarginPerCell: 0.13\r\n  maxErroneousBitsInBorderRate: 0.35\r\n  minOtsuStdDev: 5\r\n  errorCorrectionRate: 0.6\r\n--- !u!114 &114854326495929632\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1063750291374120}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 64bcf1901ac9fc44d9bf16ca10a527bc, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  detectorParametersController: {fileID: 114659781309666906}\r\n  calibrationBoard: {fileID: 0}\r\n  refineMarkersDetection: 0\r\n  cameraParametersController: {fileID: 114304372869992102}\r\n  arucoCamera: {fileID: 0}\r\n  calibrationFlags: {fileID: 114591552896006750}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations/StereoPinholeCameraCalibration.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: f29bf5ab542438248b4b92ce2d66226c\r\ntimeCreated: 1511911128\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  externalObjects: {}\r\n  mainObjectFileID: 100100000\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Calibrations.meta",
    "content": "fileFormatVersion: 2\r\nguid: 50395ecfe36db934792734d18a600814\r\nfolderAsset: yes\r\ntimeCreated: 1510937197\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Cameras/ArucoWebcam.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1001 &100100000\r\nPrefab:\r\n  m_ObjectHideFlags: 1\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications: []\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 0}\r\n  m_RootGameObject: {fileID: 1748105045091876}\r\n  m_IsPrefabParent: 1\r\n--- !u!1 &1261977758904326\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4288362277056124}\r\n  - component: {fileID: 20727044533785904}\r\n  m_Layer: 0\r\n  m_Name: Camera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1283559168801520\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4586952474456608}\r\n  - component: {fileID: 20164004177903186}\r\n  m_Layer: 8\r\n  m_Name: BackgroundCamera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1649337208224828\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4398385686460268}\r\n  - component: {fileID: 33080119040456864}\r\n  - component: {fileID: 23193199916444832}\r\n  m_Layer: 8\r\n  m_Name: Background\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1748105045091876\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4913347918360244}\r\n  - component: {fileID: 114439970468321140}\r\n  - component: {fileID: 114750514242914752}\r\n  m_Layer: 0\r\n  m_Name: ArucoWebcam\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4288362277056124\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1261977758904326}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4586952474456608}\r\n  m_Father: {fileID: 4913347918360244}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4398385686460268\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1649337208224828}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 1}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 4586952474456608}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4586952474456608\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1283559168801520}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4398385686460268}\r\n  m_Father: {fileID: 4288362277056124}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4913347918360244\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1748105045091876}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4288362277056124}\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!20 &20164004177903186\r\nCamera:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1283559168801520}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 2\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 1\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 60\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 0\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 256\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 0\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!20 &20727044533785904\r\nCamera:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1261977758904326}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 3\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 1\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 60\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 1\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294965503\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 1\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!23 &23193199916444832\r\nMeshRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1649337208224828}\r\n  m_Enabled: 1\r\n  m_CastShadows: 1\r\n  m_ReceiveShadows: 1\r\n  m_DynamicOccludee: 1\r\n  m_MotionVectors: 1\r\n  m_LightProbeUsage: 1\r\n  m_ReflectionProbeUsage: 1\r\n  m_RenderingLayerMask: 4294967295\r\n  m_Materials:\r\n  - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2}\r\n  m_StaticBatchInfo:\r\n    firstSubMesh: 0\r\n    subMeshCount: 0\r\n  m_StaticBatchRoot: {fileID: 0}\r\n  m_ProbeAnchor: {fileID: 0}\r\n  m_LightProbeVolumeOverride: {fileID: 0}\r\n  m_ScaleInLightmap: 1\r\n  m_PreserveUVs: 1\r\n  m_IgnoreNormalsForChartDetection: 0\r\n  m_ImportantGI: 0\r\n  m_StitchLightmapSeams: 0\r\n  m_SelectedEditorRenderState: 3\r\n  m_MinimumChartSize: 4\r\n  m_AutoUVMaxDistance: 0.5\r\n  m_AutoUVMaxAngle: 89\r\n  m_LightmapParameters: {fileID: 0}\r\n  m_SortingLayerID: 0\r\n  m_SortingLayer: 0\r\n  m_SortingOrder: 0\r\n--- !u!33 &33080119040456864\r\nMeshFilter:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1649337208224828}\r\n  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}\r\n--- !u!114 &114439970468321140\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1748105045091876}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 43b2fc42ec749de4fa54b3fc1163f23d, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  webcamId: 0\r\n--- !u!114 &114750514242914752\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1748105045091876}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: c26a913db0c57924296019074a504016, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  arucoCamera: {fileID: 114439970468321140}\r\n  arucoCameraUndistortion: {fileID: 0}\r\n  cameras:\r\n  - {fileID: 20727044533785904}\r\n  backgroundCameras:\r\n  - {fileID: 20164004177903186}\r\n  backgrounds:\r\n  - {fileID: 23193199916444832}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Cameras/ArucoWebcam.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: 4c41cbbf88539e94fb09ee8c56317115\r\ntimeCreated: 1511290621\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  externalObjects: {}\r\n  mainObjectFileID: 100100000\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Cameras/ArucoWebcamCalibrated.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1 &1136230013766202\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  serializedVersion: 6\r\n  m_Component:\r\n  - component: {fileID: 4315490118085066}\r\n  - component: {fileID: 20017792066165246}\r\n  m_Layer: 8\r\n  m_Name: BackgroundCamera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4315490118085066\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1136230013766202}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4239903939097252}\r\n  m_Father: {fileID: 4388775592067208}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!20 &20017792066165246\r\nCamera:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1136230013766202}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 2\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_projectionMatrixMode: 1\r\n  m_SensorSize: {x: 36, y: 24}\r\n  m_LensShift: {x: 0, y: 0}\r\n  m_GateFitMode: 2\r\n  m_FocalLength: 50\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 1\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 60\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 0\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 256\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 0\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!1 &1354671515401654\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  serializedVersion: 6\r\n  m_Component:\r\n  - component: {fileID: 4388775592067208}\r\n  - component: {fileID: 20452962843750572}\r\n  m_Layer: 0\r\n  m_Name: Camera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4388775592067208\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1354671515401654}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4315490118085066}\r\n  m_Father: {fileID: 4398985096809396}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!20 &20452962843750572\r\nCamera:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1354671515401654}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 3\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_projectionMatrixMode: 1\r\n  m_SensorSize: {x: 36, y: 24}\r\n  m_LensShift: {x: 0, y: 0}\r\n  m_GateFitMode: 2\r\n  m_FocalLength: 50\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 1\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 60\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 1\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294965503\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 1\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!1 &1612154402523488\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  serializedVersion: 6\r\n  m_Component:\r\n  - component: {fileID: 4239903939097252}\r\n  - component: {fileID: 33133460080051478}\r\n  - component: {fileID: 23646749236801090}\r\n  m_Layer: 8\r\n  m_Name: Background\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4239903939097252\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1612154402523488}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 1}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 4315490118085066}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!33 &33133460080051478\r\nMeshFilter:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1612154402523488}\r\n  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}\r\n--- !u!23 &23646749236801090\r\nMeshRenderer:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1612154402523488}\r\n  m_Enabled: 1\r\n  m_CastShadows: 1\r\n  m_ReceiveShadows: 1\r\n  m_DynamicOccludee: 1\r\n  m_MotionVectors: 1\r\n  m_LightProbeUsage: 1\r\n  m_ReflectionProbeUsage: 1\r\n  m_RenderingLayerMask: 4294967295\r\n  m_RendererPriority: 0\r\n  m_Materials:\r\n  - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2}\r\n  m_StaticBatchInfo:\r\n    firstSubMesh: 0\r\n    subMeshCount: 0\r\n  m_StaticBatchRoot: {fileID: 0}\r\n  m_ProbeAnchor: {fileID: 0}\r\n  m_LightProbeVolumeOverride: {fileID: 0}\r\n  m_ScaleInLightmap: 1\r\n  m_PreserveUVs: 1\r\n  m_IgnoreNormalsForChartDetection: 0\r\n  m_ImportantGI: 0\r\n  m_StitchLightmapSeams: 0\r\n  m_SelectedEditorRenderState: 3\r\n  m_MinimumChartSize: 4\r\n  m_AutoUVMaxDistance: 0.5\r\n  m_AutoUVMaxAngle: 89\r\n  m_LightmapParameters: {fileID: 0}\r\n  m_SortingLayerID: 0\r\n  m_SortingLayer: 0\r\n  m_SortingOrder: 0\r\n--- !u!1 &1647954469300956\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  serializedVersion: 6\r\n  m_Component:\r\n  - component: {fileID: 4398985096809396}\r\n  - component: {fileID: 114393126318706844}\r\n  - component: {fileID: 114522793529101426}\r\n  - component: {fileID: 114034833319431376}\r\n  - component: {fileID: 114715581165667816}\r\n  m_Layer: 0\r\n  m_Name: ArucoWebcamCalibrated\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4398985096809396\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1647954469300956}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4388775592067208}\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &114393126318706844\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1647954469300956}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 43b2fc42ec749de4fa54b3fc1163f23d, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  webcamId: 0\r\n--- !u!114 &114522793529101426\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1647954469300956}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: e044568ea72405e49bf56df52f9d2b57, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  CameraParametersController: {fileID: 114034833319431376}\r\n  arucoCamera: {fileID: 114393126318706844}\r\n  rectificationScalingFactor: 1\r\n--- !u!114 &114034833319431376\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1647954469300956}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoLoadFile: 1\r\n  cameraParametersFilename: ArucoWebcamExample.xml\r\n--- !u!114 &114715581165667816\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_CorrespondingSourceObject: {fileID: 0}\r\n  m_PrefabInstance: {fileID: 0}\r\n  m_PrefabAsset: {fileID: 0}\r\n  m_GameObject: {fileID: 1647954469300956}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: c26a913db0c57924296019074a504016, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  arucoCamera: {fileID: 114393126318706844}\r\n  arucoCameraUndistortion: {fileID: 114522793529101426}\r\n  cameras:\r\n  - {fileID: 20452962843750572}\r\n  backgroundCameras:\r\n  - {fileID: 20017792066165246}\r\n  backgrounds:\r\n  - {fileID: 23646749236801090}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Cameras/ArucoWebcamCalibrated.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: 74c9e29e9d222a4438669336303acc9a\r\ntimeCreated: 1511290823\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  externalObjects: {}\r\n  mainObjectFileID: 100100000\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Cameras/StereoArucoWebcam.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1001 &100100000\r\nPrefab:\r\n  m_ObjectHideFlags: 1\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications: []\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 0}\r\n  m_RootGameObject: {fileID: 1680325917346558}\r\n  m_IsPrefabParent: 1\r\n--- !u!1 &1073200431808850\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4284947067622318}\r\n  - component: {fileID: 20290465642155780}\r\n  m_Layer: 10\r\n  m_Name: RightBackgroundCamera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1151076865370966\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4595826776453472}\r\n  - component: {fileID: 20349722883832606}\r\n  m_Layer: 0\r\n  m_Name: LeftCamera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1162186642288042\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4850657905971360}\r\n  - component: {fileID: 20500567986933980}\r\n  m_Layer: 9\r\n  m_Name: LeftBackgroundCamera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1251459126816346\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4519361367992704}\r\n  - component: {fileID: 20187879013153352}\r\n  m_Layer: 0\r\n  m_Name: RightCamera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1522841342350734\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4387147391419430}\r\n  m_Layer: 0\r\n  m_Name: RightEye\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1547205624705224\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4748822886841378}\r\n  - component: {fileID: 33587181305577426}\r\n  - component: {fileID: 23800773225864904}\r\n  m_Layer: 9\r\n  m_Name: LeftBackground\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1680325917346558\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4313056539332356}\r\n  - component: {fileID: 114778648834828408}\r\n  - component: {fileID: 114909995311013256}\r\n  m_Layer: 0\r\n  m_Name: StereoArucoWebcam\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1729213345586758\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4231375922267776}\r\n  - component: {fileID: 33622920748448086}\r\n  - component: {fileID: 23766359068007384}\r\n  m_Layer: 10\r\n  m_Name: RightBackground\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1932795312337198\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4041434532156738}\r\n  m_Layer: 0\r\n  m_Name: LeftEye\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4041434532156738\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1932795312337198}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4595826776453472}\r\n  - {fileID: 4850657905971360}\r\n  m_Father: {fileID: 4313056539332356}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4231375922267776\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1729213345586758}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 1}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 4284947067622318}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4284947067622318\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1073200431808850}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4231375922267776}\r\n  m_Father: {fileID: 4387147391419430}\r\n  m_RootOrder: 1\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4313056539332356\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1680325917346558}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4041434532156738}\r\n  - {fileID: 4387147391419430}\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4387147391419430\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1522841342350734}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4519361367992704}\r\n  - {fileID: 4284947067622318}\r\n  m_Father: {fileID: 4313056539332356}\r\n  m_RootOrder: 1\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4519361367992704\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1251459126816346}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 4387147391419430}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4595826776453472\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1151076865370966}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 4041434532156738}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4748822886841378\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1547205624705224}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 1}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 4850657905971360}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4850657905971360\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1162186642288042}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4748822886841378}\r\n  m_Father: {fileID: 4041434532156738}\r\n  m_RootOrder: 1\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!20 &20187879013153352\r\nCamera:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1251459126816346}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 3\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0.5\r\n    y: 0\r\n    width: 0.5\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 106\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 1\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294965503\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 1\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!20 &20290465642155780\r\nCamera:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1073200431808850}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 2\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0.5\r\n    y: 0\r\n    width: 0.5\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 106\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 0\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 1024\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 0\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!20 &20349722883832606\r\nCamera:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1151076865370966}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 3\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 0.5\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 106\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 1\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294965503\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 1\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!20 &20500567986933980\r\nCamera:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1162186642288042}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 2\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 0.5\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 106\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 0\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 512\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 0\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!23 &23766359068007384\r\nMeshRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1729213345586758}\r\n  m_Enabled: 1\r\n  m_CastShadows: 1\r\n  m_ReceiveShadows: 1\r\n  m_DynamicOccludee: 1\r\n  m_MotionVectors: 1\r\n  m_LightProbeUsage: 1\r\n  m_ReflectionProbeUsage: 1\r\n  m_RenderingLayerMask: 4294967295\r\n  m_Materials:\r\n  - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2}\r\n  m_StaticBatchInfo:\r\n    firstSubMesh: 0\r\n    subMeshCount: 0\r\n  m_StaticBatchRoot: {fileID: 0}\r\n  m_ProbeAnchor: {fileID: 0}\r\n  m_LightProbeVolumeOverride: {fileID: 0}\r\n  m_ScaleInLightmap: 1\r\n  m_PreserveUVs: 1\r\n  m_IgnoreNormalsForChartDetection: 0\r\n  m_ImportantGI: 0\r\n  m_StitchLightmapSeams: 0\r\n  m_SelectedEditorRenderState: 3\r\n  m_MinimumChartSize: 4\r\n  m_AutoUVMaxDistance: 0.5\r\n  m_AutoUVMaxAngle: 89\r\n  m_LightmapParameters: {fileID: 0}\r\n  m_SortingLayerID: 0\r\n  m_SortingLayer: 0\r\n  m_SortingOrder: 0\r\n--- !u!23 &23800773225864904\r\nMeshRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1547205624705224}\r\n  m_Enabled: 1\r\n  m_CastShadows: 1\r\n  m_ReceiveShadows: 1\r\n  m_DynamicOccludee: 1\r\n  m_MotionVectors: 1\r\n  m_LightProbeUsage: 1\r\n  m_ReflectionProbeUsage: 1\r\n  m_RenderingLayerMask: 4294967295\r\n  m_Materials:\r\n  - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2}\r\n  m_StaticBatchInfo:\r\n    firstSubMesh: 0\r\n    subMeshCount: 0\r\n  m_StaticBatchRoot: {fileID: 0}\r\n  m_ProbeAnchor: {fileID: 0}\r\n  m_LightProbeVolumeOverride: {fileID: 0}\r\n  m_ScaleInLightmap: 1\r\n  m_PreserveUVs: 1\r\n  m_IgnoreNormalsForChartDetection: 0\r\n  m_ImportantGI: 0\r\n  m_StitchLightmapSeams: 0\r\n  m_SelectedEditorRenderState: 3\r\n  m_MinimumChartSize: 4\r\n  m_AutoUVMaxDistance: 0.5\r\n  m_AutoUVMaxAngle: 89\r\n  m_LightmapParameters: {fileID: 0}\r\n  m_SortingLayerID: 0\r\n  m_SortingLayer: 0\r\n  m_SortingOrder: 0\r\n--- !u!33 &33587181305577426\r\nMeshFilter:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1547205624705224}\r\n  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}\r\n--- !u!33 &33622920748448086\r\nMeshFilter:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1729213345586758}\r\n  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}\r\n--- !u!114 &114778648834828408\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1680325917346558}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: c82860b96c21f994bad617778c197a4b, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  webcamId1: 0\r\n  webcamId2: 1\r\n--- !u!114 &114909995311013256\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1680325917346558}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 3648ba3f74da4164db2b440ad0fbe471, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  arucoCamera: {fileID: 114778648834828408}\r\n  arucoCameraUndistortion: {fileID: 0}\r\n  leftEye: {fileID: 4041434532156738}\r\n  rightEye: {fileID: 4387147391419430}\r\n  leftCamera: {fileID: 20349722883832606}\r\n  rightCamera: {fileID: 20187879013153352}\r\n  leftBackgroundCamera: {fileID: 20500567986933980}\r\n  rightBackgroundCamera: {fileID: 20290465642155780}\r\n  leftBackground: {fileID: 23800773225864904}\r\n  rightBackground: {fileID: 23766359068007384}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Cameras/StereoArucoWebcam.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: 945ff4df30c179c41a817736618f3d97\r\ntimeCreated: 1511291280\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  externalObjects: {}\r\n  mainObjectFileID: 100100000\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Cameras/StereoArucoWebcamCalibrated.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1001 &100100000\r\nPrefab:\r\n  m_ObjectHideFlags: 1\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications: []\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 0}\r\n  m_RootGameObject: {fileID: 1207513600271448}\r\n  m_IsPrefabParent: 1\r\n--- !u!1 &1046713655620172\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4632313790216404}\r\n  - component: {fileID: 20789227758116058}\r\n  m_Layer: 0\r\n  m_Name: RightCamera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1146993183686178\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4031931371787320}\r\n  - component: {fileID: 20888377950689166}\r\n  m_Layer: 10\r\n  m_Name: RightBackgroundCamera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1207513600271448\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4377250107881252}\r\n  - component: {fileID: 114992423418060336}\r\n  - component: {fileID: 114987818737337706}\r\n  - component: {fileID: 114125049629224730}\r\n  - component: {fileID: 114332799581564012}\r\n  m_Layer: 0\r\n  m_Name: StereoArucoWebcamCalibrated\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1236642361732716\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4420834919202464}\r\n  - component: {fileID: 20908161906071312}\r\n  m_Layer: 0\r\n  m_Name: LeftCamera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1279695010330344\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4522371770560156}\r\n  - component: {fileID: 33776759295041006}\r\n  - component: {fileID: 23896255257067098}\r\n  m_Layer: 10\r\n  m_Name: RightBackground\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1288168834695990\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4544471706765170}\r\n  m_Layer: 0\r\n  m_Name: RightEye\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1590203912225140\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4958998451253402}\r\n  - component: {fileID: 20695146548642492}\r\n  m_Layer: 9\r\n  m_Name: LeftBackgroundCamera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1663775939307562\r\nGameObject:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4225388037717354}\r\n  - component: {fileID: 33849455681176636}\r\n  - component: {fileID: 23072473483236818}\r\n  m_Layer: 9\r\n  m_Name: LeftBackground\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!1 &1800859393566362\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4944800623345314}\r\n  m_Layer: 0\r\n  m_Name: LeftEye\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4031931371787320\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1146993183686178}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4522371770560156}\r\n  m_Father: {fileID: 4544471706765170}\r\n  m_RootOrder: 1\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4225388037717354\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1663775939307562}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 1}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 4958998451253402}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4377250107881252\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1207513600271448}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4944800623345314}\r\n  - {fileID: 4544471706765170}\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4420834919202464\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1236642361732716}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 4944800623345314}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4522371770560156\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1279695010330344}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 1}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 4031931371787320}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4544471706765170\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1288168834695990}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4632313790216404}\r\n  - {fileID: 4031931371787320}\r\n  m_Father: {fileID: 4377250107881252}\r\n  m_RootOrder: 1\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4632313790216404\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1046713655620172}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 4544471706765170}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4944800623345314\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1800859393566362}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4420834919202464}\r\n  - {fileID: 4958998451253402}\r\n  m_Father: {fileID: 4377250107881252}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!4 &4958998451253402\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1590203912225140}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children:\r\n  - {fileID: 4225388037717354}\r\n  m_Father: {fileID: 4944800623345314}\r\n  m_RootOrder: 1\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!20 &20695146548642492\r\nCamera:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1590203912225140}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 2\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 0.5\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 106\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 0\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 512\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 0\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!20 &20789227758116058\r\nCamera:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1046713655620172}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 3\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0.5\r\n    y: 0\r\n    width: 0.5\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 106\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 1\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294965503\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 1\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!20 &20888377950689166\r\nCamera:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1146993183686178}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 2\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0.5\r\n    y: 0\r\n    width: 0.5\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 106\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 0\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 1024\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 0\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!20 &20908161906071312\r\nCamera:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1236642361732716}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 3\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 0.5\r\n    height: 1\r\n  near clip plane: 0.05\r\n  far clip plane: 1000\r\n  field of view: 106\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 1\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294965503\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 1\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!23 &23072473483236818\r\nMeshRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1663775939307562}\r\n  m_Enabled: 1\r\n  m_CastShadows: 1\r\n  m_ReceiveShadows: 1\r\n  m_DynamicOccludee: 1\r\n  m_MotionVectors: 1\r\n  m_LightProbeUsage: 1\r\n  m_ReflectionProbeUsage: 1\r\n  m_RenderingLayerMask: 4294967295\r\n  m_Materials:\r\n  - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2}\r\n  m_StaticBatchInfo:\r\n    firstSubMesh: 0\r\n    subMeshCount: 0\r\n  m_StaticBatchRoot: {fileID: 0}\r\n  m_ProbeAnchor: {fileID: 0}\r\n  m_LightProbeVolumeOverride: {fileID: 0}\r\n  m_ScaleInLightmap: 1\r\n  m_PreserveUVs: 1\r\n  m_IgnoreNormalsForChartDetection: 0\r\n  m_ImportantGI: 0\r\n  m_StitchLightmapSeams: 0\r\n  m_SelectedEditorRenderState: 3\r\n  m_MinimumChartSize: 4\r\n  m_AutoUVMaxDistance: 0.5\r\n  m_AutoUVMaxAngle: 89\r\n  m_LightmapParameters: {fileID: 0}\r\n  m_SortingLayerID: 0\r\n  m_SortingLayer: 0\r\n  m_SortingOrder: 0\r\n--- !u!23 &23896255257067098\r\nMeshRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1279695010330344}\r\n  m_Enabled: 1\r\n  m_CastShadows: 1\r\n  m_ReceiveShadows: 1\r\n  m_DynamicOccludee: 1\r\n  m_MotionVectors: 1\r\n  m_LightProbeUsage: 1\r\n  m_ReflectionProbeUsage: 1\r\n  m_RenderingLayerMask: 4294967295\r\n  m_Materials:\r\n  - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2}\r\n  m_StaticBatchInfo:\r\n    firstSubMesh: 0\r\n    subMeshCount: 0\r\n  m_StaticBatchRoot: {fileID: 0}\r\n  m_ProbeAnchor: {fileID: 0}\r\n  m_LightProbeVolumeOverride: {fileID: 0}\r\n  m_ScaleInLightmap: 1\r\n  m_PreserveUVs: 1\r\n  m_IgnoreNormalsForChartDetection: 0\r\n  m_ImportantGI: 0\r\n  m_StitchLightmapSeams: 0\r\n  m_SelectedEditorRenderState: 3\r\n  m_MinimumChartSize: 4\r\n  m_AutoUVMaxDistance: 0.5\r\n  m_AutoUVMaxAngle: 89\r\n  m_LightmapParameters: {fileID: 0}\r\n  m_SortingLayerID: 0\r\n  m_SortingLayer: 0\r\n  m_SortingOrder: 0\r\n--- !u!33 &33776759295041006\r\nMeshFilter:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1279695010330344}\r\n  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}\r\n--- !u!33 &33849455681176636\r\nMeshFilter:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1663775939307562}\r\n  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}\r\n--- !u!114 &114125049629224730\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1207513600271448}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoLoadFile: 1\r\n  cameraParametersFolderPath: ArucoUnity/CameraParameters/\r\n  cameraParametersFilename: \r\n--- !u!114 &114332799581564012\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1207513600271448}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 3648ba3f74da4164db2b440ad0fbe471, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  arucoCamera: {fileID: 114992423418060336}\r\n  arucoCameraUndistortion: {fileID: 114987818737337706}\r\n  leftEye: {fileID: 4944800623345314}\r\n  rightEye: {fileID: 4544471706765170}\r\n  leftCamera: {fileID: 20908161906071312}\r\n  rightCamera: {fileID: 20789227758116058}\r\n  leftBackgroundCamera: {fileID: 20695146548642492}\r\n  rightBackgroundCamera: {fileID: 20888377950689166}\r\n  leftBackground: {fileID: 23072473483236818}\r\n  rightBackground: {fileID: 23896255257067098}\r\n--- !u!114 &114987818737337706\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1207513600271448}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 41d0d6a753fcd62488e22edc074f8ac1, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  CameraParametersController: {fileID: 114125049629224730}\r\n  arucoCamera: {fileID: 114992423418060336}\r\n  rectificationScalingFactor: 1\r\n  rectificationZeroDisparity: 1\r\n--- !u!114 &114992423418060336\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1207513600271448}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: c82860b96c21f994bad617778c197a4b, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  webcamId1: 0\r\n  webcamId2: 1\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Cameras/StereoArucoWebcamCalibrated.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: 942eb6e885d3e5a4c8fece8e915aaeec\r\ntimeCreated: 1511315597\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  externalObjects: {}\r\n  mainObjectFileID: 100100000\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Cameras.meta",
    "content": "fileFormatVersion: 2\r\nguid: ff2f2eeae2809444bbf44651446e1274\r\nfolderAsset: yes\r\ntimeCreated: 1510937175\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Objects/ArucoObjectsTracker.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1001 &100100000\r\nPrefab:\r\n  m_ObjectHideFlags: 1\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications: []\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 0}\r\n  m_RootGameObject: {fileID: 1807315793213710}\r\n  m_IsPrefabParent: 1\r\n--- !u!1 &1807315793213710\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4105970446323926}\r\n  - component: {fileID: 114704470919034220}\r\n  - component: {fileID: 114710025698078358}\r\n  m_Layer: 0\r\n  m_Name: ArucoObjectsTracker\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4105970446323926\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1807315793213710}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &114704470919034220\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1807315793213710}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 255fe063ecb04c04296ffd43ed49ae04, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  autoStart: 1\r\n  detectorParametersController: {fileID: 114710025698078358}\r\n  arucoObjects: []\r\n  arucoCamera: {fileID: 0}\r\n  arucoCameraUndistortion: {fileID: 0}\r\n  arucoCameraDisplay: {fileID: 0}\r\n  refineDetectedMarkers: 1\r\n  drawDetectedMarkers: 1\r\n  drawRejectedCandidates: 0\r\n  drawAxes: 1\r\n  drawDetectedCharucoMarkers: 1\r\n  drawDetectedDiamonds: 1\r\n--- !u!114 &114710025698078358\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1807315793213710}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 91ed676394d8639429b6c76f63c37c18, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  adaptiveThreshWinSizeMin: 3\r\n  adaptiveThreshWinSizeMax: 23\r\n  adaptiveThreshWinSizeStep: 10\r\n  adaptiveThreshConstant: 7\r\n  minMarkerPerimeterRate: 0.03\r\n  maxMarkerPerimeterRate: 4\r\n  polygonalApproxAccuracyRate: 0.03\r\n  minCornerDistanceRate: 0.05\r\n  minDistanceToBorder: 3\r\n  minMarkerDistanceRate: 0.05\r\n  cornerRefinementMethod: 0\r\n  cornerRefinementWinSize: 5\r\n  cornerRefinementMaxIterations: 30\r\n  cornerRefinementMinAccuracy: 0.1\r\n  markerBorderBits: 1\r\n  perspectiveRemovePixelPerCell: 8\r\n  perspectiveRemoveIgnoredMarginPerCell: 0.13\r\n  maxErroneousBitsInBorderRate: 0.35\r\n  minOtsuStdDev: 5\r\n  errorCorrectionRate: 0.6\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Objects/ArucoObjectsTracker.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: 59dab6b4111ee0849bb667a5a1d298e5\r\ntimeCreated: 1486071190\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Objects.meta",
    "content": "fileFormatVersion: 2\r\nguid: 9f23ccbb1ed2db94b9046b7a883bf55b\r\nfolderAsset: yes\r\ntimeCreated: 1511912336\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Resources/ArucoObjectDisplayerImagePlane.prefab",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1001 &100100000\r\nPrefab:\r\n  m_ObjectHideFlags: 1\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications: []\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 0}\r\n  m_RootGameObject: {fileID: 1391292684692634}\r\n  m_IsPrefabParent: 1\r\n--- !u!1 &1391292684692634\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 4510026625884806}\r\n  - component: {fileID: 33356176765934348}\r\n  - component: {fileID: 23136157643846576}\r\n  m_Layer: 0\r\n  m_Name: ArucoObjectDisplayerImagePlane\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &4510026625884806\r\nTransform:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1391292684692634}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!23 &23136157643846576\r\nMeshRenderer:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1391292684692634}\r\n  m_Enabled: 1\r\n  m_CastShadows: 1\r\n  m_ReceiveShadows: 1\r\n  m_DynamicOccludee: 1\r\n  m_MotionVectors: 1\r\n  m_LightProbeUsage: 1\r\n  m_ReflectionProbeUsage: 1\r\n  m_Materials:\r\n  - {fileID: 2100000, guid: a937e1f0eb227c44ebbdf6578da8c572, type: 2}\r\n  m_StaticBatchInfo:\r\n    firstSubMesh: 0\r\n    subMeshCount: 0\r\n  m_StaticBatchRoot: {fileID: 0}\r\n  m_ProbeAnchor: {fileID: 0}\r\n  m_LightProbeVolumeOverride: {fileID: 0}\r\n  m_ScaleInLightmap: 1\r\n  m_PreserveUVs: 1\r\n  m_IgnoreNormalsForChartDetection: 0\r\n  m_ImportantGI: 0\r\n  m_StitchLightmapSeams: 0\r\n  m_SelectedEditorRenderState: 3\r\n  m_MinimumChartSize: 4\r\n  m_AutoUVMaxDistance: 0.5\r\n  m_AutoUVMaxAngle: 89\r\n  m_LightmapParameters: {fileID: 0}\r\n  m_SortingLayerID: 0\r\n  m_SortingLayer: 0\r\n  m_SortingOrder: 0\r\n--- !u!33 &33356176765934348\r\nMeshFilter:\r\n  m_ObjectHideFlags: 1\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 100100000}\r\n  m_GameObject: {fileID: 1391292684692634}\r\n  m_Mesh: {fileID: 10210, guid: 0000000000000000e000000000000000, type: 0}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Resources/ArucoObjectDisplayerImagePlane.prefab.meta",
    "content": "fileFormatVersion: 2\r\nguid: 7c7e659188e1b824b9ad0499c7a03ddf\r\ntimeCreated: 1509740627\r\nlicenseType: Free\r\nNativeFormatImporter:\r\n  externalObjects: {}\r\n  mainObjectFileID: 100100000\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs/Resources.meta",
    "content": "fileFormatVersion: 2\r\nguid: 96c1e62b63a9a724094b69a77de592e0\r\nfolderAsset: yes\r\ntimeCreated: 1509740599\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Prefabs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 55c70a4c2fd85d442b3e1d17bee5b0d3\r\nfolderAsset: yes\r\ntimeCreated: 1472228400\r\nlicenseType: Pro\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scenes/CalibrateCamera.unity",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!29 &1\r\nOcclusionCullingSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 2\r\n  m_OcclusionBakeSettings:\r\n    smallestOccluder: 5\r\n    smallestHole: 0.25\r\n    backfaceThreshold: 100\r\n  m_SceneGUID: 00000000000000000000000000000000\r\n  m_OcclusionCullingData: {fileID: 0}\r\n--- !u!104 &2\r\nRenderSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 9\r\n  m_Fog: 0\r\n  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}\r\n  m_FogMode: 3\r\n  m_FogDensity: 0.01\r\n  m_LinearFogStart: 0\r\n  m_LinearFogEnd: 300\r\n  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}\r\n  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}\r\n  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}\r\n  m_AmbientIntensity: 1\r\n  m_AmbientMode: 0\r\n  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}\r\n  m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_HaloStrength: 0.5\r\n  m_FlareStrength: 1\r\n  m_FlareFadeSpeed: 3\r\n  m_HaloTexture: {fileID: 0}\r\n  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}\r\n  m_DefaultReflectionMode: 0\r\n  m_DefaultReflectionResolution: 128\r\n  m_ReflectionBounces: 1\r\n  m_ReflectionIntensity: 1\r\n  m_CustomReflection: {fileID: 0}\r\n  m_Sun: {fileID: 0}\r\n  m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}\r\n  m_UseRadianceAmbientProbe: 0\r\n--- !u!157 &3\r\nLightmapSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 11\r\n  m_GIWorkflowMode: 0\r\n  m_GISettings:\r\n    serializedVersion: 2\r\n    m_BounceScale: 1\r\n    m_IndirectOutputScale: 1\r\n    m_AlbedoBoost: 1\r\n    m_TemporalCoherenceThreshold: 1\r\n    m_EnvironmentLightingMode: 0\r\n    m_EnableBakedLightmaps: 1\r\n    m_EnableRealtimeLightmaps: 1\r\n  m_LightmapEditorSettings:\r\n    serializedVersion: 10\r\n    m_Resolution: 2\r\n    m_BakeResolution: 40\r\n    m_AtlasSize: 1024\r\n    m_AO: 0\r\n    m_AOMaxDistance: 1\r\n    m_CompAOExponent: 1\r\n    m_CompAOExponentDirect: 0\r\n    m_Padding: 2\r\n    m_LightmapParameters: {fileID: 0}\r\n    m_LightmapsBakeMode: 1\r\n    m_TextureCompression: 1\r\n    m_FinalGather: 0\r\n    m_FinalGatherFiltering: 1\r\n    m_FinalGatherRayCount: 256\r\n    m_ReflectionCompression: 2\r\n    m_MixedBakeMode: 1\r\n    m_BakeBackend: 0\r\n    m_PVRSampling: 1\r\n    m_PVRDirectSampleCount: 32\r\n    m_PVRSampleCount: 500\r\n    m_PVRBounces: 2\r\n    m_PVRFilterTypeDirect: 0\r\n    m_PVRFilterTypeIndirect: 0\r\n    m_PVRFilterTypeAO: 0\r\n    m_PVRFilteringMode: 0\r\n    m_PVRCulling: 1\r\n    m_PVRFilteringGaussRadiusDirect: 1\r\n    m_PVRFilteringGaussRadiusIndirect: 5\r\n    m_PVRFilteringGaussRadiusAO: 2\r\n    m_PVRFilteringAtrousPositionSigmaDirect: 0.5\r\n    m_PVRFilteringAtrousPositionSigmaIndirect: 2\r\n    m_PVRFilteringAtrousPositionSigmaAO: 1\r\n    m_ShowResolutionOverlay: 1\r\n  m_LightingDataAsset: {fileID: 0}\r\n  m_UseShadowmask: 0\r\n--- !u!196 &4\r\nNavMeshSettings:\r\n  serializedVersion: 2\r\n  m_ObjectHideFlags: 0\r\n  m_BuildSettings:\r\n    serializedVersion: 2\r\n    agentTypeID: 0\r\n    agentRadius: 0.5\r\n    agentHeight: 2\r\n    agentSlope: 45\r\n    agentClimb: 0.4\r\n    ledgeDropHeight: 0\r\n    maxJumpAcrossDistance: 0\r\n    minRegionArea: 2\r\n    manualCellSize: 0\r\n    cellSize: 0.16666667\r\n    manualTileSize: 0\r\n    tileSize: 256\r\n    accuratePlacement: 0\r\n    debug:\r\n      m_Flags: 0\r\n  m_NavMeshData: {fileID: 0}\r\n--- !u!1001 &316146149\r\nPrefab:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications:\r\n    - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2}\r\n      propertyPath: m_LocalPosition.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2}\r\n      propertyPath: m_LocalPosition.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2}\r\n      propertyPath: m_LocalPosition.z\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2}\r\n      propertyPath: m_LocalRotation.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2}\r\n      propertyPath: m_LocalRotation.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2}\r\n      propertyPath: m_LocalRotation.z\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2}\r\n      propertyPath: m_LocalRotation.w\r\n      value: 1\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4443830380264692, guid: 33877b17cdcf7334bbd2152625efad87, type: 2}\r\n      propertyPath: m_RootOrder\r\n      value: 5\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 114208106215188584, guid: 33877b17cdcf7334bbd2152625efad87,\r\n        type: 2}\r\n      propertyPath: calibrationBoard\r\n      value: \r\n      objectReference: {fileID: 351674420}\r\n    - target: {fileID: 114208106215188584, guid: 33877b17cdcf7334bbd2152625efad87,\r\n        type: 2}\r\n      propertyPath: arucoCamera\r\n      value: \r\n      objectReference: {fileID: 1260505090}\r\n    - target: {fileID: 1379392284713990, guid: 33877b17cdcf7334bbd2152625efad87, type: 2}\r\n      propertyPath: m_IsActive\r\n      value: 1\r\n      objectReference: {fileID: 0}\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 100100000, guid: 33877b17cdcf7334bbd2152625efad87, type: 2}\r\n  m_IsPrefabParent: 0\r\n--- !u!1 &351674418\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 351674421}\r\n  - component: {fileID: 351674420}\r\n  - component: {fileID: 351674419}\r\n  m_Layer: 0\r\n  m_Name: ArucoCharucoBoard\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!114 &351674419\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 351674418}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 3b8644fbc5335334e944b09d5c8da57a, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 351674420}\r\n  displayInPlayMode: 0\r\n--- !u!114 &351674420\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 351674418}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 2bd3bf3f4a191c04bb36564300e2e048, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 0\r\n  markerSideLength: 0.02\r\n  markerBorderBits: 1\r\n  marginsLength: 0\r\n  squaresNumberX: 7\r\n  squaresNumberY: 5\r\n  squareSideLength: 0.03\r\n--- !u!4 &351674421\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 351674418}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: 0.15, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 6\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!1001 &396612550\r\nPrefab:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications:\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_LocalPosition.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_LocalPosition.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_LocalPosition.z\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_LocalRotation.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_LocalRotation.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_LocalRotation.z\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_LocalRotation.w\r\n      value: 1\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_RootOrder\r\n      value: 4\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_AnchoredPosition.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_AnchoredPosition.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_SizeDelta.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_SizeDelta.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_AnchorMin.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_AnchorMin.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_AnchorMax.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_AnchorMax.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_Pivot.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 224187818345042460, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: m_Pivot.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 114680838840418534, guid: 7d56e1e25cfe0d746a30e519e829f8e6,\r\n        type: 2}\r\n      propertyPath: arucoCameraCalibration\r\n      value: \r\n      objectReference: {fileID: 1384223865}\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 100100000, guid: 7d56e1e25cfe0d746a30e519e829f8e6, type: 2}\r\n  m_IsPrefabParent: 0\r\n--- !u!1 &885084650\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1880634248606826, guid: d080de5c598acdf45a91e38030d550ca,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 885084651}\r\n  - component: {fileID: 885084653}\r\n  - component: {fileID: 885084652}\r\n  m_Layer: 0\r\n  m_Name: EventSystem\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &885084651\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4664256286994920, guid: d080de5c598acdf45a91e38030d550ca,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 885084650}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 3\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &885084652\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114846588469736492, guid: d080de5c598acdf45a91e38030d550ca,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 885084650}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 1077351063, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_HorizontalAxis: Horizontal\r\n  m_VerticalAxis: Vertical\r\n  m_SubmitButton: Submit\r\n  m_CancelButton: Cancel\r\n  m_InputActionsPerSecond: 10\r\n  m_RepeatDelay: 0.5\r\n  m_ForceModuleActive: 0\r\n--- !u!114 &885084653\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114460208098437732, guid: d080de5c598acdf45a91e38030d550ca,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 885084650}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: -619905303, guid: f70555f144d8491a825f0804e09c671c, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  m_FirstSelected: {fileID: 0}\r\n  m_sendNavigationEvents: 1\r\n  m_DragThreshold: 5\r\n--- !u!1001 &1260505089\r\nPrefab:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 2\r\n  m_Modification:\r\n    m_TransformParent: {fileID: 0}\r\n    m_Modifications:\r\n    - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n      propertyPath: m_LocalPosition.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n      propertyPath: m_LocalPosition.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n      propertyPath: m_LocalPosition.z\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n      propertyPath: m_LocalRotation.x\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n      propertyPath: m_LocalRotation.y\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n      propertyPath: m_LocalRotation.z\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n      propertyPath: m_LocalRotation.w\r\n      value: 1\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 4913347918360244, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n      propertyPath: m_RootOrder\r\n      value: 2\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 1748105045091876, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n      propertyPath: m_Name\r\n      value: ArucoWebcam\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 114750514242914752, guid: 4c41cbbf88539e94fb09ee8c56317115,\r\n        type: 2}\r\n      propertyPath: autoStart\r\n      value: 0\r\n      objectReference: {fileID: 0}\r\n    - target: {fileID: 1748105045091876, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n      propertyPath: m_IsActive\r\n      value: 1\r\n      objectReference: {fileID: 0}\r\n    m_RemovedComponents: []\r\n  m_ParentPrefab: {fileID: 100100000, guid: 4c41cbbf88539e94fb09ee8c56317115, type: 2}\r\n  m_IsPrefabParent: 0\r\n--- !u!114 &1260505090 stripped\r\nMonoBehaviour:\r\n  m_PrefabParentObject: {fileID: 114439970468321140, guid: 4c41cbbf88539e94fb09ee8c56317115,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 1260505089}\r\n  m_Script: {fileID: 11500000, guid: 43b2fc42ec749de4fa54b3fc1163f23d, type: 3}\r\n--- !u!1 &1382217299\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1382217303}\r\n  - component: {fileID: 1382217302}\r\n  - component: {fileID: 1382217301}\r\n  - component: {fileID: 1382217300}\r\n  m_Layer: 0\r\n  m_Name: Camera\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!81 &1382217300\r\nAudioListener:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1382217299}\r\n  m_Enabled: 1\r\n--- !u!124 &1382217301\r\nBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1382217299}\r\n  m_Enabled: 1\r\n--- !u!20 &1382217302\r\nCamera:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1382217299}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 2\r\n  m_BackGroundColor: {r: 0, g: 0, b: 0, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 1\r\n    height: 1\r\n  near clip plane: 0.3\r\n  far clip plane: 1000\r\n  field of view: 60\r\n  orthographic: 0\r\n  orthographic size: 5\r\n  m_Depth: 0\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294967295\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 3\r\n  m_HDR: 1\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!4 &1382217303\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1382217299}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &1384223865 stripped\r\nMonoBehaviour:\r\n  m_PrefabParentObject: {fileID: 114208106215188584, guid: 33877b17cdcf7334bbd2152625efad87,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 316146149}\r\n  m_Script: {fileID: 11500000, guid: a8936dfef56ecc642bce8962a9434dd2, type: 3}\r\n--- !u!1 &1501240522\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1501240525}\r\n  - component: {fileID: 1501240524}\r\n  - component: {fileID: 1501240523}\r\n  m_Layer: 0\r\n  m_Name: ArucoGridBoard\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!114 &1501240523\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1501240522}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 3b8644fbc5335334e944b09d5c8da57a, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 1501240524}\r\n  displayInPlayMode: 0\r\n--- !u!114 &1501240524\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1501240522}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: a66515f6201048442966d413775d221e, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 0\r\n  markerSideLength: 0.03\r\n  markerBorderBits: 1\r\n  marginsLength: 0\r\n  markersNumberX: 7\r\n  markersNumberY: 5\r\n  markerSeparation: 0.0075\r\n--- !u!4 &1501240525\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1501240522}\r\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\r\n  m_LocalPosition: {x: -0.15, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 7\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!1 &1885516630\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1885516632}\r\n  - component: {fileID: 1885516631}\r\n  m_Layer: 0\r\n  m_Name: Directional Light\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!108 &1885516631\r\nLight:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1885516630}\r\n  m_Enabled: 1\r\n  serializedVersion: 8\r\n  m_Type: 1\r\n  m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}\r\n  m_Intensity: 1\r\n  m_Range: 10\r\n  m_SpotAngle: 30\r\n  m_CookieSize: 10\r\n  m_Shadows:\r\n    m_Type: 2\r\n    m_Resolution: -1\r\n    m_CustomResolution: -1\r\n    m_Strength: 1\r\n    m_Bias: 0.05\r\n    m_NormalBias: 0.4\r\n    m_NearPlane: 0.2\r\n  m_Cookie: {fileID: 0}\r\n  m_DrawHalo: 0\r\n  m_Flare: {fileID: 0}\r\n  m_RenderMode: 0\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294967295\r\n  m_Lightmapping: 4\r\n  m_AreaSize: {x: 1, y: 1}\r\n  m_BounceIntensity: 1\r\n  m_ColorTemperature: 6570\r\n  m_UseColorTemperature: 0\r\n  m_ShadowRadius: 0\r\n  m_ShadowAngle: 0\r\n--- !u!4 &1885516632\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1885516630}\r\n  m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}\r\n  m_LocalPosition: {x: 0, y: 3, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 1\r\n  m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scenes/CalibrateCamera.unity.meta",
    "content": "fileFormatVersion: 2\r\nguid: 8c301b55ddf701049a329b61f6faeca0\r\ntimeCreated: 1511295879\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scenes/CreateMarkers.unity",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!29 &1\r\nOcclusionCullingSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 2\r\n  m_OcclusionBakeSettings:\r\n    smallestOccluder: 5\r\n    smallestHole: 0.25\r\n    backfaceThreshold: 100\r\n  m_SceneGUID: 00000000000000000000000000000000\r\n  m_OcclusionCullingData: {fileID: 0}\r\n--- !u!104 &2\r\nRenderSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 8\r\n  m_Fog: 0\r\n  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}\r\n  m_FogMode: 3\r\n  m_FogDensity: 0.01\r\n  m_LinearFogStart: 0\r\n  m_LinearFogEnd: 300\r\n  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}\r\n  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}\r\n  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}\r\n  m_AmbientIntensity: 1\r\n  m_AmbientMode: 0\r\n  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}\r\n  m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_HaloStrength: 0.5\r\n  m_FlareStrength: 1\r\n  m_FlareFadeSpeed: 3\r\n  m_HaloTexture: {fileID: 0}\r\n  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}\r\n  m_DefaultReflectionMode: 0\r\n  m_DefaultReflectionResolution: 128\r\n  m_ReflectionBounces: 1\r\n  m_ReflectionIntensity: 1\r\n  m_CustomReflection: {fileID: 0}\r\n  m_Sun: {fileID: 0}\r\n  m_IndirectSpecularColor: {r: 0.44657898, g: 0.4964133, b: 0.5748178, a: 1}\r\n--- !u!157 &3\r\nLightmapSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 11\r\n  m_GIWorkflowMode: 0\r\n  m_GISettings:\r\n    serializedVersion: 2\r\n    m_BounceScale: 1\r\n    m_IndirectOutputScale: 1\r\n    m_AlbedoBoost: 1\r\n    m_TemporalCoherenceThreshold: 1\r\n    m_EnvironmentLightingMode: 0\r\n    m_EnableBakedLightmaps: 1\r\n    m_EnableRealtimeLightmaps: 1\r\n  m_LightmapEditorSettings:\r\n    serializedVersion: 9\r\n    m_Resolution: 2\r\n    m_BakeResolution: 40\r\n    m_TextureWidth: 1024\r\n    m_TextureHeight: 1024\r\n    m_AO: 0\r\n    m_AOMaxDistance: 1\r\n    m_CompAOExponent: 1\r\n    m_CompAOExponentDirect: 0\r\n    m_Padding: 2\r\n    m_LightmapParameters: {fileID: 0}\r\n    m_LightmapsBakeMode: 1\r\n    m_TextureCompression: 1\r\n    m_FinalGather: 0\r\n    m_FinalGatherFiltering: 1\r\n    m_FinalGatherRayCount: 256\r\n    m_ReflectionCompression: 2\r\n    m_MixedBakeMode: 1\r\n    m_BakeBackend: 0\r\n    m_PVRSampling: 1\r\n    m_PVRDirectSampleCount: 32\r\n    m_PVRSampleCount: 500\r\n    m_PVRBounces: 2\r\n    m_PVRFilterTypeDirect: 0\r\n    m_PVRFilterTypeIndirect: 0\r\n    m_PVRFilterTypeAO: 0\r\n    m_PVRFilteringMode: 0\r\n    m_PVRCulling: 1\r\n    m_PVRFilteringGaussRadiusDirect: 1\r\n    m_PVRFilteringGaussRadiusIndirect: 5\r\n    m_PVRFilteringGaussRadiusAO: 2\r\n    m_PVRFilteringAtrousPositionSigmaDirect: 0.5\r\n    m_PVRFilteringAtrousPositionSigmaIndirect: 2\r\n    m_PVRFilteringAtrousPositionSigmaAO: 1\r\n    m_ShowResolutionOverlay: 1\r\n  m_LightingDataAsset: {fileID: 0}\r\n  m_UseShadowmask: 0\r\n--- !u!196 &4\r\nNavMeshSettings:\r\n  serializedVersion: 2\r\n  m_ObjectHideFlags: 0\r\n  m_BuildSettings:\r\n    serializedVersion: 2\r\n    agentTypeID: 0\r\n    agentRadius: 0.5\r\n    agentHeight: 2\r\n    agentSlope: 45\r\n    agentClimb: 0.4\r\n    ledgeDropHeight: 0\r\n    maxJumpAcrossDistance: 0\r\n    minRegionArea: 2\r\n    manualCellSize: 0\r\n    cellSize: 0.16666667\r\n    manualTileSize: 0\r\n    tileSize: 256\r\n    accuratePlacement: 0\r\n    debug:\r\n      m_Flags: 0\r\n  m_NavMeshData: {fileID: 0}\r\n--- !u!1 &36187169\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 36187171}\r\n  - component: {fileID: 36187170}\r\n  m_Layer: 0\r\n  m_Name: Directional Light\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!108 &36187170\r\nLight:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 36187169}\r\n  m_Enabled: 1\r\n  serializedVersion: 8\r\n  m_Type: 1\r\n  m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}\r\n  m_Intensity: 1\r\n  m_Range: 10\r\n  m_SpotAngle: 30\r\n  m_CookieSize: 10\r\n  m_Shadows:\r\n    m_Type: 2\r\n    m_Resolution: -1\r\n    m_CustomResolution: -1\r\n    m_Strength: 1\r\n    m_Bias: 0.05\r\n    m_NormalBias: 0.4\r\n    m_NearPlane: 0.2\r\n  m_Cookie: {fileID: 0}\r\n  m_DrawHalo: 0\r\n  m_Flare: {fileID: 0}\r\n  m_RenderMode: 0\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294967295\r\n  m_Lightmapping: 4\r\n  m_AreaSize: {x: 1, y: 1}\r\n  m_BounceIntensity: 1\r\n  m_ColorTemperature: 6570\r\n  m_UseColorTemperature: 0\r\n  m_ShadowRadius: 0\r\n  m_ShadowAngle: 0\r\n--- !u!4 &36187171\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 36187169}\r\n  m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}\r\n  m_LocalPosition: {x: 0, y: 3, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 1\r\n  m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}\r\n--- !u!1 &270237207\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 270237210}\r\n  - component: {fileID: 270237209}\r\n  - component: {fileID: 270237208}\r\n  m_Layer: 0\r\n  m_Name: Marker_Dict5x5_50_Id_0\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!114 &270237208\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 270237207}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 4\r\n  markerSideLength: 200\r\n  markerBorderBits: 1\r\n  markerId: 0\r\n--- !u!114 &270237209\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 270237207}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 270237208}\r\n  displayInPlayMode: 1\r\n  autoSaveInPlayMode: 1\r\n  outputFolder: ArucoUnity/Images/\r\n  automaticFilename: 1\r\n  imageFilename: ArUcoUnity_Marker_Dict5x5_50_Id_0\r\n--- !u!4 &270237210\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 270237207}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: -0.6, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 4\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!1 &831758188\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 831758189}\r\n  - component: {fileID: 831758191}\r\n  - component: {fileID: 831758190}\r\n  m_Layer: 0\r\n  m_Name: Marker_Dict4x4_1000_Id_999\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &831758189\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 831758188}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: -0.3, y: 0, z: 0.008}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 3\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &831758190\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 831758188}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 3\r\n  markerSideLength: 200\r\n  markerBorderBits: 1\r\n  markerId: 999\r\n--- !u!114 &831758191\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 831758188}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 831758190}\r\n  displayInPlayMode: 1\r\n  autoSaveInPlayMode: 1\r\n  outputFolder: ArucoUnity/Images/\r\n  automaticFilename: 1\r\n  imageFilename: ArUcoUnity_Marker_Dict4x4_1000_Id_999\r\n--- !u!1 &1004230723\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1004230729}\r\n  - component: {fileID: 1004230728}\r\n  - component: {fileID: 1004230726}\r\n  m_Layer: 0\r\n  m_Name: GridBoard_Dict4x4_50_X_7_Y_5_MarkerSize_160\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!114 &1004230726\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114579816594623442, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1004230723}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: a66515f6201048442966d413775d221e, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 0\r\n  markerSideLength: 120\r\n  markerBorderBits: 1\r\n  marginsLength: 0\r\n  markersNumberX: 7\r\n  markersNumberY: 5\r\n  markerSeparation: 50\r\n--- !u!114 &1004230728\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1004230723}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 1004230726}\r\n  displayInPlayMode: 1\r\n  autoSaveInPlayMode: 1\r\n  outputFolder: ArucoUnity/Images/\r\n  automaticFilename: 1\r\n  imageFilename: ArUcoUnity_GridBoard_Dict4x4_50_X_7_Y_5_MarkerSize_120\r\n--- !u!4 &1004230729\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1004230723}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: -1.5, y: 0, z: 0.4}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 10\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!1 &1148141135\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1148141138}\r\n  - component: {fileID: 1148141137}\r\n  - component: {fileID: 1148141136}\r\n  m_Layer: 0\r\n  m_Name: 'ChArUcoBoard_Dict4x4_50_X_7_Y_5_SquareSize_200_MarkerSize_120 '\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!114 &1148141136\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114913003422248120, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1148141135}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 2bd3bf3f4a191c04bb36564300e2e048, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 0\r\n  markerSideLength: 120\r\n  markerBorderBits: 1\r\n  marginsLength: 0\r\n  squaresNumberX: 7\r\n  squaresNumberY: 5\r\n  squareSideLength: 200\r\n--- !u!114 &1148141137\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1148141135}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 1148141136}\r\n  displayInPlayMode: 1\r\n  autoSaveInPlayMode: 1\r\n  outputFolder: ArucoUnity/Images/\r\n  automaticFilename: 1\r\n  imageFilename: ArUcoUnity_ChArUcoBoard_Dict4x4_50_X_7_Y_5_SquareSize_200_MarkerSize_120\r\n--- !u!4 &1148141138\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1148141135}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: -1.5, y: 0, z: 1.5}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 11\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!1 &1192287920\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1192287921}\r\n  - component: {fileID: 1192287923}\r\n  - component: {fileID: 1192287922}\r\n  m_Layer: 0\r\n  m_Name: Marker_Dict6x6_50_Id_0\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &1192287921\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1192287920}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0.3}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 5\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &1192287922\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1192287920}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 8\r\n  markerSideLength: 200\r\n  markerBorderBits: 1\r\n  markerId: 0\r\n--- !u!114 &1192287923\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1192287920}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 1192287922}\r\n  displayInPlayMode: 1\r\n  autoSaveInPlayMode: 1\r\n  outputFolder: ArucoUnity/Images/\r\n  automaticFilename: 1\r\n  imageFilename: ArUcoUnity_Marker_Dict6x6_50_Id_0\r\n--- !u!1 &1247465583\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1247465584}\r\n  - component: {fileID: 1247465586}\r\n  - component: {fileID: 1247465585}\r\n  m_Layer: 0\r\n  m_Name: Marker_DictArucoOriginal_Id_0\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &1247465584\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1247465583}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: -0.6, y: 0, z: 0.3}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 7\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &1247465585\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1247465583}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 16\r\n  markerSideLength: 200\r\n  markerBorderBits: 1\r\n  markerId: 0\r\n--- !u!114 &1247465586\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1247465583}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 1247465585}\r\n  displayInPlayMode: 1\r\n  autoSaveInPlayMode: 1\r\n  outputFolder: ArucoUnity/Images/\r\n  automaticFilename: 1\r\n  imageFilename: ArUcoUnity_Marker_DictArucoOriginal_Id_0\r\n--- !u!1 &1264974610\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1264974611}\r\n  - component: {fileID: 1264974613}\r\n  - component: {fileID: 1264974612}\r\n  m_Layer: 0\r\n  m_Name: DiamondMarker_Dict5x5_50_Ids_1_2_3_4_SquareSize_200_MarkerSize_150\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &1264974611\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1264974610}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: -0.3, y: 0, z: 1.7}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 9\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &1264974612\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114608679655634988, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1264974610}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: ef80aa3a81113aa4280fbd60cc0008ae, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 4\r\n  markerSideLength: 150\r\n  markerBorderBits: 0\r\n  squareSideLength: 200\r\n  marker1Id: 1\r\n  marker2Id: 2\r\n  marker3Id: 3\r\n  marker4Id: 4\r\n--- !u!114 &1264974613\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1264974610}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 1264974612}\r\n  displayInPlayMode: 1\r\n  autoSaveInPlayMode: 1\r\n  outputFolder: ArucoUnity/Images/\r\n  automaticFilename: 1\r\n  imageFilename: ArUcoUnity_DiamondMarker_Dict5x5_50_Ids_1_2_3_4_SquareSize_200_MarkerSize_150\r\n--- !u!1 &1374276491\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1374276492}\r\n  - component: {fileID: 1374276494}\r\n  - component: {fileID: 1374276493}\r\n  m_Layer: 0\r\n  m_Name: DiamondMarker_Dict4x4_50_Ids_36_37_38_39_SquareSize_200_MarkerSize_120\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &1374276492\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1374276491}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: -0.3, y: 0, z: 0.9}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 8\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &1374276493\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114608679655634988, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1374276491}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: ef80aa3a81113aa4280fbd60cc0008ae, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 0\r\n  markerSideLength: 120\r\n  markerBorderBits: 0\r\n  squareSideLength: 200\r\n  marker1Id: 36\r\n  marker2Id: 37\r\n  marker3Id: 38\r\n  marker4Id: 39\r\n--- !u!114 &1374276494\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1374276491}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 1374276493}\r\n  displayInPlayMode: 1\r\n  autoSaveInPlayMode: 1\r\n  outputFolder: ArucoUnity/Images/\r\n  automaticFilename: 1\r\n  imageFilename: ArUcoUnity_DiamondMarker_Dict4x4_50_Ids_36_37_38_39_SquareSize_200_MarkerSize_120\r\n--- !u!1 &1422556659\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1422556660}\r\n  - component: {fileID: 1422556662}\r\n  - component: {fileID: 1422556661}\r\n  m_Layer: 0\r\n  m_Name: Marker_Dict7x7_50_Id_0\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!4 &1422556660\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1422556659}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: -0.3, y: 0, z: 0.3}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 6\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!114 &1422556661\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1422556659}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 12\r\n  markerSideLength: 200\r\n  markerBorderBits: 1\r\n  markerId: 0\r\n--- !u!114 &1422556662\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 114578584048220454, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1422556659}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 1422556661}\r\n  displayInPlayMode: 1\r\n  autoSaveInPlayMode: 1\r\n  outputFolder: ArucoUnity/Images/\r\n  automaticFilename: 1\r\n  imageFilename: ArUcoUnity_Marker_Dict7x7_50_Id_0\r\n--- !u!1 &1775526413\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 1512112327971110, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1775526416}\r\n  - component: {fileID: 1775526415}\r\n  - component: {fileID: 1775526414}\r\n  m_Layer: 0\r\n  m_Name: Marker_Dict4x4_50_Id_0\r\n  m_TagString: Untagged\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!114 &1775526414\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1775526413}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  dictionaryName: 0\r\n  markerSideLength: 200\r\n  markerBorderBits: 1\r\n  markerId: 0\r\n--- !u!114 &1775526415\r\nMonoBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1775526413}\r\n  m_Enabled: 1\r\n  m_EditorHideFlags: 0\r\n  m_Script: {fileID: 11500000, guid: 67b4f93e96aa56b4f8b21751c9e7bc16, type: 3}\r\n  m_Name: \r\n  m_EditorClassIdentifier: \r\n  arucoObject: {fileID: 1775526414}\r\n  displayInPlayMode: 1\r\n  autoSaveInPlayMode: 1\r\n  outputFolder: ArucoUnity/Images/\r\n  automaticFilename: 1\r\n  imageFilename: ArUcoUnity_Marker_Dict4x4_50_Id_0\r\n--- !u!4 &1775526416\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 4439509343331604, guid: fe3e083a84336df4da10c30fa49a8be2,\r\n    type: 2}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1775526413}\r\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\r\n  m_LocalPosition: {x: 0, y: 0, z: 0}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 2\r\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\r\n--- !u!1 &1890850132\r\nGameObject:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  serializedVersion: 5\r\n  m_Component:\r\n  - component: {fileID: 1890850137}\r\n  - component: {fileID: 1890850136}\r\n  - component: {fileID: 1890850134}\r\n  - component: {fileID: 1890850133}\r\n  m_Layer: 0\r\n  m_Name: Camera\r\n  m_TagString: MainCamera\r\n  m_Icon: {fileID: 0}\r\n  m_NavMeshLayer: 0\r\n  m_StaticEditorFlags: 0\r\n  m_IsActive: 1\r\n--- !u!81 &1890850133\r\nAudioListener:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1890850132}\r\n  m_Enabled: 1\r\n--- !u!124 &1890850134\r\nBehaviour:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1890850132}\r\n  m_Enabled: 1\r\n--- !u!20 &1890850136\r\nCamera:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1890850132}\r\n  m_Enabled: 1\r\n  serializedVersion: 2\r\n  m_ClearFlags: 2\r\n  m_BackGroundColor: {r: 0.2352941, g: 0.2352941, b: 0.2352941, a: 0}\r\n  m_NormalizedViewPortRect:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 1\r\n    height: 1\r\n  near clip plane: 0.3\r\n  far clip plane: 1000\r\n  field of view: 90.8\r\n  orthographic: 1\r\n  orthographic size: 1.2\r\n  m_Depth: -1\r\n  m_CullingMask:\r\n    serializedVersion: 2\r\n    m_Bits: 4294967295\r\n  m_RenderingPath: -1\r\n  m_TargetTexture: {fileID: 0}\r\n  m_TargetDisplay: 0\r\n  m_TargetEye: 0\r\n  m_HDR: 0\r\n  m_AllowMSAA: 1\r\n  m_AllowDynamicResolution: 0\r\n  m_ForceIntoRT: 0\r\n  m_OcclusionCulling: 1\r\n  m_StereoConvergence: 10\r\n  m_StereoSeparation: 0.022\r\n--- !u!4 &1890850137\r\nTransform:\r\n  m_ObjectHideFlags: 0\r\n  m_PrefabParentObject: {fileID: 0}\r\n  m_PrefabInternal: {fileID: 0}\r\n  m_GameObject: {fileID: 1890850132}\r\n  m_LocalRotation: {x: 0.7071068, y: 0, z: 0, w: 0.7071068}\r\n  m_LocalPosition: {x: -1, y: 2, z: 1}\r\n  m_LocalScale: {x: 1, y: 1, z: 1}\r\n  m_Children: []\r\n  m_Father: {fileID: 0}\r\n  m_RootOrder: 0\r\n  m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}\r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scenes/CreateMarkers.unity.meta",
    "content": "fileFormatVersion: 2\r\nguid: 5180c8d10bf8d1e4cb9c678d70a60e60\r\ntimeCreated: 1523627494\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scenes/TrackMarkers.unity",
    "content": "%YAML 1.1\n%TAG !u! tag:unity3d.com,2011:\n--- !u!29 &1\nOcclusionCullingSettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 2\n  m_OcclusionBakeSettings:\n    smallestOccluder: 5\n    smallestHole: 0.25\n    backfaceThreshold: 100\n  m_SceneGUID: 00000000000000000000000000000000\n  m_OcclusionCullingData: {fileID: 0}\n--- !u!104 &2\nRenderSettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 9\n  m_Fog: 0\n  m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1}\n  m_FogMode: 3\n  m_FogDensity: 0.01\n  m_LinearFogStart: 0\n  m_LinearFogEnd: 300\n  m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1}\n  m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1}\n  m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1}\n  m_AmbientIntensity: 1\n  m_AmbientMode: 0\n  m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1}\n  m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0}\n  m_HaloStrength: 0.5\n  m_FlareStrength: 1\n  m_FlareFadeSpeed: 3\n  m_HaloTexture: {fileID: 0}\n  m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0}\n  m_DefaultReflectionMode: 0\n  m_DefaultReflectionResolution: 128\n  m_ReflectionBounces: 1\n  m_ReflectionIntensity: 1\n  m_CustomReflection: {fileID: 0}\n  m_Sun: {fileID: 0}\n  m_IndirectSpecularColor: {r: 0.44657874, g: 0.49641258, b: 0.5748172, a: 1}\n  m_UseRadianceAmbientProbe: 0\n--- !u!157 &3\nLightmapSettings:\n  m_ObjectHideFlags: 0\n  serializedVersion: 11\n  m_GIWorkflowMode: 0\n  m_GISettings:\n    serializedVersion: 2\n    m_BounceScale: 1\n    m_IndirectOutputScale: 1\n    m_AlbedoBoost: 1\n    m_EnvironmentLightingMode: 0\n    m_EnableBakedLightmaps: 1\n    m_EnableRealtimeLightmaps: 1\n  m_LightmapEditorSettings:\n    serializedVersion: 10\n    m_Resolution: 2\n    m_BakeResolution: 40\n    m_AtlasSize: 1024\n    m_AO: 0\n    m_AOMaxDistance: 1\n    m_CompAOExponent: 1\n    m_CompAOExponentDirect: 0\n    m_Padding: 2\n    m_LightmapParameters: {fileID: 0}\n    m_LightmapsBakeMode: 1\n    m_TextureCompression: 1\n    m_FinalGather: 0\n    m_FinalGatherFiltering: 1\n    m_FinalGatherRayCount: 256\n    m_ReflectionCompression: 2\n    m_MixedBakeMode: 1\n    m_BakeBackend: 0\n    m_PVRSampling: 1\n    m_PVRDirectSampleCount: 32\n    m_PVRSampleCount: 500\n    m_PVRBounces: 2\n    m_PVRFilterTypeDirect: 0\n    m_PVRFilterTypeIndirect: 0\n    m_PVRFilterTypeAO: 0\n    m_PVRFilteringMode: 0\n    m_PVRCulling: 1\n    m_PVRFilteringGaussRadiusDirect: 1\n    m_PVRFilteringGaussRadiusIndirect: 5\n    m_PVRFilteringGaussRadiusAO: 2\n    m_PVRFilteringAtrousPositionSigmaDirect: 0.5\n    m_PVRFilteringAtrousPositionSigmaIndirect: 2\n    m_PVRFilteringAtrousPositionSigmaAO: 1\n    m_ShowResolutionOverlay: 1\n  m_LightingDataAsset: {fileID: 0}\n  m_UseShadowmask: 0\n--- !u!196 &4\nNavMeshSettings:\n  serializedVersion: 2\n  m_ObjectHideFlags: 0\n  m_BuildSettings:\n    serializedVersion: 2\n    agentTypeID: 0\n    agentRadius: 0.5\n    agentHeight: 2\n    agentSlope: 45\n    agentClimb: 0.4\n    ledgeDropHeight: 0\n    maxJumpAcrossDistance: 0\n    minRegionArea: 2\n    manualCellSize: 0\n    cellSize: 0.16666667\n    manualTileSize: 0\n    tileSize: 256\n    accuratePlacement: 0\n    debug:\n      m_Flags: 0\n  m_NavMeshData: {fileID: 0}\n--- !u!1 &88552867\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 88552868}\n  - component: {fileID: 88552871}\n  - component: {fileID: 88552870}\n  - component: {fileID: 88552869}\n  m_Layer: 0\n  m_Name: Cube\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!4 &88552868\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 88552867}\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\n  m_LocalPosition: {x: 0, y: 0.0215, z: 0}\n  m_LocalScale: {x: 0.349, y: 0.043, z: 0.247}\n  m_Children: []\n  m_Father: {fileID: 910886727}\n  m_RootOrder: 0\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\n--- !u!23 &88552869\nMeshRenderer:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 88552867}\n  m_Enabled: 1\n  m_CastShadows: 1\n  m_ReceiveShadows: 1\n  m_DynamicOccludee: 1\n  m_MotionVectors: 1\n  m_LightProbeUsage: 1\n  m_ReflectionProbeUsage: 1\n  m_RenderingLayerMask: 4294967295\n  m_RendererPriority: 0\n  m_Materials:\n  - {fileID: 2100000, guid: ce995bb8fb0591f419ea7d43d1199afe, type: 2}\n  m_StaticBatchInfo:\n    firstSubMesh: 0\n    subMeshCount: 0\n  m_StaticBatchRoot: {fileID: 0}\n  m_ProbeAnchor: {fileID: 0}\n  m_LightProbeVolumeOverride: {fileID: 0}\n  m_ScaleInLightmap: 1\n  m_PreserveUVs: 1\n  m_IgnoreNormalsForChartDetection: 0\n  m_ImportantGI: 0\n  m_StitchLightmapSeams: 0\n  m_SelectedEditorRenderState: 3\n  m_MinimumChartSize: 4\n  m_AutoUVMaxDistance: 0.5\n  m_AutoUVMaxAngle: 89\n  m_LightmapParameters: {fileID: 0}\n  m_SortingLayerID: 0\n  m_SortingLayer: 0\n  m_SortingOrder: 0\n--- !u!65 &88552870\nBoxCollider:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 88552867}\n  m_Material: {fileID: 0}\n  m_IsTrigger: 0\n  m_Enabled: 1\n  serializedVersion: 2\n  m_Size: {x: 1, y: 1, z: 1}\n  m_Center: {x: 0, y: 0, z: 0}\n--- !u!33 &88552871\nMeshFilter:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 88552867}\n  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}\n--- !u!1 &101226251\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 1178669336944490, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 101226252}\n  m_Layer: 0\n  m_Name: Axes\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!4 &101226252\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 4521172703693674, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 101226251}\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\n  m_LocalPosition: {x: 0, y: 0, z: 0}\n  m_LocalScale: {x: 1, y: 1, z: 1}\n  m_Children:\n  - {fileID: 739589397}\n  - {fileID: 431576766}\n  - {fileID: 1647296277}\n  - {fileID: 934518934}\n  m_Father: {fileID: 136054458}\n  m_RootOrder: 0\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\n--- !u!1 &136054457\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 136054458}\n  - component: {fileID: 136054461}\n  - component: {fileID: 136054460}\n  - component: {fileID: 136054459}\n  m_Layer: 0\n  m_Name: Cube\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!4 &136054458\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 136054457}\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\n  m_LocalPosition: {x: 0, y: 0.027, z: 0}\n  m_LocalScale: {x: 0.054, y: 0.054, z: 0.054}\n  m_Children:\n  - {fileID: 101226252}\n  m_Father: {fileID: 887812764}\n  m_RootOrder: 0\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\n--- !u!23 &136054459\nMeshRenderer:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 136054457}\n  m_Enabled: 1\n  m_CastShadows: 1\n  m_ReceiveShadows: 1\n  m_DynamicOccludee: 1\n  m_MotionVectors: 1\n  m_LightProbeUsage: 1\n  m_ReflectionProbeUsage: 1\n  m_RenderingLayerMask: 4294967295\n  m_RendererPriority: 0\n  m_Materials:\n  - {fileID: 2100000, guid: ce995bb8fb0591f419ea7d43d1199afe, type: 2}\n  m_StaticBatchInfo:\n    firstSubMesh: 0\n    subMeshCount: 0\n  m_StaticBatchRoot: {fileID: 0}\n  m_ProbeAnchor: {fileID: 0}\n  m_LightProbeVolumeOverride: {fileID: 0}\n  m_ScaleInLightmap: 1\n  m_PreserveUVs: 1\n  m_IgnoreNormalsForChartDetection: 0\n  m_ImportantGI: 0\n  m_StitchLightmapSeams: 0\n  m_SelectedEditorRenderState: 3\n  m_MinimumChartSize: 4\n  m_AutoUVMaxDistance: 0.5\n  m_AutoUVMaxAngle: 89\n  m_LightmapParameters: {fileID: 0}\n  m_SortingLayerID: 0\n  m_SortingLayer: 0\n  m_SortingOrder: 0\n--- !u!65 &136054460\nBoxCollider:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 136054457}\n  m_Material: {fileID: 0}\n  m_IsTrigger: 0\n  m_Enabled: 1\n  serializedVersion: 2\n  m_Size: {x: 1, y: 1, z: 1}\n  m_Center: {x: 0, y: 0, z: 0}\n--- !u!33 &136054461\nMeshFilter:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 136054457}\n  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}\n--- !u!1 &373694447\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 373694449}\n  - component: {fileID: 373694448}\n  m_Layer: 0\n  m_Name: Directional Light\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!108 &373694448\nLight:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 373694447}\n  m_Enabled: 1\n  serializedVersion: 8\n  m_Type: 1\n  m_Color: {r: 1, g: 0.95686275, b: 0.8392157, a: 1}\n  m_Intensity: 2\n  m_Range: 10\n  m_SpotAngle: 30\n  m_CookieSize: 10\n  m_Shadows:\n    m_Type: 2\n    m_Resolution: -1\n    m_CustomResolution: -1\n    m_Strength: 1\n    m_Bias: 0.05\n    m_NormalBias: 0.4\n    m_NearPlane: 0.2\n  m_Cookie: {fileID: 0}\n  m_DrawHalo: 0\n  m_Flare: {fileID: 0}\n  m_RenderMode: 0\n  m_CullingMask:\n    serializedVersion: 2\n    m_Bits: 4294967295\n  m_Lightmapping: 4\n  m_LightShadowCasterMode: 0\n  m_AreaSize: {x: 1, y: 1}\n  m_BounceIntensity: 1\n  m_ColorTemperature: 6570\n  m_UseColorTemperature: 0\n  m_ShadowRadius: 0\n  m_ShadowAngle: 0\n--- !u!4 &373694449\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 373694447}\n  m_LocalRotation: {x: 0.40821788, y: -0.23456968, z: 0.10938163, w: 0.8754261}\n  m_LocalPosition: {x: 0, y: 3, z: 0}\n  m_LocalScale: {x: 1, y: 1, z: 1}\n  m_Children: []\n  m_Father: {fileID: 0}\n  m_RootOrder: 1\n  m_LocalEulerAnglesHint: {x: 50, y: -30, z: 0}\n--- !u!1 &431576765\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 1687848253974514, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 431576766}\n  - component: {fileID: 431576769}\n  - component: {fileID: 431576768}\n  - component: {fileID: 431576767}\n  m_Layer: 0\n  m_Name: Yaxis\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!4 &431576766\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 4012611428924082, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 431576765}\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\n  m_LocalPosition: {x: 0, y: 0, z: 0}\n  m_LocalScale: {x: 0.02, y: 0.5, z: 0.02}\n  m_Children: []\n  m_Father: {fileID: 101226252}\n  m_RootOrder: 1\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\n--- !u!23 &431576767\nMeshRenderer:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 23002387428412198, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 431576765}\n  m_Enabled: 1\n  m_CastShadows: 1\n  m_ReceiveShadows: 1\n  m_DynamicOccludee: 1\n  m_MotionVectors: 1\n  m_LightProbeUsage: 1\n  m_ReflectionProbeUsage: 1\n  m_RenderingLayerMask: 4294967295\n  m_RendererPriority: 0\n  m_Materials:\n  - {fileID: 2100000, guid: 34e890fc50f03814daac3dd16e73b140, type: 2}\n  m_StaticBatchInfo:\n    firstSubMesh: 0\n    subMeshCount: 0\n  m_StaticBatchRoot: {fileID: 0}\n  m_ProbeAnchor: {fileID: 0}\n  m_LightProbeVolumeOverride: {fileID: 0}\n  m_ScaleInLightmap: 1\n  m_PreserveUVs: 1\n  m_IgnoreNormalsForChartDetection: 0\n  m_ImportantGI: 0\n  m_StitchLightmapSeams: 0\n  m_SelectedEditorRenderState: 3\n  m_MinimumChartSize: 4\n  m_AutoUVMaxDistance: 0.5\n  m_AutoUVMaxAngle: 89\n  m_LightmapParameters: {fileID: 0}\n  m_SortingLayerID: 0\n  m_SortingLayer: 0\n  m_SortingOrder: 0\n--- !u!136 &431576768\nCapsuleCollider:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 136718255651014494, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 431576765}\n  m_Material: {fileID: 0}\n  m_IsTrigger: 0\n  m_Enabled: 1\n  m_Radius: 0.5\n  m_Height: 2\n  m_Direction: 1\n  m_Center: {x: 0, y: 0, z: 0}\n--- !u!33 &431576769\nMeshFilter:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 33736080738166530, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 431576765}\n  m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}\n--- !u!1 &606566497\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 606566500}\n  - component: {fileID: 606566499}\n  - component: {fileID: 606566498}\n  m_Layer: 0\n  m_Name: ArucoDiamond Dict5x5_50 Ids_1_2_3_4\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!114 &606566498\nMonoBehaviour:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 606566497}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 11500000, guid: 3b8644fbc5335334e944b09d5c8da57a, type: 3}\n  m_Name: \n  m_EditorClassIdentifier: \n  arucoObject: {fileID: 606566499}\n  displayInPlayMode: 1\n--- !u!114 &606566499\nMonoBehaviour:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 606566497}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 11500000, guid: ef80aa3a81113aa4280fbd60cc0008ae, type: 3}\n  m_Name: \n  m_EditorClassIdentifier: \n  dictionaryName: 4\n  markerSideLength: 0.0315\n  markerBorderBits: 1\n  squareSideLength: 0.042\n  marker1Id: 1\n  marker2Id: 2\n  marker3Id: 3\n  marker4Id: 4\n--- !u!4 &606566500\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 606566497}\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\n  m_LocalPosition: {x: -0.2, y: 0, z: -0.35}\n  m_LocalScale: {x: 1, y: 1, z: 1}\n  m_Children:\n  - {fileID: 848024234}\n  m_Father: {fileID: 0}\n  m_RootOrder: 5\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\n--- !u!1 &739589396\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 1013998643351052, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 739589397}\n  - component: {fileID: 739589400}\n  - component: {fileID: 739589399}\n  - component: {fileID: 739589398}\n  m_Layer: 0\n  m_Name: Xaxis\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!4 &739589397\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 4913306099320574, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 739589396}\n  m_LocalRotation: {x: -0, y: -0, z: 0.7071068, w: -0.7071068}\n  m_LocalPosition: {x: 0.5, y: -0.5, z: 0}\n  m_LocalScale: {x: 0.02, y: 0.5000003, z: 0.02}\n  m_Children: []\n  m_Father: {fileID: 101226252}\n  m_RootOrder: 0\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 270}\n--- !u!23 &739589398\nMeshRenderer:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 23021429105240008, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 739589396}\n  m_Enabled: 1\n  m_CastShadows: 1\n  m_ReceiveShadows: 1\n  m_DynamicOccludee: 1\n  m_MotionVectors: 1\n  m_LightProbeUsage: 1\n  m_ReflectionProbeUsage: 1\n  m_RenderingLayerMask: 4294967295\n  m_RendererPriority: 0\n  m_Materials:\n  - {fileID: 2100000, guid: edff0e56dd5f1424688617c697177ece, type: 2}\n  m_StaticBatchInfo:\n    firstSubMesh: 0\n    subMeshCount: 0\n  m_StaticBatchRoot: {fileID: 0}\n  m_ProbeAnchor: {fileID: 0}\n  m_LightProbeVolumeOverride: {fileID: 0}\n  m_ScaleInLightmap: 1\n  m_PreserveUVs: 1\n  m_IgnoreNormalsForChartDetection: 0\n  m_ImportantGI: 0\n  m_StitchLightmapSeams: 0\n  m_SelectedEditorRenderState: 3\n  m_MinimumChartSize: 4\n  m_AutoUVMaxDistance: 0.5\n  m_AutoUVMaxAngle: 89\n  m_LightmapParameters: {fileID: 0}\n  m_SortingLayerID: 0\n  m_SortingLayer: 0\n  m_SortingOrder: 0\n--- !u!136 &739589399\nCapsuleCollider:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 136191313221229334, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 739589396}\n  m_Material: {fileID: 0}\n  m_IsTrigger: 0\n  m_Enabled: 1\n  m_Radius: 0.5\n  m_Height: 2\n  m_Direction: 1\n  m_Center: {x: 0, y: 0, z: 0}\n--- !u!33 &739589400\nMeshFilter:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 33203559360702468, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 739589396}\n  m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}\n--- !u!1 &848024233\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 848024234}\n  - component: {fileID: 848024237}\n  - component: {fileID: 848024236}\n  - component: {fileID: 848024235}\n  m_Layer: 0\n  m_Name: Cube\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!4 &848024234\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 848024233}\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\n  m_LocalPosition: {x: 0, y: 0.021, z: 0}\n  m_LocalScale: {x: 0.126, y: 0.042, z: 0.126}\n  m_Children: []\n  m_Father: {fileID: 606566500}\n  m_RootOrder: 0\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\n--- !u!23 &848024235\nMeshRenderer:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 848024233}\n  m_Enabled: 1\n  m_CastShadows: 1\n  m_ReceiveShadows: 1\n  m_DynamicOccludee: 1\n  m_MotionVectors: 1\n  m_LightProbeUsage: 1\n  m_ReflectionProbeUsage: 1\n  m_RenderingLayerMask: 4294967295\n  m_RendererPriority: 0\n  m_Materials:\n  - {fileID: 2100000, guid: ce995bb8fb0591f419ea7d43d1199afe, type: 2}\n  m_StaticBatchInfo:\n    firstSubMesh: 0\n    subMeshCount: 0\n  m_StaticBatchRoot: {fileID: 0}\n  m_ProbeAnchor: {fileID: 0}\n  m_LightProbeVolumeOverride: {fileID: 0}\n  m_ScaleInLightmap: 1\n  m_PreserveUVs: 1\n  m_IgnoreNormalsForChartDetection: 0\n  m_ImportantGI: 0\n  m_StitchLightmapSeams: 0\n  m_SelectedEditorRenderState: 3\n  m_MinimumChartSize: 4\n  m_AutoUVMaxDistance: 0.5\n  m_AutoUVMaxAngle: 89\n  m_LightmapParameters: {fileID: 0}\n  m_SortingLayerID: 0\n  m_SortingLayer: 0\n  m_SortingOrder: 0\n--- !u!65 &848024236\nBoxCollider:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 848024233}\n  m_Material: {fileID: 0}\n  m_IsTrigger: 0\n  m_Enabled: 1\n  serializedVersion: 2\n  m_Size: {x: 1, y: 1, z: 1}\n  m_Center: {x: 0, y: 0, z: 0}\n--- !u!33 &848024237\nMeshFilter:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 848024233}\n  m_Mesh: {fileID: 10202, guid: 0000000000000000e000000000000000, type: 0}\n--- !u!1 &887812762\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 1000012123911946, guid: f6fe6e660eed5c04aa2fe97712d889fa,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 887812764}\n  - component: {fileID: 887812763}\n  - component: {fileID: 887812765}\n  m_Layer: 0\n  m_Name: ArucoMarker Dict4x4_50 Id_35\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!114 &887812763\nMonoBehaviour:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 887812762}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 11500000, guid: e7dccfd012452104795fa7ee55cee65a, type: 3}\n  m_Name: \n  m_EditorClassIdentifier: \n  dictionaryName: 0\n  markerSideLength: 0.054\n  markerBorderBits: 1\n  markerId: 35\n--- !u!4 &887812764\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 4000010362706424, guid: f6fe6e660eed5c04aa2fe97712d889fa,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 887812762}\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\n  m_LocalPosition: {x: 0, y: 0, z: -0.3}\n  m_LocalScale: {x: 1, y: 1, z: 1}\n  m_Children:\n  - {fileID: 136054458}\n  m_Father: {fileID: 0}\n  m_RootOrder: 3\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\n--- !u!114 &887812765\nMonoBehaviour:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 887812762}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 11500000, guid: 3b8644fbc5335334e944b09d5c8da57a, type: 3}\n  m_Name: \n  m_EditorClassIdentifier: \n  arucoObject: {fileID: 887812763}\n  displayInPlayMode: 1\n--- !u!1001 &904118489\nPrefabInstance:\n  m_ObjectHideFlags: 0\n  serializedVersion: 2\n  m_Modification:\n    m_TransformParent: {fileID: 0}\n    m_Modifications:\n    - target: {fileID: 1807315793213710, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3}\n      propertyPath: m_IsActive\n      value: 1\n      objectReference: {fileID: 0}\n    - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5,\n        type: 3}\n      propertyPath: arucoObjects.Array.size\n      value: 3\n      objectReference: {fileID: 0}\n    - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5,\n        type: 3}\n      propertyPath: cameraParametersController\n      value: \n      objectReference: {fileID: 1994956398}\n    - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5,\n        type: 3}\n      propertyPath: arucoCamera\n      value: \n      objectReference: {fileID: 1994956400}\n    - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5,\n        type: 3}\n      propertyPath: arucoObjects.Array.data[0]\n      value: \n      objectReference: {fileID: 887812763}\n    - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5,\n        type: 3}\n      propertyPath: arucoObjects.Array.data[1]\n      value: \n      objectReference: {fileID: 910886726}\n    - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5,\n        type: 3}\n      propertyPath: arucoObjects.Array.data[2]\n      value: \n      objectReference: {fileID: 606566499}\n    - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5,\n        type: 3}\n      propertyPath: arucoCameraUndistortion\n      value: \n      objectReference: {fileID: 1994956401}\n    - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5,\n        type: 3}\n      propertyPath: arucoCameraDisplay\n      value: \n      objectReference: {fileID: 1994956399}\n    - target: {fileID: 114704470919034220, guid: 59dab6b4111ee0849bb667a5a1d298e5,\n        type: 3}\n      propertyPath: m_Enabled\n      value: 1\n      objectReference: {fileID: 0}\n    - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3}\n      propertyPath: m_LocalPosition.x\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3}\n      propertyPath: m_LocalPosition.y\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3}\n      propertyPath: m_LocalPosition.z\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3}\n      propertyPath: m_LocalRotation.x\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3}\n      propertyPath: m_LocalRotation.y\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3}\n      propertyPath: m_LocalRotation.z\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3}\n      propertyPath: m_LocalRotation.w\n      value: 1\n      objectReference: {fileID: 0}\n    - target: {fileID: 4105970446323926, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3}\n      propertyPath: m_RootOrder\n      value: 2\n      objectReference: {fileID: 0}\n    m_RemovedComponents: []\n  m_SourcePrefab: {fileID: 100100000, guid: 59dab6b4111ee0849bb667a5a1d298e5, type: 3}\n--- !u!1 &910886724\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 910886727}\n  - component: {fileID: 910886726}\n  - component: {fileID: 910886725}\n  m_Layer: 0\n  m_Name: ArucoGridBoard Dict4x4_50 X_7 Y_5\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!114 &910886725\nMonoBehaviour:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 910886724}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 11500000, guid: 3b8644fbc5335334e944b09d5c8da57a, type: 3}\n  m_Name: \n  m_EditorClassIdentifier: \n  arucoObject: {fileID: 910886726}\n  displayInPlayMode: 1\n--- !u!114 &910886726\nMonoBehaviour:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 910886724}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 11500000, guid: a66515f6201048442966d413775d221e, type: 3}\n  m_Name: \n  m_EditorClassIdentifier: \n  dictionaryName: 0\n  markerSideLength: 0.043\n  markerBorderBits: 1\n  marginsLength: 0\n  markersNumberX: 7\n  markersNumberY: 5\n  markerSeparation: 0.008\n--- !u!4 &910886727\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 0}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 910886724}\n  m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}\n  m_LocalPosition: {x: -0.1, y: 0, z: -0.1}\n  m_LocalScale: {x: 1, y: 1, z: 1}\n  m_Children:\n  - {fileID: 88552868}\n  m_Father: {fileID: 0}\n  m_RootOrder: 4\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\n--- !u!1 &934518933\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 1229604647514558, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 934518934}\n  - component: {fileID: 934518937}\n  - component: {fileID: 934518936}\n  - component: {fileID: 934518935}\n  m_Layer: 0\n  m_Name: SphereOrigin\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!4 &934518934\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 4653367363216972, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 934518933}\n  m_LocalRotation: {x: -0, y: -0, z: -0, w: 1}\n  m_LocalPosition: {x: 0, y: -0.5, z: 0}\n  m_LocalScale: {x: 0.050000004, y: 0.050000004, z: 0.050000004}\n  m_Children: []\n  m_Father: {fileID: 101226252}\n  m_RootOrder: 3\n  m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}\n--- !u!23 &934518935\nMeshRenderer:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 23512743496046622, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 934518933}\n  m_Enabled: 1\n  m_CastShadows: 1\n  m_ReceiveShadows: 1\n  m_DynamicOccludee: 1\n  m_MotionVectors: 1\n  m_LightProbeUsage: 1\n  m_ReflectionProbeUsage: 1\n  m_RenderingLayerMask: 4294967295\n  m_RendererPriority: 0\n  m_Materials:\n  - {fileID: 2100000, guid: 6190c33accc60224bbb0454dd4be9685, type: 2}\n  m_StaticBatchInfo:\n    firstSubMesh: 0\n    subMeshCount: 0\n  m_StaticBatchRoot: {fileID: 0}\n  m_ProbeAnchor: {fileID: 0}\n  m_LightProbeVolumeOverride: {fileID: 0}\n  m_ScaleInLightmap: 1\n  m_PreserveUVs: 1\n  m_IgnoreNormalsForChartDetection: 0\n  m_ImportantGI: 0\n  m_StitchLightmapSeams: 0\n  m_SelectedEditorRenderState: 3\n  m_MinimumChartSize: 4\n  m_AutoUVMaxDistance: 0.5\n  m_AutoUVMaxAngle: 89\n  m_LightmapParameters: {fileID: 0}\n  m_SortingLayerID: 0\n  m_SortingLayer: 0\n  m_SortingOrder: 0\n--- !u!135 &934518936\nSphereCollider:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 135369509157430370, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 934518933}\n  m_Material: {fileID: 0}\n  m_IsTrigger: 0\n  m_Enabled: 1\n  serializedVersion: 2\n  m_Radius: 0.5\n  m_Center: {x: 0, y: 0, z: 0}\n--- !u!33 &934518937\nMeshFilter:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 33722364558535698, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 934518933}\n  m_Mesh: {fileID: 10207, guid: 0000000000000000e000000000000000, type: 0}\n--- !u!1 &1647296276\nGameObject:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 1558730765965760, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  serializedVersion: 6\n  m_Component:\n  - component: {fileID: 1647296277}\n  - component: {fileID: 1647296280}\n  - component: {fileID: 1647296279}\n  - component: {fileID: 1647296278}\n  m_Layer: 0\n  m_Name: Zaxis\n  m_TagString: Untagged\n  m_Icon: {fileID: 0}\n  m_NavMeshLayer: 0\n  m_StaticEditorFlags: 0\n  m_IsActive: 1\n--- !u!4 &1647296277\nTransform:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 4286828002999784, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 1647296276}\n  m_LocalRotation: {x: 0.7071068, y: -0, z: -0, w: 0.7071068}\n  m_LocalPosition: {x: 0, y: -0.5, z: 0.5}\n  m_LocalScale: {x: 0.02, y: 0.5000003, z: 0.02}\n  m_Children: []\n  m_Father: {fileID: 101226252}\n  m_RootOrder: 2\n  m_LocalEulerAnglesHint: {x: 90, y: 0, z: 0}\n--- !u!23 &1647296278\nMeshRenderer:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 23870921209229818, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 1647296276}\n  m_Enabled: 1\n  m_CastShadows: 1\n  m_ReceiveShadows: 1\n  m_DynamicOccludee: 1\n  m_MotionVectors: 1\n  m_LightProbeUsage: 1\n  m_ReflectionProbeUsage: 1\n  m_RenderingLayerMask: 4294967295\n  m_RendererPriority: 0\n  m_Materials:\n  - {fileID: 2100000, guid: c90c33d2d9c0e54409acab106b4326fd, type: 2}\n  m_StaticBatchInfo:\n    firstSubMesh: 0\n    subMeshCount: 0\n  m_StaticBatchRoot: {fileID: 0}\n  m_ProbeAnchor: {fileID: 0}\n  m_LightProbeVolumeOverride: {fileID: 0}\n  m_ScaleInLightmap: 1\n  m_PreserveUVs: 1\n  m_IgnoreNormalsForChartDetection: 0\n  m_ImportantGI: 0\n  m_StitchLightmapSeams: 0\n  m_SelectedEditorRenderState: 3\n  m_MinimumChartSize: 4\n  m_AutoUVMaxDistance: 0.5\n  m_AutoUVMaxAngle: 89\n  m_LightmapParameters: {fileID: 0}\n  m_SortingLayerID: 0\n  m_SortingLayer: 0\n  m_SortingOrder: 0\n--- !u!136 &1647296279\nCapsuleCollider:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 136576069785485510, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 1647296276}\n  m_Material: {fileID: 0}\n  m_IsTrigger: 0\n  m_Enabled: 1\n  m_Radius: 0.5\n  m_Height: 2\n  m_Direction: 1\n  m_Center: {x: 0, y: 0, z: 0}\n--- !u!33 &1647296280\nMeshFilter:\n  m_ObjectHideFlags: 0\n  m_CorrespondingSourceObject: {fileID: 33715997917883156, guid: 14c7f77cb24accb4baeeff031365afe4,\n    type: 2}\n  m_PrefabInstance: {fileID: 0}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 1647296276}\n  m_Mesh: {fileID: 10206, guid: 0000000000000000e000000000000000, type: 0}\n--- !u!1001 &1994956397\nPrefabInstance:\n  m_ObjectHideFlags: 0\n  serializedVersion: 2\n  m_Modification:\n    m_TransformParent: {fileID: 0}\n    m_Modifications:\n    - target: {fileID: 1647954469300956, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_Name\n      value: ArucoWebcamCalibrated\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_LocalPosition.x\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_LocalPosition.y\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_LocalPosition.z\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_LocalRotation.x\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_LocalRotation.y\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_LocalRotation.z\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_LocalRotation.w\n      value: 1\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_RootOrder\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_LocalEulerAnglesHint.x\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_LocalEulerAnglesHint.y\n      value: 0\n      objectReference: {fileID: 0}\n    - target: {fileID: 4398985096809396, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n      propertyPath: m_LocalEulerAnglesHint.z\n      value: 0\n      objectReference: {fileID: 0}\n    m_RemovedComponents: []\n  m_SourcePrefab: {fileID: 100100000, guid: 74c9e29e9d222a4438669336303acc9a, type: 3}\n--- !u!114 &1994956398 stripped\nMonoBehaviour:\n  m_CorrespondingSourceObject: {fileID: 114034833319431376, guid: 74c9e29e9d222a4438669336303acc9a,\n    type: 3}\n  m_PrefabInstance: {fileID: 1994956397}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 0}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 11500000, guid: 840bd5ba574119a4480742f7e43829df, type: 3}\n  m_Name: \n  m_EditorClassIdentifier: \n--- !u!114 &1994956399 stripped\nMonoBehaviour:\n  m_CorrespondingSourceObject: {fileID: 114715581165667816, guid: 74c9e29e9d222a4438669336303acc9a,\n    type: 3}\n  m_PrefabInstance: {fileID: 1994956397}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 0}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 11500000, guid: c26a913db0c57924296019074a504016, type: 3}\n  m_Name: \n  m_EditorClassIdentifier: \n--- !u!114 &1994956400 stripped\nMonoBehaviour:\n  m_CorrespondingSourceObject: {fileID: 114393126318706844, guid: 74c9e29e9d222a4438669336303acc9a,\n    type: 3}\n  m_PrefabInstance: {fileID: 1994956397}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 0}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 11500000, guid: 43b2fc42ec749de4fa54b3fc1163f23d, type: 3}\n  m_Name: \n  m_EditorClassIdentifier: \n--- !u!114 &1994956401 stripped\nMonoBehaviour:\n  m_CorrespondingSourceObject: {fileID: 114522793529101426, guid: 74c9e29e9d222a4438669336303acc9a,\n    type: 3}\n  m_PrefabInstance: {fileID: 1994956397}\n  m_PrefabAsset: {fileID: 0}\n  m_GameObject: {fileID: 0}\n  m_Enabled: 1\n  m_EditorHideFlags: 0\n  m_Script: {fileID: 11500000, guid: e044568ea72405e49bf56df52f9d2b57, type: 3}\n  m_Name: \n  m_EditorClassIdentifier: \n"
  },
  {
    "path": "Assets/ArucoUnity/Scenes/TrackMarkers.unity.meta",
    "content": "fileFormatVersion: 2\r\nguid: 6607aee97cfd1034bacf07d7d3978cae\r\ntimeCreated: 1489692878\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scenes.meta",
    "content": "fileFormatVersion: 2\r\nguid: 8c3ba4417e6bd704f8eebf96cac0471e\r\nfolderAsset: yes\r\ntimeCreated: 1472228400\r\nlicenseType: Pro\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibration.cs",
    "content": "﻿using ArucoUnity.Cameras.Parameters;\nusing ArucoUnity.Objects;\nusing ArucoUnity.Objects.Trackers;\nusing ArucoUnity.Plugin;\nusing System;\nusing System.Threading;\nusing UnityEngine;\n\nnamespace ArucoUnity.Calibration\n{\n    /// <summary>\n    /// Calibrates a <see cref=\"Cameras.ArucoCamera\"/> with a <see cref=\"ArucoBoard\"/> and saves the calibrated camera\n    /// parameters in a file managed by <see cref=\"ArucoCameraParametersController\"/>. Base class to reference in editor\n    /// fields.\n    /// \n    /// See the OpenCV and the ArUco module documentations for more information about the calibration process:\n    /// http://docs.opencv.org/3.4/da/d13/tutorial_aruco_calibration.html and\n    /// https://docs.opencv.org/3.4/da/d13/tutorial_aruco_calibration.html\n    /// </summary>\n    public abstract class ArucoCameraCalibration : ArucoObjectDetector\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The ArUco board to use for calibration.\")]\n        private ArucoBoard calibrationBoard;\n\n        [SerializeField]\n        [Tooltip(\"Use a refine algorithm to find not detected markers based on the already detected and the board layout\" +\n            \" (if using a board).\")]\n        private bool refineMarkersDetection = false;\n\n        [SerializeField]\n        [Tooltip(\"The camera parameters to use if CalibrationFlags.UseIntrinsicGuess is true. Otherwise, the camera\" +\n            \" parameters file will be generated from the camera name and the calibration datetime.\")]\n        private ArucoCameraParametersController cameraParametersController;\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the ArUco board to use for calibration.\n        /// </summary>\n        public ArucoBoard CalibrationBoard { get { return calibrationBoard; } set { calibrationBoard = value; } }\n\n        /// <summary>\n        /// Gets or sets if need to use a refine algorithm to find not detected markers based on the already detected and\n        /// the board layout.\n        /// </summary>\n        public bool RefineMarkersDetection { get { return refineMarkersDetection; } set { refineMarkersDetection = value; } }\n\n        /// <summary>\n        /// Gets or sets the camera parameters to use if <see cref=\"CalibrationFlags.UseIntrinsicGuess\"/> is true.\n        /// Otherwise, the camera parameters file will be generated from the camera name and the calibration datetime.\n        /// </summary>\n        public ArucoCameraParametersController CameraParametersController { get { return cameraParametersController; }\n            set { cameraParametersController = value; } }\n\n        /// <summary>\n        /// Gets or sets the flags for the cameras calibration.\n        /// </summary>\n        public CalibrationFlags CalibrationFlags { get; set; }\n\n        /// <summary>\n        /// Gets the detected marker corners for each camera.\n        /// </summary>\n        public Std.VectorVectorVectorPoint2f[] AllMarkerCorners { get; protected set; }\n\n        /// <summary>\n        /// Gets the detected marker ids for each camera.\n        /// </summary>\n        public Std.VectorVectorInt[] AllMarkerIds { get; protected set; }\n\n        /// <summary>\n        /// Gets the images to use for the calibration.\n        /// </summary>\n        public Std.VectorMat[] Images { get; protected set; }\n\n        /// <summary>\n        /// Gets the estimated rotation vector for each detected markers in each camera.\n        /// </summary>\n        public Std.VectorVec3d[] Rvecs { get; protected set; }\n\n        /// <summary>\n        /// Gets the estimated translation vector for each detected markers in each camera.\n        /// </summary>\n        public Std.VectorVec3d[] Tvecs { get; protected set; }\n\n        /// <summary>\n        /// Gets the detected marker corners on the current images of each camera.\n        /// </summary>\n        public Std.VectorVectorPoint2f[] MarkerCorners { get; protected set; }\n\n        /// <summary>\n        /// Gets the detected marker ids on the current images of each camera.\n        /// </summary>\n        public Std.VectorInt[] MarkerIds { get; protected set; }\n\n        /// <summary>\n        /// Gets if the last <see cref=\"CalibrateAsync\"/> call has been a success.\n        /// </summary>\n        public bool IsCalibrated { get; protected set; }\n\n        /// <summary>\n        /// Gets if <see cref=\"CalibrateAsync\"/> has been called and hasn't completed yet.\n        /// </summary>\n        public bool CalibrationRunning { get; protected set; }\n\n        // Events\n\n        /// <summary>\n        /// Called when <see cref=\"IsCalibrated\"/> is set to true.\n        /// </summary>\n        public event Action Calibrated = delegate { };\n\n        // Variables\n\n        protected string applicationPath;\n        protected Thread calibratingThread;\n        protected Mutex calibratingMutex = new Mutex();\n        protected Exception calibratingException;\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Calls the <see cref=\"Calibrated\"/> event when a calibration has just completed.\n        /// </summary>\n        protected virtual void LateUpdate()\n        {\n            Exception e = null;\n            bool calibrationDone = false;\n            calibratingMutex.WaitOne();\n            {\n                e = calibratingException;\n                calibratingException = null;\n\n                calibrationDone = CalibrationRunning && IsCalibrated;\n            }\n            calibratingMutex.ReleaseMutex();\n\n            // Check for exception in calibrating thread\n            if (e != null)\n            {\n                calibratingThread.Abort();\n                CalibrationRunning = false;\n                throw e;\n            }\n\n            // Check for calibration done\n            if (calibrationDone)\n            {\n                CalibrationRunning = false;\n                Calibrated.Invoke();\n            }\n        }\n\n        // ConfigurableController methods\n\n        /// <summary>\n        /// Checks if <see cref=\"CalibrationBoard\"/> is set and calls <see cref=\"ResetCalibration\"/>.\n        /// </summary>\n        protected override void Configuring()\n        {\n            base.Configuring();\n            if (CalibrationBoard == null)\n            {\n                throw new ArgumentNullException(\"CalibrationBoard\", \"This property needs to be set to configure the\" +\n                    \" calibration controller.\");\n            }\n            ResetCalibration();\n        }\n\n        /// <summary>\n        /// Susbcribes to <see cref=\"Cameras.ArucoCamera.UndistortRectifyImages\"/>.\n        /// </summary>\n        protected override void Starting()\n        {\n            base.Starting();\n            ArucoCamera.ImagesUpdated += ArucoCamera_ImagesUpdated;\n        }\n\n        /// <summary>\n        /// Unsusbcribes from <see cref=\"Cameras.ArucoCamera.UndistortRectifyImages\"/>.\n        /// </summary>\n        protected override void Stopping()\n        {\n            base.Stopping();\n            ArucoCamera.ImagesUpdated -= ArucoCamera_ImagesUpdated;\n        }\n\n        // Methods\n\n        /// <summary>\n        /// Resets the properties.\n        /// </summary>\n        public virtual void ResetCalibration()\n        {\n            AllMarkerCorners = new Std.VectorVectorVectorPoint2f[ArucoCamera.CameraNumber];\n            AllMarkerIds = new Std.VectorVectorInt[ArucoCamera.CameraNumber];\n            Images = new Std.VectorMat[ArucoCamera.CameraNumber];\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                AllMarkerCorners[cameraId] = new Std.VectorVectorVectorPoint2f();\n                AllMarkerIds[cameraId] = new Std.VectorVectorInt();\n                Images[cameraId] = new Std.VectorMat();\n            }\n\n            Rvecs = new Std.VectorVec3d[ArucoCamera.CameraNumber];\n            Tvecs = new Std.VectorVec3d[ArucoCamera.CameraNumber];\n            MarkerCorners = new Std.VectorVectorPoint2f[ArucoCamera.CameraNumber];\n            MarkerIds = new Std.VectorInt[ArucoCamera.CameraNumber];\n\n            IsCalibrated = false;\n        }\n\n        /// <summary>\n        /// Detects the Aruco markers on the current images of the cameras and store the results in the\n        /// <see cref=\"MarkerCorners\"/> and <see cref=\"MarkerIds\"/> properties.\n        /// </summary>\n        public virtual void DetectMarkers()\n        {\n            if (!IsConfigured || !IsStarted)\n            {\n                throw new Exception(\"Configure and start the calibration controller before detect markers.\");\n            }\n\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                Std.VectorInt markerIds;\n                Std.VectorVectorPoint2f markerCorners, rejectedCandidateCorners;\n\n                Aruco.DetectMarkers(ArucoCamera.Images[cameraId], CalibrationBoard.Dictionary, out markerCorners,\n                    out markerIds, DetectorParameters, out rejectedCandidateCorners);\n\n                MarkerCorners[cameraId] = markerCorners;\n                MarkerIds[cameraId] = markerIds;\n\n                if (RefineMarkersDetection)\n                {\n                    Aruco.RefineDetectedMarkers(ArucoCamera.Images[cameraId], CalibrationBoard.Board, MarkerCorners[cameraId],\n                        MarkerIds[cameraId], rejectedCandidateCorners);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Draws the detected ArUco markers on the current images of the cameras.\n        /// </summary>\n        public virtual void DrawDetectedMarkers()\n        {\n            if (!IsConfigured || !IsStarted)\n            {\n                throw new Exception(\"Configure and start the calibration controller before drawing detected markers.\");\n            }\n\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                if (MarkerIds[cameraId] != null && MarkerIds[cameraId].Size() > 0)\n                {\n                    Aruco.DrawDetectedMarkers(ArucoCamera.Images[cameraId], MarkerCorners[cameraId],\n                        MarkerIds[cameraId]);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Adds the current images of the cameras and the detected corners for the calibration.\n        /// </summary>\n        public virtual void AddImages()\n        {\n            if (!IsConfigured)\n            {\n                throw new Exception(\"Configure the calibration controller before adding the current images for calibration.\");\n            }\n\n            // Check for validity\n            uint markerIdsNumber = (MarkerIds[0] != null) ? MarkerIds[0].Size() : 0;\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                if (MarkerIds[cameraId] == null || MarkerIds[cameraId].Size() < 1)\n                {\n                    throw new Exception(\"No markers detected for the camera \" + (cameraId + 1) + \"/\" + ArucoCamera.CameraNumber +\n                        \" to add the current images for the calibration. At least one marker detected is required for\" +\n                        \" calibrating the camera.\");\n                }\n\n                if (markerIdsNumber != MarkerIds[cameraId].Size())\n                {\n                    throw new Exception(\"The cameras must have detected the same number of markers to add the current images\" +\n                        \" for the calibration.\");\n                }\n            }\n\n            // Save the images and the detected corners\n            Cv.Mat[] cameraImages = ArucoCamera.Images;\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                AllMarkerCorners[cameraId].PushBack(MarkerCorners[cameraId]);\n                AllMarkerIds[cameraId].PushBack(MarkerIds[cameraId]);\n                Images[cameraId].PushBack(ArucoCamera.Images[cameraId].Clone());\n            }\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"Calibrate\"/> in a background thread.\n        /// </summary>\n        public virtual void CalibrateAsync()\n        {\n            if (!IsConfigured)\n            {\n                throw new Exception(\"Configure the calibration controller before starting the async calibration.\");\n            }\n\n            bool calibrationRunning = false;\n            calibratingMutex.WaitOne();\n            {\n                calibrationRunning = CalibrationRunning;\n            }\n            calibratingMutex.ReleaseMutex();\n\n            if (calibrationRunning)\n            {\n                throw new Exception(\"A calibration is already running. Wait its completion or call CancelCalibrateAsync()\" +\n                    \" before starting a new calibration.\");\n            }\n\n            calibratingThread = new Thread(() =>\n            {\n                try\n                {\n                    Calibrate();\n                }\n                catch (Exception e)\n                {\n                    calibratingMutex.WaitOne();\n                    {\n                        calibratingException = e;\n                    }\n                    calibratingMutex.ReleaseMutex();\n                }\n            });\n            calibratingThread.IsBackground = true;\n            calibratingThread.Start();\n        }\n\n        /// <summary>\n        /// Stops the calibration if <see cref=\"CalibrationRunning\"/> is true.\n        /// </summary>\n        public virtual void CancelCalibrateAsync()\n        {\n            if (!IsConfigured)\n            {\n                throw new Exception(\"Configure the calibration controller before starting or canceling the calibration.\");\n            }\n\n            bool calibrationRunning = false;\n            calibratingMutex.WaitOne();\n            {\n                calibrationRunning = CalibrationRunning;\n            }\n            calibratingMutex.ReleaseMutex();\n\n            if (!calibrationRunning)\n            {\n                throw new Exception(\"Start the async calibration before canceling it.\");\n            }\n\n            calibratingThread.Abort();\n        }\n\n        /// <summary>\n        /// Calibrates each mono camera in <see cref=\"Cameras.ArucoCameraController.ArucoCamera\"/> using the detected\n        /// markers added with <see cref=\"AddImages()\"/>, the <see cref=\"ArucoCameraParameters\"/>, the\n        /// <see cref=\"Cameras.Undistortions.ArucoCameraUndistortion\"/> and save the results on a calibration file. Stereo\n        /// calibrations will be additionally executed on these results for every camera pair.\n        /// </summary>\n        public virtual void Calibrate()\n        {\n            if (!IsConfigured)\n            {\n                throw new Exception(\"Configure the calibration controller before starting the calibration.\");\n            }\n\n            // Update state\n            calibratingMutex.WaitOne();\n            {\n                IsCalibrated = false;\n                CalibrationRunning = true;\n            }\n            calibratingMutex.ReleaseMutex();\n\n            // Check if there is enough captured images for calibration\n            Aruco.CharucoBoard charucoBoard = CalibrationBoard.Board as Aruco.CharucoBoard;\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                if (charucoBoard == null && AllMarkerIds[cameraId].Size() < 3)\n                {\n                    throw new Exception(\"Need at least three images captured for the camera \" + (cameraId + 1) + \"/\" +\n                        ArucoCamera.CameraNumber + \" to calibrate.\");\n                }\n                else if (charucoBoard != null && AllMarkerIds[cameraId].Size() < 4)\n                {\n                    throw new Exception(\"Need at least four images captured for the camera \" + (cameraId + 1) + \"/\" +\n                        ArucoCamera.CameraNumber + \" to calibrate with a ChAruco board.\");\n                }\n            }\n\n            InitializeCameraParameters(); // Initialize and configure the camera parameters\n\n            // Get objet and image calibration points from detected ids and corners\n            Std.VectorVectorPoint2f[] imagePoints = new Std.VectorVectorPoint2f[ArucoCamera.CameraNumber];\n            Std.VectorVectorPoint3f[] objectPoints = new Std.VectorVectorPoint3f[ArucoCamera.CameraNumber];\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                imagePoints[cameraId] = new Std.VectorVectorPoint2f();\n                objectPoints[cameraId] = new Std.VectorVectorPoint3f();\n\n                uint imagesCount = AllMarkerCorners[cameraId].Size();\n                for (uint imageId = 0; imageId < imagesCount; imageId++)\n                {\n                    Std.VectorPoint2f currentImagePoints;\n                    Std.VectorPoint3f currentObjectPoints;\n\n                    if (charucoBoard == null)\n                    {\n                        // Using a grid board\n                        Aruco.GetBoardObjectAndImagePoints(CalibrationBoard.Board, AllMarkerCorners[cameraId].At(imageId),\n                            AllMarkerIds[cameraId].At(imageId), out currentObjectPoints, out currentImagePoints);\n                    }\n                    else\n                    {\n                        // Using a charuco board\n                        Std.VectorInt charucoIds;\n                        Aruco.InterpolateCornersCharuco(AllMarkerCorners[cameraId].At(imageId), AllMarkerIds[cameraId].At(imageId),\n                            Images[cameraId].At(imageId), charucoBoard, out currentImagePoints, out charucoIds);\n\n                        // Join the object points corresponding to the detected markers\n                        currentObjectPoints = new Std.VectorPoint3f();\n                        uint markerCount = charucoIds.Size();\n                        for (uint marker = 0; marker < markerCount; marker++)\n                        {\n                            uint pointId = (uint)charucoIds.At(marker);\n                            Cv.Point3f objectPoint = charucoBoard.ChessboardCorners.At(pointId);\n                            currentObjectPoints.PushBack(objectPoint);\n                        }\n                    }\n\n                    imagePoints[cameraId].PushBack(currentImagePoints);\n                    objectPoints[cameraId].PushBack(currentObjectPoints);\n                }\n            }\n\n            // Calibrate the Aruco camera\n            Calibrate(imagePoints, objectPoints);\n\n            // Save the camera parameters\n            CameraParametersController.CameraParametersFilename = ArucoCamera.Name + \" - \"\n                + CameraParametersController.CameraParameters.CalibrationDateTime.ToString(\"yyyy-MM-dd_HH-mm-ss\") + \".xml\";\n            CameraParametersController.Save();\n\n            // Update state\n            calibratingMutex.WaitOne();\n            {\n                IsCalibrated = true;\n            }\n            calibratingMutex.ReleaseMutex();\n        }\n\n        /// <summary>\n        /// Detects and draw the ArUco markers on the current images of the cameras.\n        /// </summary>\n        protected virtual void ArucoCamera_ImagesUpdated()\n        {\n            DetectMarkers();\n            DrawDetectedMarkers();\n        }\n\n        /// <summary>\n        /// Initializes and configure the <see cref=\"ArucoCameraParametersController.CameraParameters\"/>.\n        /// </summary>\n        protected virtual void InitializeCameraParameters()\n        {\n            if (CalibrationFlags != null && CalibrationFlags.UseIntrinsicGuess)\n            {\n                if (CameraParametersController.CameraParameters == null || CameraParametersController.CameraParameters.CameraMatrices == null)\n                {\n                    throw new Exception(\"CalibrationFlags.UseIntrinsicGuess flag is set but CameraParameters is null or has no\" +\n                        \" valid values. Set CameraParametersFilename or deactivate this flag.\");\n                }\n            }\n            else\n            {\n                CameraParametersController.Initialize(ArucoCamera.CameraNumber);\n                for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n                {\n                    CameraParametersController.CameraParameters.CameraMatrices[cameraId] = new Cv.Mat();\n                    CameraParametersController.CameraParameters.DistCoeffs[cameraId] = new Cv.Mat();\n                    CameraParametersController.CameraParameters.OmnidirXis[cameraId] = new Cv.Mat();\n                }\n            }\n\n            CameraParametersController.CameraParameters.CalibrationFlagsValue =\n                (CalibrationFlags != null) ? CalibrationFlags.Value : default(int);\n\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                CameraParametersController.CameraParameters.ImageHeights[cameraId] = ArucoCamera.Images[cameraId].Size.Height;\n                CameraParametersController.CameraParameters.ImageWidths[cameraId] = ArucoCamera.Images[cameraId].Size.Width;\n            }\n        }\n\n        /// <summary>\n        /// Applies a calibration to the <see cref=\"Cameras.ArucoCameraController.ArucoCamera\"/>, set the extrinsic camera\n        /// parameters to <see cref=\"Rvecs\"/> and <see cref=\"Tvecs\"/> and saves the camera parameters in\n        /// <see cref=\"ArucoCameraParametersController.CameraParameters\"/>.\n        /// </summary>\n        /// <param name=\"imagePoints\">The detected image points of each camera.</param>\n        /// <param name=\"objectPoints\">The corresponding object points of each camera.</param>\n        protected abstract void Calibrate(Std.VectorVectorPoint2f[] imagePoints, Std.VectorVectorPoint3f[] objectPoints);\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibration.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 3a1cefd1a9599b7439e9638d24e4039e\r\ntimeCreated: 1525350928\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibrationGUI.cs",
    "content": "﻿using ArucoUnity.Utilities;\nusing System;\nusing UnityEngine;\nusing UnityEngine.UI;\n\nnamespace ArucoUnity.Calibration\n{\n    public class ArucoCameraCalibrationGUI : MonoBehaviour\n    {\n        // Editor fields\n\n        [SerializeField]\n        private ArucoCameraCalibration arucoCameraCalibration;\n\n        [SerializeField]\n        private RectTransform arucoCameraImagesRect;\n\n        [SerializeField]\n        private Button addImagesButton;\n\n        [SerializeField]\n        private Text imagesCountText;\n\n        [SerializeField]\n        private Button calibrateButton;\n\n        [SerializeField]\n        private Text calibrationStatusText;\n\n        [SerializeField]\n        private Button resetButton;\n\n        // Variables\n\n        private Text[] calibrationReprojectionErrorTexts;\n        private Text calibrateButtonText;\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Prepares the buttons and subscribes to ArucoCalibrator started event to set the image display.\n        /// </summary>\n        protected void Awake()\n        {\n            calibrateButtonText = calibrateButton.transform.GetChild(0).GetComponent<Text>();\n\n            // Configure the buttons\n            addImagesButton.enabled = false;\n            calibrateButton.enabled = false;\n            resetButton.enabled = false;\n\n            // Bind the button clicks\n            addImagesButton.onClick.AddListener(AddImagesForCalibration);\n            calibrateButton.onClick.AddListener(Calibrate);\n            resetButton.onClick.AddListener(ResetCalibration);\n\n            // Suscribe to ArucoCalibrator events\n            if (arucoCameraCalibration.IsStarted)\n            {\n                ConfigureUI(this, EventArgs.Empty);\n            }\n            arucoCameraCalibration.Started += ConfigureUI;\n            arucoCameraCalibration.Calibrated += Calibrated;\n        }\n\n        /// <summary>\n        /// Unsubscribes from ArucoCalibrator events.\n        /// </summary>\n        protected void OnDestroy()\n        {\n            arucoCameraCalibration.Started -= ConfigureUI;\n            arucoCameraCalibration.Calibrated -= Calibrated;\n        }\n\n        /// <summary>\n        /// Configures the images display.\n        /// </summary>\n        protected void ConfigureUI(object sender, EventArgs e)\n        {\n            // Configure the buttons\n            addImagesButton.enabled = true;\n            calibrateButton.enabled = false;\n            resetButton.enabled = false;\n\n            // Configure the images display\n            var arucoCamera = arucoCameraCalibration.ArucoCamera;\n            calibrationReprojectionErrorTexts = new Text[arucoCamera.CameraNumber];\n\n            // Configure the arucoCameraImagesRect as a grid of images\n            int gridCols = 1, gridRows = 1;\n            for (int i = 0; i < arucoCamera.CameraNumber; i++)\n            {\n                if (gridCols * gridRows > i)\n                {\n                    continue;\n                }\n                else if (arucoCameraImagesRect.rect.width / gridCols >= arucoCameraImagesRect.rect.height / gridRows)\n                {\n                    gridCols++;\n                }\n                else\n                {\n                    gridRows++;\n                }\n            }\n            Vector2 gridCellSize = new Vector2(1f / gridCols, 1f / gridRows);\n\n            // Configure the cells of the grid of images\n            for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)\n            {\n                int cellCol = cameraId % gridCols; // Range : 0 to (gridCols - 1), images from left to right\n                int cellRow = (gridRows - 1) - (cameraId / gridCols); // Range : (gridRows - 1) to 0, images from top to bottom\n\n                // Create a cell on the grid for each camera image\n                GameObject cell = new GameObject(\"Image \" + cameraId + \" display\");\n                RectTransform cellRect = cell.AddComponent<RectTransform>();\n                cellRect.SetParent(arucoCameraImagesRect);\n                cellRect.anchorMin = new Vector2(1f / gridCols * cellCol, 1f / gridRows * cellRow); // Cell's position\n                cellRect.anchorMax = cellRect.anchorMin + gridCellSize; // All cells have the same size\n                cellRect.offsetMin = cellRect.offsetMax = Vector2.zero; // No margins\n                cellRect.localScale = Vector3.one;\n\n                // Create an image display inside the cell\n                GameObject cellDisplay = new GameObject(\"Image\");\n                cellDisplay.transform.SetParent(cellRect);\n                cellDisplay.transform.localScale = Vector3.one;\n\n                RawImage cellDisplayImage = cellDisplay.AddComponent<RawImage>();\n                cellDisplayImage.texture = arucoCamera.Textures[cameraId];\n\n                AspectRatioFitter cellDisplayFitter = cellDisplay.AddComponent<AspectRatioFitter>(); // Fit the image inside the cell\n                cellDisplayFitter.aspectMode = AspectRatioFitter.AspectMode.FitInParent;\n                cellDisplayFitter.aspectRatio = arucoCamera.ImageRatios[cameraId];\n\n                // Create a text for calibration reprojection error inside the cell\n                GameObject reproError = new GameObject(\"CalibrationReprojectionErrorText\");\n                RectTransform reproErrorRect = reproError.AddComponent<RectTransform>();\n                reproErrorRect.SetParent(cellRect);\n                reproErrorRect.pivot = Vector2.zero;\n                reproErrorRect.anchorMin = reproErrorRect.anchorMax = Vector2.zero;\n                reproErrorRect.offsetMin = Vector2.one * 5; // Pos X and pos Y margins\n                reproErrorRect.offsetMax = new Vector2(120, 60); // width and Height\n                reproErrorRect.localScale = Vector3.one;\n\n                Text reproErrorText = reproError.AddComponent<Text>();\n                reproErrorText.font = Resources.GetBuiltinResource<Font>(\"Arial.ttf\");\n                reproErrorText.fontSize = 12;\n                reproErrorText.color = Color.red;\n                calibrationReprojectionErrorTexts[cameraId] = reproErrorText;\n            }\n\n            // Configure the text\n            UpdateImagesCountText();\n            UpdateCalibrationReprojectionErrorText();\n        }\n\n        /// <summary>\n        /// Adds the current images to the calibration, and update the UI.\n        /// </summary>\n        private void AddImagesForCalibration()\n        {\n            if (!arucoCameraCalibration.IsConfigured)\n            {\n                return;\n            }\n\n            arucoCameraCalibration.AddImages();\n\n            calibrateButton.enabled = true;\n            resetButton.enabled = true;\n            UpdateImagesCountText();\n        }\n\n        /// <summary>\n        /// Calibrates and updates the UI.\n        /// </summary>\n        private void Calibrate()\n        {\n            if (!arucoCameraCalibration.IsConfigured)\n            {\n                return;\n            }\n\n            if (!arucoCameraCalibration.CalibrationRunning)\n            {\n                arucoCameraCalibration.CalibrateAsync();\n                calibrateButtonText.text = \"Stop calibration\";\n                calibrationStatusText.text = \"Calibration status : running\";\n            }\n            else\n            {\n                arucoCameraCalibration.CancelCalibrateAsync();\n                calibrateButtonText.text = \"Calibrate\";\n                calibrationStatusText.text = \"Calibration status : stopped\";\n            }\n        }\n\n        /// <summary>\n        /// Updates the UI with the calibration results.\n        /// </summary>\n        private void Calibrated()\n        {\n            calibrateButtonText.text = \"Calibrate\";\n            calibrationStatusText.text = \"Calibration status : finished\";\n            UpdateCalibrationReprojectionErrorText();\n        }\n\n        /// <summary>\n        /// Resets the calibration and update the UI.\n        /// </summary>\n        private void ResetCalibration()\n        {\n            arucoCameraCalibration.ResetCalibration();\n\n            calibrateButton.enabled = false;\n            resetButton.enabled = false;\n            UpdateImagesCountText();\n            UpdateCalibrationReprojectionErrorText();\n        }\n\n        /// <summary>\n        /// Updates the text of the number of images added for calibration.\n        /// </summary>\n        private void UpdateImagesCountText()\n        {\n            string imagesCount = (arucoCameraCalibration.AllMarkerIds != null && arucoCameraCalibration.AllMarkerIds[0] != null) ? \"\" + arucoCameraCalibration.AllMarkerIds[0].Size() : \"0\";\n            imagesCountText.text = \"Images count: \" + imagesCount;\n        }\n\n        /// <summary>\n        /// Updates text for of the calibration results.\n        /// </summary>\n        private void UpdateCalibrationReprojectionErrorText()\n        {\n            for (int cameraId = 0; cameraId < arucoCameraCalibration.ArucoCamera.CameraNumber; cameraId++)\n            {\n                double reprojectionError = (arucoCameraCalibration.CameraParametersController.CameraParameters != null)\n                    ? arucoCameraCalibration.CameraParametersController.CameraParameters.ReprojectionErrors[cameraId]\n                    : 0.0;\n\n                calibrationReprojectionErrorTexts[cameraId].text = \"Camera \" + (cameraId + 1) + \"/\" + arucoCameraCalibration.ArucoCamera.CameraNumber + \"\\n\"\n                 + \"Reprojection error: \" + reprojectionError.ToString(\"F3\");\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibrationGUI.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: ede7fb9eabbd29442941c6491f769102\r\ntimeCreated: 1486670229\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibrationGeneric.cs",
    "content": "﻿using ArucoUnity.Cameras;\nusing UnityEngine;\n\nnamespace ArucoUnity.Calibration\n{\n    public abstract class ArucoCameraCalibrationGeneric<T, U> : ArucoCameraCalibration\n        where T : ArucoCamera\n        where U : CalibrationFlags\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The camera system to use.\")]\n        private T arucoCamera;\n\n        [SerializeField]\n        [Tooltip(\"The flags for the cameras calibration.\")]\n        protected U calibrationFlags;\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Sets <see cref=\"ArucoCameraController.ArucoCamera\"/> and <see cref=\"ArucoCameraCalibration.CalibrationFlags\"/>\n        /// with editor fields if not nulls.\n        /// </summary>\n        protected override void Awake()\n        {\n            base.Awake();\n            if (arucoCamera != null)\n            {\n                ArucoCamera = arucoCamera;\n            }\n            if (calibrationFlags != null)\n            {\n                CalibrationFlags = calibrationFlags;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/ArucoCameraCalibrationGeneric.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 5add3f7ac2f57864f84f5db8516a74de\r\ntimeCreated: 1491427717\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/CalibrationFlags.cs",
    "content": "﻿using System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Calibration\n{\n    /// <summary>\n    /// Manages the flags of the <see cref=\"ArucoCameraCalibration\"/> process. Base class to reference in editor fields.\n    /// </summary>\n    public abstract class CalibrationFlags : MonoBehaviour\n    {\n        // Editor fields\n\n        [Header(\"Calibration flags\")]\n        [SerializeField]\n        [Tooltip(\"Use and optimize the initial values (fx, fy), (cx, cy) of the camera matrix during the calibration process.\")]\n        private bool useIntrinsicGuess = false;\n\n        [SerializeField]\n        [Tooltip(\"The corresponding radial distortion coefficient is not changed during the calibration. If useIntrinsicGuess\" +\n            \" is set, the original DistCoeffs value in the camera parameters are used, otherwise it's to 0.\")]\n        private bool[] fixKDistorsionCoefficients;\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets if the <see cref=\"Cameras.Parameters.ArucoCameraParameters.CameraMatrices\"/> has valid initial\n        /// value that will be optimized by the calibration process.\n        /// </summary>\n        public bool UseIntrinsicGuess { get { return useIntrinsicGuess; } set { useIntrinsicGuess = value; } }\n\n        /// <summary>\n        /// Gets or sets if the corresponding radial distortion coefficients are not changed during the calibration.\n        /// If useIntrinsicGuess is set, the original <see cref=\"Cameras.Parameters.ArucoCameraParameters.DistCoeffs\"/>\n        /// values in the camera parameters are used, otherwise they're set to 0.\n        /// </summary>\n        public bool[] FixKDistorsionCoefficients\n        {\n            get { return fixKDistorsionCoefficients; }\n            set\n            {\n                if (value.Length == FixKLength)\n                {\n                    fixKDistorsionCoefficients = value;\n                    UpdateCalibrationFlags();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets if the equivalent int, used by OpenCV, of the calibration flags.\n        /// </summary>\n        public abstract int Value { get; set; }\n\n        /// <summary>\n        /// Gets the length of <see cref=\"FixKDistorsionCoefficients\"/> array.\n        /// </summary>\n        protected abstract int FixKLength { get; }\n\n        // Methods\n\n        /// <summary>\n        /// Updates <see cref=\"Value\"/> from the flag properties.\n        /// </summary>\n        protected abstract void UpdateCalibrationFlags();\n\n        /// <summary>\n        /// Updates the flag property values from <see cref=\"Value\"/>.\n        /// </summary>\n        protected abstract void UpdateCalibrationOptions();\n\n        /// <summary>\n        /// Keeps the <see cref=\"FixKDistorsionCoefficients\"/> array to its fixed length <see cref=\"FixKLength\"/> in the editor.\n        /// </summary>\n        protected virtual void OnValidate()\n        {\n            if (fixKDistorsionCoefficients != null && fixKDistorsionCoefficients.Length != FixKLength)\n            {\n                Array.Resize(ref fixKDistorsionCoefficients, FixKLength);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/CalibrationFlags.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 340aba90e0751f14f8c63f4617eeebdb\r\ntimeCreated: 1490292145\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/CalibrationFlagsGeneric.cs",
    "content": "﻿using System;\n\nnamespace ArucoUnity.Calibration\n{\n    /// <summary>\n    /// Manages the flags of the <see cref=\"ArucoCameraCalibration\"/> process. Generic class to use in scripts.\n    /// </summary>\n    public abstract class CalibrationFlagsGeneric<T> : CalibrationFlags\n        where T : struct, IConvertible, IComparable, IFormattable\n    {\n        // CameraCalibrationFlags properties\n\n        public override int Value\n        {\n            get { return Convert.ToInt32(Enum.Parse(typeof(T), Flags.ToString()) as Enum); }\n            set { Flags = (T)Enum.ToObject(typeof(T), value); }\n        }\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the calibration flags enum and keeps updated the flag properties.\n        /// </summary>\n        public T Flags\n        {\n            get\n            {\n                UpdateCalibrationFlags();\n                return flags;\n            }\n            set\n            {\n                flags = value;\n                UpdateCalibrationOptions();\n            }\n        }\n\n        // Variables\n\n        protected T flags;\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/CalibrationFlagsGeneric.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 4615268aee8648b45b9d6d06e9c0d6aa\r\ntimeCreated: 1525354837\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Omnidir/OmnidirCameraCalibration.cs",
    "content": "﻿using ArucoUnity.Cameras;\nusing ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Calibration.Omnidir\n{\n    public class OmnidirCameraCalibration : ArucoCameraCalibrationGeneric<ArucoCamera, OmnidirCameraCalibrationFlags>\n    {\n        // ArucoCameraCalibration methods\n\n        protected override void Calibrate(Std.VectorVectorPoint2f[] imagePoints, Std.VectorVectorPoint3f[] objectPoints)\n        {\n            var cameraParameters = CameraParametersController.CameraParameters;\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                Std.VectorVec3d rvecs, tvecs;\n                cameraParameters.ReprojectionErrors[cameraId] = Cv.Omnidir.Calibrate(objectPoints[cameraId], imagePoints[cameraId],\n                    ArucoCamera.Images[cameraId].Size, cameraParameters.CameraMatrices[cameraId], cameraParameters.OmnidirXis[cameraId],\n                    cameraParameters.DistCoeffs[cameraId], out rvecs, out tvecs, calibrationFlags.Flags);\n\n                Rvecs[cameraId] = rvecs;\n                Tvecs[cameraId] = tvecs;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Omnidir/OmnidirCameraCalibration.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 4b6859419089da74a90f9ad6387a7983\r\ntimeCreated: 1510719606\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Omnidir/OmnidirCameraCalibrationFlags.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing UnityEngine;\nusing System;\n\nnamespace ArucoUnity.Calibration.Omnidir\n{\n    /// <summary>\n    /// Manages the flags of the omnidir calibration process.\n    /// </summary>\n    public class OmnidirCameraCalibrationFlags : CalibrationFlagsGeneric<Cv.Omnidir.Calib>\n    {\n        // Editor fields\n\n        [SerializeField]\n        private bool fixSkew = false;\n\n        [SerializeField]\n        private bool[] fixP;\n\n        [SerializeField]\n        private bool fixXi = false;\n\n        [SerializeField]\n        private bool fixGamma = false;\n\n        [SerializeField]\n        private bool fixCenter = false;\n\n        // Properties\n\n        public bool FixSkew { get { return fixSkew; } set { fixSkew = value; } }\n\n        public bool[] FixP\n        {\n            get { return fixP; }\n            set\n            {\n                if (value.Length == FixPLength)\n                {\n                    fixP = value;\n                    UpdateCalibrationFlags();\n                }\n            }\n        }\n\n        public bool FixXi { get { return fixXi; } set { fixXi = value; } }\n\n        public bool FixGamma { get { return fixGamma; } set { fixGamma = value; } }\n\n        public bool FixCenter { get { return fixCenter; } set { fixCenter = value; } }\n\n        protected override int FixKLength { get { return 2; } }\n\n        protected int FixPLength { get { return 2; } }\n\n        // Methods\n\n        protected override void UpdateCalibrationFlags()\n        {\n            flags = 0;\n            if (UseIntrinsicGuess) { flags |= Cv.Omnidir.Calib.UseGuess; }\n            if (FixSkew) { flags |= Cv.Omnidir.Calib.FixSkew; }\n            if (FixKDistorsionCoefficients[0]) { flags |= Cv.Omnidir.Calib.FixK1; }\n            if (FixKDistorsionCoefficients[1]) { flags |= Cv.Omnidir.Calib.FixK2; }\n            if (FixP[0]) { flags |= Cv.Omnidir.Calib.FixP1; }\n            if (FixP[1]) { flags |= Cv.Omnidir.Calib.FixP2; }\n            if (FixXi) { flags |= Cv.Omnidir.Calib.FixXi; }\n            if (FixGamma) { flags |= Cv.Omnidir.Calib.FixGamma; }\n            if (FixCenter) { flags |= Cv.Omnidir.Calib.FixCenter; }\n        }\n\n        protected override void UpdateCalibrationOptions()\n        {\n            UseIntrinsicGuess = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.UseGuess);\n            FixSkew = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixSkew);\n            FixKDistorsionCoefficients[0] = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixK1);\n            FixKDistorsionCoefficients[1] = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixK2);\n            FixP[0] = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixP1);\n            FixP[1] = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixP2);\n            FixXi = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixXi);\n            FixGamma = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixGamma);\n            FixCenter = Enum.IsDefined(typeof(Cv.Omnidir.Calib), Cv.Omnidir.Calib.FixCenter);\n        }\n\n        protected override void OnValidate()\n        {\n            base.OnValidate();\n\n            if (fixP != null && fixP.Length != FixPLength)\n            {\n                Array.Resize(ref fixP, FixPLength);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Omnidir/OmnidirCameraCalibrationFlags.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 4cfa914475d82db49b6f0d7f57d13438\r\ntimeCreated: 1493224261\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Omnidir/StereoOmnidirCameraCalibration.cs",
    "content": "﻿using ArucoUnity.Cameras;\nusing ArucoUnity.Cameras.Parameters;\nusing ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Calibration.Omnidir\n{\n    public class StereoOmnidirCameraCalibration : ArucoCameraCalibrationGeneric<StereoArucoCamera, OmnidirCameraCalibrationFlags>\n    {\n        // ArucoCameraCalibration methods\n\n        protected override void Calibrate(Std.VectorVectorPoint2f[] imagePoints, Std.VectorVectorPoint3f[] objectPoints)\n        {\n            int cameraId1 = StereoArucoCamera.CameraId1, cameraId2 = StereoArucoCamera.CameraId2;\n            var cameraParameters = CameraParametersController.CameraParameters;\n\n            Cv.Vec3d rvec, tvec;\n            Std.VectorVec3d rvecsCamera1, tvecsCamera1;\n            var reprojectionError = Cv.Omnidir.StereoCalibrate(\n                objectPoints[cameraId1],\n                imagePoints[cameraId1],\n                imagePoints[cameraId2],\n                ArucoCamera.Images[cameraId1].Size,\n                ArucoCamera.Images[cameraId2].Size,\n                cameraParameters.CameraMatrices[cameraId1],\n                cameraParameters.OmnidirXis[cameraId1],\n                cameraParameters.DistCoeffs[cameraId1],\n                cameraParameters.CameraMatrices[cameraId2],\n                cameraParameters.OmnidirXis[cameraId2],\n                cameraParameters.DistCoeffs[cameraId2],\n                out rvec,\n                out tvec,\n                out rvecsCamera1,\n                out tvecsCamera1,\n                calibrationFlags.Flags);\n\n            Rvecs[StereoArucoCamera.CameraId1] = rvecsCamera1;\n            Tvecs[StereoArucoCamera.CameraId1] = tvecsCamera1;\n\n            cameraParameters.StereoCameraParameters = new StereoArucoCameraParameters()\n            {\n                ReprojectionError = reprojectionError,\n                RotationVector = rvec,\n                TranslationVector = tvec,\n                CalibrationFlagsValue = calibrationFlags.Value\n            };\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Omnidir/StereoOmnidirCameraCalibration.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: e66674f2448052d4eaf3e9159a923d7b\r\ntimeCreated: 1511904338\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Omnidir.meta",
    "content": "fileFormatVersion: 2\r\nguid: 51bc816fc9fd5e9448b5c5f6650fe7c7\r\nfolderAsset: yes\r\ntimeCreated: 1511904285\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibration.cs",
    "content": "﻿using ArucoUnity.Cameras;\nusing ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Calibration.Pinhole\n{\n    public class PinholeCameraCalibration : PinholeCameraCalibrationBase<ArucoCamera>\n    {\n        // ArucoCameraCalibration methods\n\n        protected override void Calibrate(Std.VectorVectorPoint2f[] imagePoints, Std.VectorVectorPoint3f[] objectPoints)\n        {\n            var cameraParameters = CameraParametersController.CameraParameters;\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                Std.VectorVec3d rvecs, tvecs;\n                cameraParameters.ReprojectionErrors[cameraId] = Cv.CalibrateCamera(objectPoints[cameraId], imagePoints[cameraId],\n                    ArucoCamera.Images[cameraId].Size, cameraParameters.CameraMatrices[cameraId], cameraParameters.DistCoeffs[cameraId],\n                    out rvecs, out tvecs, calibrationFlags.Flags);\n\n                Rvecs[cameraId] = rvecs;\n                Tvecs[cameraId] = tvecs;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibration.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: a8936dfef56ecc642bce8962a9434dd2\r\ntimeCreated: 1510719595\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibrationBase.cs",
    "content": "﻿using ArucoUnity.Cameras;\nusing ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Calibration.Pinhole\n{\n    /// <summary>\n    /// Calibrates a <see cref=\"ArucoCamera\"/> using the pinhole camera model with a <see cref=\"Objects.ArucoBoard\"/> and\n    /// saves the calibrated camera parameters in a file managed by <see cref=\"ArucoCameraParametersController\"/>.\n    /// </summary>\n    public abstract class PinholeCameraCalibrationBase<T> : ArucoCameraCalibrationGeneric<T, PinholeCameraCalibrationFlags>\n        where T : ArucoCamera\n    {\n        protected override void InitializeCameraParameters()\n        {\n            base.InitializeCameraParameters();\n\n            if (calibrationFlags.FixAspectRatio)\n            {\n                for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n                {\n                    CameraParametersController.CameraParameters.CameraMatrices[cameraId] = new Cv.Mat(3, 3, Cv.Type.CV_64F,\n                        new double[9] { calibrationFlags.FixAspectRatioValue, 0.0, 0.0,\n                                0.0, 1.0, 0.0,\n                                0.0, 0.0, 1.0\n                        });\n                }\n                CameraParametersController.CameraParameters.FixAspectRatioValue = calibrationFlags.FixAspectRatioValue;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibrationBase.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 792f20e9cc065da4ab86d01f92455eee\r\ntimeCreated: 1511904264\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibrationFlags.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing UnityEngine;\nusing System;\n\nnamespace ArucoUnity.Calibration.Pinhole\n{\n    /// <summary>\n    /// Manages the flags of the pinhole camera process.\n    /// </summary>\n    public class PinholeCameraCalibrationFlags : CalibrationFlagsGeneric<Cv.Calib>\n    {\n        // Constants\n\n        const float DefaultFixAspectRatio = 1f;\n\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The principal point (cx, cy) is not changed during the calibration.\")]\n        private bool fixPrincipalPoint = false;\n\n        [SerializeField]\n        private bool fixAspectRatio = false;\n\n        [SerializeField]\n        private float fixAspectRatioValue = DefaultFixAspectRatio;\n\n        [SerializeField]\n        private bool zeroTangentialDistorsion = false;\n\n        [SerializeField]\n        private bool rationalModel = false;\n\n        [SerializeField]\n        private bool thinPrismModel = false;\n\n        [SerializeField]\n        private bool fixS1_S2_S3_S4 = false;\n\n        [SerializeField]\n        private bool tiltedModel = false;\n\n        [SerializeField]\n        private bool fixTauxTauy = false;\n\n        [Header(\"Additional flags for stereo calibration\")]\n        [SerializeField]\n        private bool fixFocalLength = false;\n\n        [SerializeField]\n        private bool fixIntrinsic = true;\n\n        [SerializeField]\n        private bool sameFocalLength = false;\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets if the principal point (cx, cy) is not changed during the calibration.\n        /// </summary>\n        public bool FixPrincipalPoint { get { return fixPrincipalPoint; } set { fixPrincipalPoint = value; } }\n\n        public bool FixAspectRatio { get { return fixAspectRatio; } set { fixAspectRatio = value; } }\n\n        public float FixAspectRatioValue { get { return fixAspectRatioValue; } set { fixAspectRatioValue = value; } }\n\n        public bool ZeroTangentialDistorsion { get { return zeroTangentialDistorsion; } set { zeroTangentialDistorsion = value; } }\n\n        public bool RationalModel { get { return rationalModel; } set { rationalModel = value; } }\n\n        public bool ThinPrismModel { get { return thinPrismModel; } set { thinPrismModel = value; } }\n\n        public bool FixS1_S2_S3_S4 { get { return fixS1_S2_S3_S4; } set { fixS1_S2_S3_S4 = value; } }\n\n        public bool TiltedModel { get { return tiltedModel; } set { tiltedModel = value; } }\n\n        public bool FixTauxTauy { get { return fixTauxTauy; } set { fixTauxTauy = value; } }\n\n        public bool FixFocalLength { get { return fixFocalLength; } set { fixFocalLength = value; } }\n\n        public bool FixIntrinsic { get { return fixIntrinsic; } set { fixIntrinsic = value; } }\n\n        public bool SameFocalLength { get { return sameFocalLength; } set { sameFocalLength = value; } }\n\n        protected override int FixKLength { get { return 6; } }\n\n        // Methods\n\n        protected override void UpdateCalibrationFlags()\n        {\n            flags = 0;\n            if (UseIntrinsicGuess) { flags |= Cv.Calib.UseIntrinsicGuess; }\n            if (FixPrincipalPoint) { flags |= Cv.Calib.FixPrincipalPoint; }\n            if (FixKDistorsionCoefficients[0]) { flags |= Cv.Calib.FixK1; }\n            if (FixKDistorsionCoefficients[1]) { flags |= Cv.Calib.FixK2; }\n            if (FixKDistorsionCoefficients[2]) { flags |= Cv.Calib.FixK3; }\n            if (FixKDistorsionCoefficients[3]) { flags |= Cv.Calib.FixK4; }\n            if (FixKDistorsionCoefficients[4]) { flags |= Cv.Calib.FixK5; }\n            if (FixKDistorsionCoefficients[5]) { flags |= Cv.Calib.FixK6; }\n            if (FixAspectRatio) { flags |= Cv.Calib.FixAspectRatio; }\n            if (ZeroTangentialDistorsion) { flags |= Cv.Calib.ZeroTangentDist; }\n            if (RationalModel) { flags |= Cv.Calib.RationalModel; }\n            if (ThinPrismModel) { flags |= Cv.Calib.ThinPrismModel; }\n            if (FixS1_S2_S3_S4) { flags |= Cv.Calib.FixS1S2S3S4; }\n            if (TiltedModel) { flags |= Cv.Calib.TiltedModel; }\n            if (FixTauxTauy) { flags |= Cv.Calib.FixTauxTauy; }\n            if (FixFocalLength) { flags |= Cv.Calib.FixFocalLength; }\n            if (FixIntrinsic) { flags |= Cv.Calib.FixIntrinsic; }\n            if (SameFocalLength) { flags |= Cv.Calib.SameFocalLength; }\n        }\n\n        protected override void UpdateCalibrationOptions()\n        {\n            UseIntrinsicGuess = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.UseIntrinsicGuess);\n            FixPrincipalPoint = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixPrincipalPoint);\n            FixKDistorsionCoefficients[0] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK1);\n            FixKDistorsionCoefficients[1] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK2);\n            FixKDistorsionCoefficients[2] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK3);\n            FixKDistorsionCoefficients[3] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK4);\n            FixKDistorsionCoefficients[4] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK5);\n            FixKDistorsionCoefficients[5] = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixK6);\n            ZeroTangentialDistorsion = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.ZeroTangentDist);\n            RationalModel = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.RationalModel);\n            ThinPrismModel = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.ThinPrismModel);\n            FixS1_S2_S3_S4 = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixS1S2S3S4);\n            TiltedModel = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.TiltedModel);\n            FixTauxTauy = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixTauxTauy);\n            FixFocalLength = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixFocalLength);\n            FixIntrinsic = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.FixIntrinsic);\n            SameFocalLength = Enum.IsDefined(typeof(Cv.Calib), Cv.Calib.SameFocalLength);\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Pinhole/PinholeCameraCalibrationFlags.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 44099b4ed8318e845a10ed126f62bbe2\r\ntimeCreated: 1490292145\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Pinhole/StereoPinholeCameraCalibration.cs",
    "content": "﻿using ArucoUnity.Cameras;\nusing ArucoUnity.Cameras.Parameters;\nusing ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Calibration.Pinhole\n{\n    public class StereoPinholeCameraCalibration : PinholeCameraCalibrationBase<StereoArucoCamera>\n    {\n        // ArucoCameraCalibration methods\n\n        protected override void Calibrate(Std.VectorVectorPoint2f[] imagePoints, Std.VectorVectorPoint3f[] objectPoints)\n        {\n            // Calibrate first each camera\n            var cameraParameters = CameraParametersController.CameraParameters;\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                Std.VectorVec3d rvecs, tvecs;\n                cameraParameters.ReprojectionErrors[cameraId] = Cv.CalibrateCamera(objectPoints[cameraId], imagePoints[cameraId],\n                    ArucoCamera.Images[cameraId].Size, cameraParameters.CameraMatrices[cameraId], cameraParameters.DistCoeffs[cameraId],\n                    out rvecs, out tvecs, calibrationFlags.Flags);\n\n                Rvecs[cameraId] = rvecs;\n                Tvecs[cameraId] = tvecs;\n            }\n\n            // Stereo calibration\n            int cameraId1 = StereoArucoCamera.CameraId1;\n            int cameraId2 = StereoArucoCamera.CameraId2;\n            var cameraMatrix1 = cameraParameters.CameraMatrices[cameraId1];\n            var distCoeffs1 = cameraParameters.DistCoeffs[cameraId1];\n            var cameraMatrix2 = cameraParameters.CameraMatrices[cameraId2];\n            var distCoeffs2 = cameraParameters.DistCoeffs[cameraId2];\n            var imageSize = ArucoCamera.Images[cameraId1].Size;\n\n            var stereoCameraParameters = new StereoArucoCameraParameters();\n\n            Cv.Vec3d rvec, tvec;\n            Cv.Mat rotationMatrix, essentialMatrix, fundamentalMatrix;\n            stereoCameraParameters.ReprojectionError = Cv.StereoCalibrate(objectPoints[cameraId1], imagePoints[cameraId1],\n                imagePoints[cameraId2], cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, out rotationMatrix,\n                out tvec, out essentialMatrix, out fundamentalMatrix, calibrationFlags.Flags);\n            Cv.Rodrigues(rotationMatrix, out rvec);\n\n            stereoCameraParameters.RotationVector = rvec;\n            stereoCameraParameters.TranslationVector = tvec;\n            stereoCameraParameters.CalibrationFlagsValue = calibrationFlags.Value;\n            cameraParameters.StereoCameraParameters = stereoCameraParameters;\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Pinhole/StereoPinholeCameraCalibration.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 64bcf1901ac9fc44d9bf16ca10a527bc\r\ntimeCreated: 1511904324\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations/Pinhole.meta",
    "content": "fileFormatVersion: 2\r\nguid: b948a1b0c340f9e42890fc8e598168f6\r\nfolderAsset: yes\r\ntimeCreated: 1511904289\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Calibrations.meta",
    "content": "fileFormatVersion: 2\r\nguid: 1c1146b7921c08541ae1e1dd9fb04e41\r\nfolderAsset: yes\r\ntimeCreated: 1510714725\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/ArucoCamera.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing ArucoUnity.Utilities;\nusing System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras\n{\n    /// <summary>\n    /// Captures images of a camera.\n    /// </summary>\n    /// <remarks>\n    /// To add a new camera, you need to derive this class. See <see cref=\"ArucoWebcam\"/> as example. You need to\n    /// implement <see cref=\"Controller.Configuring\"/>, <see cref=\"Controller.Starting\"/>,\n    /// and <see cref=\"UpdatingImages\"/>.\n    /// </remarks>\n    public abstract class ArucoCamera : Controller, IArucoCamera\n    {\n        // Constants\n\n        protected readonly int? dontFlipCode = null;\n        private const int buffersCount = 2;\n\n        // IArucoCamera events\n\n        public event Action ImagesUpdated = delegate { };\n        public event Action<Cv.Mat[], byte[][]> UndistortRectifyImages = delegate { };\n\n        // IArucoCamera properties\n\n        public abstract int CameraNumber { get; }\n        public abstract string Name { get; protected set; }\n\n        public Texture2D[] Textures { get; private set; }\n        public Cv.Mat[] Images { get { return imageBuffers[currentBuffer]; } }\n        public byte[][] ImageDatas { get { return imageDataBuffers[currentBuffer]; } }\n        public int[] ImageDataSizes { get; private set; }\n        public float[] ImageRatios { get; private set; }\n\n        protected Cv.Mat[] NextImages { get { return imageBuffers[NextBuffer()]; } }\n        protected byte[][] NextImageDatas { get { return imageDataBuffers[NextBuffer()]; } }\n\n        // Variables\n\n        protected uint currentBuffer = 0;\n        protected Cv.Mat[][] imageBuffers = new Cv.Mat[buffersCount][];\n        protected byte[][][] imageDataBuffers = new byte[buffersCount][][];\n\n        protected Cv.Mat[] imagesToTextures;\n        protected byte[][] imagesToTextureDatas;\n\n        protected bool imagesUpdatedThisFrame = false;\n        protected bool flipHorizontallyImages = false,\n                                     flipVerticallyImages = false;\n        protected int? imagesFlipCode;\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// When configured and started, calls <see cref=\"UpdatingImages\"/> then <see cref=\"OnImagesUpdated\"/>.\n        /// </summary>\n        protected virtual void Update()\n        {\n            if (IsConfigured && IsStarted)\n            {\n                if (UpdatingImages())\n                {\n                    OnImagesUpdated();\n                }\n            }\n        }\n\n        // ConfigurableController methods\n\n        /// <summary>\n        /// Configures the properties.\n        /// </summary>\n        protected override void Configuring()\n        {\n            base.Configuring();\n\n            if (CameraNumber <= 0)\n            {\n                throw new Exception(\"It must have at least one camera.\");\n            }\n\n            Textures = new Texture2D[CameraNumber];\n            ImageDataSizes = new int[CameraNumber];\n            ImageRatios = new float[CameraNumber];\n\n            imagesToTextures = new Cv.Mat[CameraNumber];\n            imagesToTextureDatas = new byte[CameraNumber][];\n\n            for (int bufferId = 0; bufferId < buffersCount; bufferId++)\n            {\n                imageBuffers[bufferId] = new Cv.Mat[CameraNumber];\n                imageDataBuffers[bufferId] = new byte[CameraNumber][];\n            }\n\n            if (!flipHorizontallyImages && !flipVerticallyImages)\n            {\n                imagesFlipCode = Cv.verticalFlipCode;\n            }\n            else if (flipHorizontallyImages && !flipVerticallyImages)\n            {\n                imagesFlipCode = Cv.bothAxesFlipCode;\n            }\n            else if (!flipHorizontallyImages && flipVerticallyImages)\n            {\n                imagesFlipCode = dontFlipCode; // Don't flip because the image textures are already vertically flipped\n            }\n            else if (flipHorizontallyImages && flipVerticallyImages)\n            {\n                imagesFlipCode = Cv.horizontalFlipCode; // Image textures are already vertically flipped\n            }\n        }\n\n        /// <summary>\n        /// Initializes the <see cref=\"Images\"/>, <see cref=\"ImageDataSizes\"/>, <see cref=\"ImageDatas\"/>,\n        /// <see cref=\"NextImages\"/>, <see cref=\"NextImageTextures\"/> and <see cref=\"NextImageDatas\"/> properties from the\n        /// <see cref=\"Textures\"/> property.\n        /// </summary>\n        protected override void OnStarted()\n        {\n            for (int cameraId = 0; cameraId < CameraNumber; cameraId++)\n            {\n                for (int bufferId = 0; bufferId < buffersCount; bufferId++)\n                {\n                    imageBuffers[bufferId][cameraId] = new Cv.Mat(Textures[cameraId].height, Textures[cameraId].width,\n                        CvMatExtensions.ImageType(Textures[cameraId].format));\n                }\n\n                ImageDataSizes[cameraId] = (int)(Images[cameraId].ElemSize() * Images[cameraId].Total());\n                ImageRatios[cameraId] = Textures[cameraId].width / (float)Textures[cameraId].height;\n\n                for (int bufferId = 0; bufferId < buffersCount; bufferId++)\n                {\n                    imageDataBuffers[bufferId][cameraId] = new byte[ImageDataSizes[cameraId]];\n                    imageBuffers[bufferId][cameraId].DataByte = imageDataBuffers[bufferId][cameraId];\n                }\n\n                imagesToTextures[cameraId] = new Cv.Mat(Textures[cameraId].height, Textures[cameraId].width,\n                        CvMatExtensions.ImageType(Textures[cameraId].format));\n                imagesToTextureDatas[cameraId] = new byte[ImageDataSizes[cameraId]];\n                imagesToTextures[cameraId].DataByte = imagesToTextureDatas[cameraId];\n            }\n\n            base.OnStarted();\n        }\n\n        // Methods\n\n        /// <summary>\n        /// Updates <see cref=\"NextImages\"/> with the new camera images.\n        /// </summary>\n        /// <returns>If <see cref=\"NextImages\"/> have been updated.</returns>\n        protected abstract bool UpdatingImages();\n\n        /// <summary>\n        /// Calls <see cref=\"UndistortRectifyImages\"/> with the <see cref=\"NextImages\"/>, swaps <see cref=\"Images\"/> and\n        /// <see cref=\"ImageDatas\"/>, the calls <see cref=\"ImagesUpdated\"/> and applies the changes made on the\n        /// <see cref=\"Images\"/> to the <see cref=\"Textures\"/>.\n        /// </summary>\n        protected virtual void OnImagesUpdated()\n        {\n            // Undistort next images\n            if (imagesFlipCode != dontFlipCode)\n            {\n                for (int cameraId = 0; cameraId < CameraNumber; cameraId++)\n                {\n                    Cv.Flip(NextImages[cameraId], NextImages[cameraId], (int)imagesFlipCode);\n                }\n            }\n            UndistortRectifyImages(NextImages, NextImageDatas);\n\n            // Swap images\n            currentBuffer = NextBuffer();\n            ImagesUpdated();\n\n            // Update Textures with Images\n            for (int cameraId = 0; cameraId < CameraNumber; cameraId++)\n            {\n                Cv.Flip(Images[cameraId], imagesToTextures[cameraId], Cv.verticalFlipCode);\n                Textures[cameraId].LoadRawTextureData(imagesToTextures[cameraId].DataIntPtr, ImageDataSizes[cameraId]);\n                Textures[cameraId].Apply(false);\n            }\n        }\n\n        /// <summary>\n        /// Returns the index of the next buffer.\n        /// </summary>\n        private uint NextBuffer()\n        {\n            return (currentBuffer + 1) % buffersCount;\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/ArucoCamera.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 62d46e3aaa54c7046b351f582e70eaad\r\ntimeCreated: 1484938581\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/ArucoCameraController.cs",
    "content": "﻿using ArucoUnity.Utilities;\nusing System;\n\nnamespace ArucoUnity.Cameras\n{\n    /// <summary>\n    /// Generic configurable controller using a <see cref=\"ArucoCamera\"/> as starting dependency.\n    /// </summary>\n    public abstract class ArucoCameraController : Controller, IArucoCameraController\n    {\n        // IArucoCameraController properties\n\n        public IArucoCamera ArucoCamera { get; set; }\n\n        // ConfigurableController methods\n\n        /// <summary>\n        /// Adds <see cref=\"ArucoCamera\"/> as dependency.\n        /// </summary>\n        protected override void Configuring()\n        {\n            base.Configuring();\n\n            if (ArucoCamera == null)\n            {\n                throw new ArgumentNullException(\"ArucoCamera\", \"This property needs to be set for the configuration.\");\n            }\n            AddDependency(ArucoCamera);\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/ArucoCameraController.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 0021128bf5c1bca4faf094acf83341f2\r\ntimeCreated: 1510714744\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/ArucoWebcam.cs",
    "content": "﻿using ArucoUnity.Utilities;\nusing System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras\n{\n    /// <summary>\n    /// Captures images of a webcam.\n    /// </summary>\n    public class ArucoWebcam : ArucoCamera\n    {\n        // Constants\n\n        protected const int cameraId = 0;\n\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The id of the webcam to use.\")]\n        private int webcamId;\n\n        // IArucoCamera properties\n\n        public override int CameraNumber { get { return 1; } }\n\n        public override string Name { get; protected set; }\n\n        // Properties\n\n        /// <summary>\n        /// Gets or set the id of the webcam to use.\n        /// </summary>\n        public int WebcamId { get { return webcamId; } set { webcamId = value; } }\n\n        /// <summary>\n        /// Gets the controller of the webcam to use.\n        /// </summary>\n        public WebcamController WebcamController { get; private set; }\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Initializes <see cref=\"WebcamController\"/> and subscribes to.\n        /// </summary>\n        protected override void Awake()\n        {\n            base.Awake();\n            WebcamController = gameObject.AddComponent<WebcamController>();\n            WebcamController.Started += WebcamController_Started;\n        }\n\n        /// <summary>\n        /// Unsubscribes to <see cref=\"WebcamController\"/>.\n        /// </summary>\n        protected override void OnDestroy()\n        {\n            base.OnDestroy();\n            WebcamController.Started -= WebcamController_Started;\n        }\n\n        // ConfigurableController methods\n\n        /// <summary>\n        /// Calls <see cref=\"WebcamController.Configure\"/> and sets <see cref=\"Name\"/>.\n        /// </summary>\n        protected override void Configuring()\n        {\n            base.Configuring();\n\n            WebcamController.Ids.Clear();\n            WebcamController.Ids.Add(WebcamId);\n            WebcamController.Configure();\n\n            Name = WebcamController.Devices[cameraId].name;\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"WebcamController.StartWebcams\"/>.\n        /// </summary>\n        protected override void Starting()\n        {\n            base.Starting();\n            WebcamController.StartWebcams();\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"WebcamController.StopWebcams\"/>.\n        /// </summary>\n        protected override void Stopping()\n        {\n            base.Stopping();\n            WebcamController.StopWebcams();\n        }\n\n        /// <summary>\n        /// Blocks <see cref=\"ArucoCamera.OnStarted\"/> until <see cref=\"WebcamController.IsStarted\"/>.\n        /// </summary>\n        protected override void OnStarted()\n        {\n        }\n\n        // ArucoCamera methods\n\n        /// <summary>\n        /// Copy current webcam images to <see cref=\"ArucoCamera.NextImages\"/>.\n        /// </summary>\n        protected override bool UpdatingImages()\n        {\n            Array.Copy(WebcamController.Textures2D[cameraId].GetRawTextureData(), NextImageDatas[cameraId], ImageDataSizes[cameraId]);\n            return true;\n        }\n\n        // Methods\n\n        /// <summary>\n        /// Configures <see cref=\"ArucoCamera.Textures\"/> and calls <see cref=\"ArucoCamera.OnStarted\"/>.\n        /// </summary>\n        protected virtual void WebcamController_Started(WebcamController webcamController)\n        {\n            var webcamTexture = WebcamController.Textures2D[cameraId];\n            Textures[cameraId] = new Texture2D(webcamTexture.width, webcamTexture.height, webcamTexture.format, false);\n            base.OnStarted();\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/ArucoWebcam.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 43b2fc42ec749de4fa54b3fc1163f23d\r\ntimeCreated: 1484078137\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/ArucoCameraDisplay.cs",
    "content": "﻿using ArucoUnity.Cameras.Undistortions;\nusing ArucoUnity.Utilities;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras.Displays\n{\n    /// <summary>\n    /// Manages Unity virual cameras that shoot 3D content aligned with the <see cref=\"IArucoCamera.Images\"/> displayed\n    /// as background. It creates the augmented reality effect by the images from the physical cameras and the\n    /// <see cref=\"Objects.ArucoObject\"/> tracked by <see cref=\"Objects.Trackers.ArucoObjectsTracker\"/>.\n    /// </summary>\n    public abstract class ArucoCameraDisplay : ArucoCameraController, IArucoCameraDisplay\n    {\n        // Constants\n\n        public const float cameraBackgroundDistance = 1f;\n\n        // IArucoCameraDisplay properties\n\n        public virtual Camera[] Cameras { get; protected set; }\n        public virtual Camera[] BackgroundCameras { get; protected set; }\n        public virtual Renderer[] Backgrounds { get; protected set; }\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the optional undistortion process associated with the <see cref=\"ArucoCameraController.ArucoCamera\"/>.\n        /// </summary>\n        public IArucoCameraUndistortion ArucoCameraUndistortion { get; set; }\n\n        // ConfigurableController methods\n\n        /// <summary>\n        /// Adds <see cref=\"ArucoCameraUndistortion\"/> as dependency if set.\n        /// </summary>\n        protected override void Configuring()\n        {\n            base.Configuring();\n            if (ArucoCameraUndistortion != null)\n            {\n                AddDependency(ArucoCameraUndistortion);\n            }\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"ConfigureDisplay\"/> the <see cref=\"SetDisplayActive(bool)\"/> to activate the display.\n        /// </summary>\n        protected override void Starting()\n        {\n            base.Starting();\n            ConfigureDisplay();\n            SetDisplayActive(true);\n        }\n\n        /// <summary>\n        /// Deactivates the display with <see cref=\"SetDisplayActive(bool)\"/>.\n        /// </summary>\n        protected override void Stopping()\n        {\n            base.Stopping();\n            SetDisplayActive(false);\n        }\n\n        // IArucoCameraDisplay methods\n\n        public virtual void PlaceArucoObject(Transform arucoObject, int cameraId, Vector3 localPosition, Quaternion localRotation)\n        {\n            var parent = arucoObject.transform.parent;\n            arucoObject.transform.SetParent(Cameras[cameraId].transform);\n\n            arucoObject.transform.localPosition = localPosition;\n            arucoObject.transform.localRotation = localRotation;\n\n            arucoObject.transform.SetParent(parent);\n            arucoObject.gameObject.SetActive(true);\n        }\n\n        // Methods\n\n        /// <summary>\n        /// Configures the <see cref=\"BackgroundCameras\"/> and the <see cref=\"Backgrounds\"/> according to the\n        /// <see cref=\"ArucoCameraUndistortion\"/> if set otherwise with default values.\n        /// </summary>\n        protected virtual void ConfigureDisplay()\n        {\n            // Sets the background texture\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                Backgrounds[cameraId].material.mainTexture = ArucoCamera.Textures[cameraId];\n            }\n\n            // Cameras and background configurations\n            if (ArucoCameraUndistortion == null)\n            {\n                ConfigureDefaultBackgrounds();\n            }\n            else\n            {\n                for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n                {\n                    ConfigureRectifiedCamera(cameraId);\n                    ConfigureRectifiedBackground(cameraId);\n                }\n            }\n        }\n\n        /// <summary>\n        /// Activates or deactivates the <see cref=\"Cameras\"/>, the <see cref=\"BackgroundCameras\"/> and the <see cref=\"Backgrounds\"/>.\n        /// </summary>\n        /// <param name=\"value\">True to activate, false to deactivate.</param>\n        protected virtual void SetDisplayActive(bool value)\n        {\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                Cameras[cameraId].gameObject.SetActive(value);\n                BackgroundCameras[cameraId].gameObject.SetActive(value);\n                Backgrounds[cameraId].gameObject.SetActive(value);\n            }\n        }\n\n        /// <summary>\n        /// Places the <see cref=\"Backgrounds\"/> in front of the corresponding <see cref=\"BackgroundCameras\"/> centered and scaled to fit in the\n        /// camera view.\n        /// </summary>\n        protected virtual void ConfigureDefaultBackgrounds()\n        {\n            for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n            {\n                Vector3 localScale = Vector3.one;\n                if (BackgroundCameras[cameraId].aspect < ArucoCamera.ImageRatios[cameraId])\n                {\n                    localScale.x = 2f * cameraBackgroundDistance * BackgroundCameras[cameraId].aspect * Mathf.Tan(0.5f * BackgroundCameras[cameraId].fieldOfView * Mathf.Deg2Rad);\n                    localScale.y = localScale.x / ArucoCamera.ImageRatios[cameraId];\n                }\n                else\n                {\n                    localScale.y = 2f * cameraBackgroundDistance * Mathf.Tan(0.5f * BackgroundCameras[cameraId].fieldOfView * Mathf.Deg2Rad);\n                    localScale.x = localScale.y * ArucoCamera.ImageRatios[cameraId];\n                }\n\n                Backgrounds[cameraId].transform.localPosition = new Vector3(0, 0, cameraBackgroundDistance);\n                Backgrounds[cameraId].transform.localScale = localScale;\n            }\n        }\n\n        /// <summary>\n        /// Configures the field of view of a <see cref=\"Cameras\"/> according to the vertical focal length of the corresponding rectified camera matrix\n        /// in <see cref=\"ArucoCameraUndistortion.RectifiedCameraMatrices\"/>. If the camera targets an eye in VR mode, Unity has already configured it.\n        /// </summary>\n        /// <param name=\"cameraId\">The id of the camera to configure.</param>\n        protected virtual void ConfigureRectifiedCamera(int cameraId)\n        {\n            float imageHeight = ArucoCameraUndistortion.CameraParameters.ImageHeights[cameraId];\n            Vector2 cameraF = ArucoCameraUndistortion.RectifiedCameraMatrices[cameraId].GetCameraFocalLengths();\n\n            float fovY = 2f * Mathf.Atan(0.5f * imageHeight / cameraF.y) * Mathf.Rad2Deg;\n            Cameras[cameraId].fieldOfView = fovY;\n            BackgroundCameras[cameraId].fieldOfView = fovY;\n        }\n\n        /// <summary>\n        /// Places a <see cref=\"Backgrounds\"/> in front of the corresponding <see cref=\"BackgroundCameras\"/> centered with the principal point of the\n        /// corresponding rectified camera matrix in <see cref=\"ArucoCameraUndistortion.RectifiedCameraMatrices\"/> and scaled to fit in the field of\n        /// view calculated from the focal lengths of the rectified camera matrix.\n        /// </summary>\n        /// <param name=\"cameraId\">The id of the background and the background camera to configure.</param>\n        protected virtual void ConfigureRectifiedBackground(int cameraId)\n        {\n            float imageWidth = ArucoCameraUndistortion.CameraParameters.ImageWidths[cameraId];\n            float imageHeight = ArucoCameraUndistortion.CameraParameters.ImageHeights[cameraId];\n            Vector2 focalLength = ArucoCameraUndistortion.RectifiedCameraMatrices[cameraId].GetCameraFocalLengths();\n            Vector2 principalPoint = ArucoCameraUndistortion.RectifiedCameraMatrices[cameraId].GetCameraPrincipalPoint();\n\n            // Considering https://docs.opencv.org/3.4/d4/d94/tutorial_camera_calibration.html, we are looking for X=posX and Y=posY\n            // with x=0.5*ImageWidth, y=0.5*ImageHeight (center of the camera projection) and w=Z=cameraBackgroundDistance \n            float localPositionX = (0.5f * imageWidth - principalPoint.x) / focalLength.x * cameraBackgroundDistance;\n            float localPositionY = -(0.5f * imageHeight - principalPoint.y) / focalLength.y * cameraBackgroundDistance; // a minus because OpenCV camera coordinates origin is top - left, but bottom-left in Unity\n\n            // Considering https://stackoverflow.com/a/41137160\n            // scale.x = 2 * cameraBackgroundDistance * tan(fovx / 2), cameraF.x = imageWidth / (2 * tan(fovx / 2))\n            float localScaleX = imageWidth / focalLength.x * cameraBackgroundDistance;\n            float localScaleY = imageHeight / focalLength.y * cameraBackgroundDistance;\n\n            // Place and scale the background\n            Backgrounds[cameraId].transform.localPosition = new Vector3(localPositionX, localPositionY, cameraBackgroundDistance);\n            Backgrounds[cameraId].transform.localScale = new Vector3(localScaleX, localScaleY, 1);\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/ArucoCameraDisplay.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: c881fcd8bdf848a4ea1a8d790da8bd53\r\ntimeCreated: 1525361538\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/ArucoCameraDisplayGeneric.cs",
    "content": "﻿using ArucoUnity.Cameras.Undistortions;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras.Displays\n{\n    public abstract class ArucoCameraDisplayGeneric<T, U> : ArucoCameraDisplay\n        where T : ArucoCamera\n        where U : ArucoCameraUndistortion\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The camera to use.\")]\n        private T arucoCamera;\n\n        [SerializeField]\n        [Tooltip(\"The optional undistortion process associated with the ArucoCamera.\")]\n        private U arucoCameraUndistortion;\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Sets <see cref=\"ArucoCameraDisplay.ArucoCamera\"/> and <see cref=\"ArucoCameraDisplay.ArucoCameraUndistortion\"/>\n        /// from editor fields if not nulls.\n        /// </summary>\n        protected override void Awake()\n        {\n            base.Awake();\n            if (arucoCamera != null)\n            {\n                ArucoCamera = arucoCamera;\n            }\n            if (arucoCameraUndistortion != null)\n            {\n                ArucoCameraUndistortion = arucoCameraUndistortion;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/ArucoCameraDisplayGeneric.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 78197734d3ee6ef4e93ec29bd16d638d\r\ntimeCreated: 1511299097\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/IArucoCameraDisplay.cs",
    "content": "﻿using ArucoUnity.Cameras.Undistortions;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras.Displays\n{\n    /// <summary>\n    /// Manages Unity virual cameras that shoot 3D content aligned with the <see cref=\"IArucoCamera.Images\"/> displayed as background. It\n    /// creates the augmented reality effect by aligning the images from the physical cameras and the <see cref=\"Objects.ArucoObject\"/> tracked by\n    /// <see cref=\"IArucoObjectsTracker\"/>.\n    /// </summary>\n    public interface IArucoCameraDisplay : IArucoCameraController\n    {\n        // Properties\n\n        /// <summary>\n        /// Gets the optional undistortion process associated with the ArucoCamera.\n        /// </summary>\n        IArucoCameraUndistortion ArucoCameraUndistortion { get; set; }\n\n        /// <summary>\n        /// Gets the Unity virtual camera that will shoot the 3D content aligned with the <see cref=\"Background\"/>.\n        /// </summary>\n        Camera[] Cameras { get; }\n\n        /// <summary>\n        /// Gets the Unity virtual camera that will shoot the <see cref=\"Backgrounds\"/>.\n        /// </summary>\n        Camera[] BackgroundCameras { get; }\n\n        /// <summary>\n        /// Gets the backgrounds displaying the <see cref=\"IArucoCamera.Images\"/> of the corresponding physical camera in ArucoCamera.\n        /// </summary>\n        Renderer[] Backgrounds { get; }\n\n        // Methods\n\n        /// <summary>\n        /// Updates the transform of an ArUco object.\n        /// </summary>\n        /// <param name=\"arucoObject\">The transfomr to the ArUco object to place.</param>\n        /// <param name=\"cameraId\">The id of the camera to use. The transform is placed and oriented relative to this camera.</param>\n        /// <param name=\"localPosition\">The estimated translation of the transform relative to the camera.</param>\n        /// <param name=\"localRotation\">The estimated rotation of the transform relative to the camera.</param>\n        void PlaceArucoObject(Transform arucoObject, int cameraId, Vector3 localPosition, Quaternion localRotation);\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/IArucoCameraDisplay.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 76381d563874ef044b1ae4e14cb1f5fa\r\ntimeCreated: 1511474824\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/MonoArucoCameraDisplay.cs",
    "content": "﻿using ArucoUnity.Cameras.Undistortions;\nusing System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras.Displays\n{\n    /// <summary>\n    /// Displays a mono <see cref=\"ArucoCamera\"/>.\n    /// </summary>\n    public class MonoArucoCameraDisplay : ArucoCameraDisplayGeneric<ArucoCamera, ArucoCameraUndistortion>\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The Unity virtual camera that will shoot the 3D content aligned with the background.\")]\n        private Camera[] cameras;\n\n        [SerializeField]\n        [Tooltip(\"The Unity virtual camera that will shoot the background.\")]\n        private Camera[] backgroundCameras;\n\n        [SerializeField]\n        [Tooltip(\"The background displaying the image of the corresponding physical camera in ArucoCamera.\")]\n        private Renderer[] backgrounds;\n\n        // ArucoCameraGenericDisplay properties\n\n        public override Camera[] Cameras { get { return cameras; } protected set { cameras = value; } }\n        public override Camera[] BackgroundCameras { get { return backgroundCameras; } protected set { backgroundCameras = value; } }\n        public override Renderer[] Backgrounds { get { return backgrounds; } protected set { backgrounds = value; } }\n\n        /// <summary>\n        /// Resizes the length of the <see cref=\"cameras\"/>, <see cref=\"backgroundCameras\"/> and <see cref=\"backgrounds\"/>\n        /// editor fields to <see cref=\"ArucoCamera.CameraNumber\"/> if different.\n        /// </summary>\n        protected virtual void OnValidate()\n        {\n            if (ArucoCamera != null)\n            {\n                if (cameras != null && cameras.Length != ArucoCamera.CameraNumber)\n                {\n                    Array.Resize(ref cameras, ArucoCamera.CameraNumber);\n                }\n                if (backgroundCameras != null && backgroundCameras.Length != ArucoCamera.CameraNumber)\n                {\n                    Array.Resize(ref backgroundCameras, ArucoCamera.CameraNumber);\n                }\n                if (backgrounds != null && backgrounds.Length != ArucoCamera.CameraNumber)\n                {\n                    Array.Resize(ref backgrounds, ArucoCamera.CameraNumber);\n                }\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/MonoArucoCameraDisplay.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: c26a913db0c57924296019074a504016\r\ntimeCreated: 1510963893\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/StereoArucoCameraDisplay.cs",
    "content": "﻿using ArucoUnity.Cameras.Undistortions;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras.Displays\n{\n    /// <summary>\n    /// Displays a <see cref=\"StereoArucoCamera\"/>.\n    /// </summary>\n    public class StereoArucoCameraDisplay : ArucoCameraDisplayGeneric<StereoArucoCamera, ArucoCameraUndistortion>\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The container of the leftCamera and the leftBackgroundCamera.\")]\n        private Transform leftEye;\n\n        [SerializeField]\n        [Tooltip(\"The container of the rightCamera and the rightBackgroundCamera.\")]\n        private Transform rightEye;\n\n        [SerializeField]\n        [Tooltip(\"The Unity virtual camera that will shoot the 3D content aligned with the left background.\")]\n        private Camera leftCamera;\n\n        [SerializeField]\n        [Tooltip(\"The Unity virtual camera that will shoot the 3D content aligned with the right background.\")]\n        private Camera rightCamera;\n\n        [SerializeField]\n        [Tooltip(\"The Unity virtual camera that will shoot the left eye background.\")]\n        private Camera leftBackgroundCamera;\n\n        [SerializeField]\n        [Tooltip(\"The Unity virtual camera that will shoot the right eye background.\")]\n        private Camera rightBackgroundCamera;\n\n        [SerializeField]\n        [Tooltip(\"The background displaying the image of the left physical camera in ArucoCamera.\")]\n        private Renderer leftBackground;\n\n        [SerializeField]\n        [Tooltip(\"The background displaying the image of the right physical camera in ArucoCamera.\")]\n        private Renderer rightBackground;\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the containers of the <see cref=\"ArucoCameraDisplayGeneric{T}.Cameras\"/> and the\n        /// <see cref=\"ArucoCameraDisplayGeneric{T}.BackgroundCameras\"/>.\n        /// </summary>\n        public Transform[] Eyes { get; protected set; }\n\n        // Variables\n\n        protected Vector3 backgroundsPositionOffset = Vector3.zero;\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Sets <see cref=\"Eyes\"/>, <see cref=\"ArucoCameraDisplayGeneric.Cameras\"/>,\n        /// <see cref=\"ArucoCameraDisplayGeneric.BackgroundCameras\"/> and\n        /// <see cref=\"ArucoCameraDisplayGeneric.Backgrounds\"/> from editor fields if not nulls.\n        /// </summary>\n        protected override void Awake()\n        {\n            base.Awake();\n\n            Eyes = new Transform[StereoArucoCamera.StereoCameraNumber];\n            Eyes[StereoArucoCamera.CameraId1] = leftEye;\n            Eyes[StereoArucoCamera.CameraId2] = rightEye;\n\n            Cameras = new Camera[StereoArucoCamera.StereoCameraNumber];\n            Cameras[StereoArucoCamera.CameraId1] = leftCamera;\n            Cameras[StereoArucoCamera.CameraId2] = rightCamera;\n\n            BackgroundCameras = new Camera[StereoArucoCamera.StereoCameraNumber];\n            BackgroundCameras[StereoArucoCamera.CameraId1] = leftBackgroundCamera;\n            BackgroundCameras[StereoArucoCamera.CameraId2] = rightBackgroundCamera;\n\n            Backgrounds = new Renderer[StereoArucoCamera.StereoCameraNumber];\n            Backgrounds[StereoArucoCamera.CameraId1] = leftBackground;\n            Backgrounds[StereoArucoCamera.CameraId2] = rightBackground;\n        }\n\n        // IArucoCameraDisplay methods\n\n        public override void PlaceArucoObject(Transform arucoObject, int cameraId, Vector3 localPosition, Quaternion localRotation)\n        {\n            base.PlaceArucoObject(arucoObject, cameraId, localPosition, localRotation);\n\n            float direction = (cameraId == StereoArucoCamera.CameraId1) ? 1 : -1;\n            arucoObject.transform.position += direction * backgroundsPositionOffset / 2 * localPosition.z;\n        }\n\n        // ArucoCameraDisplay methods\n\n        protected override void ConfigureDisplay()\n        {\n            if (ArucoCameraUndistortion != null)\n            {\n                backgroundsPositionOffset = ArucoCameraUndistortion.CameraParameters.StereoCameraParameters.TranslationVector.ToPosition();\n            }\n            base.ConfigureDisplay();\n        }\n\n        // ArucoCameraDisplay methods\n\n        /// <summary>\n        /// Place the virtual cameras in the same placement than the physical cameras.\n        /// </summary>\n        /// <param name=\"cameraId\">The id of the camera to configure.</param>\n        protected override void ConfigureRectifiedCamera(int cameraId)\n        {\n            base.ConfigureRectifiedCamera(cameraId);\n\n            float direction = (cameraId == StereoArucoCamera.CameraId1) ? 1 : -1;\n            Eyes[cameraId].transform.localPosition += backgroundsPositionOffset / 2;\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/StereoArucoCameraDisplay.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 3648ba3f74da4164db2b440ad0fbe471\r\ntimeCreated: 1511291541\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/StereoVRArucoCameraDisplay.cs",
    "content": "﻿using ArucoUnity.Cameras.Undistortions;\nusing ArucoUnity.Utilities;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras.Displays\n{\n    /// <summary>\n    /// Displays a <see cref=\"StereoArucoCamera\"/> in a VR HMD.\n    /// </summary>\n    public class StereoVRArucoCameraDisplay : ArucoCameraDisplayGeneric<StereoArucoCamera, ArucoCameraUndistortion>\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The Unity stereo VR virtual camera that will shoot the 3D content aligned with the backgrounds.\")]\n        private Camera stereoVRCamera;\n\n        [SerializeField]\n        [Tooltip(\"The Unity virtual camera that will shoot the left eye background.\")]\n        private Camera leftBackgroundCamera;\n\n        [SerializeField]\n        [Tooltip(\"The Unity virtual camera that will shoot the right eye background.\")]\n        private Camera rightBackgroundCamera;\n\n        [SerializeField]\n        [Tooltip(\"The background displaying the image of the left physical camera in ArucoCamera.\")]\n        private Renderer leftBackground;\n\n        [SerializeField]\n        [Tooltip(\"The background displaying the image of the right physical camera in ArucoCamera.\")]\n        private Renderer rightBackground;\n\n        // Variables\n\n        protected Vector3 backgroundsPositionOffset;\n        protected float cameraFocalLength;\n        protected float arucoObjectPlacementZFactor = 1f;\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Populates <see cref=\"Eyes\"/>, <see cref=\"ArucoCameraDisplayGeneric.Cameras\"/>, <see cref=\"ArucoCameraDisplayGeneric.BackgroundCameras\"/>\n        /// and <see cref=\"ArucoCameraDisplayGeneric.Backgrounds\"/> from editor fields if not nulls.\n        /// </summary>\n        protected override void Awake()\n        {\n            base.Awake();\n\n            Cameras = new Camera[StereoArucoCamera.StereoCameraNumber];\n            Cameras[StereoArucoCamera.CameraId1] = Cameras[StereoArucoCamera.CameraId2] = stereoVRCamera;\n\n            BackgroundCameras = new Camera[StereoArucoCamera.StereoCameraNumber];\n            BackgroundCameras[StereoArucoCamera.CameraId1] = leftBackgroundCamera;\n            BackgroundCameras[StereoArucoCamera.CameraId2] = rightBackgroundCamera;\n\n            Backgrounds = new Renderer[StereoArucoCamera.StereoCameraNumber];\n            Backgrounds[StereoArucoCamera.CameraId1] = leftBackground;\n            Backgrounds[StereoArucoCamera.CameraId2] = rightBackground;\n        }\n\n        // IArucoCameraDisplay methods\n\n        public override void PlaceArucoObject(Transform arucoObject, int cameraId, Vector3 localPosition, Quaternion localRotation)\n        {\n            var parent = arucoObject.transform.parent;\n            arucoObject.transform.SetParent(Cameras[cameraId].transform);\n\n            float direction = (cameraId == StereoArucoCamera.CameraId1) ? 1 : -1;\n            arucoObject.transform.localPosition = new Vector3(localPosition.x, localPosition.y, arucoObjectPlacementZFactor * localPosition.z)\n                + direction * backgroundsPositionOffset / 2;\n            arucoObject.transform.localRotation = localRotation;\n\n            arucoObject.transform.SetParent(parent);\n            arucoObject.gameObject.SetActive(true);\n        }\n\n        // ArucoCameraDisplay methods\n\n        /// <summary>\n        /// Configure the backgrounds for VR mode.\n        /// </summary>\n        protected override void ConfigureDisplay()\n        {\n            base.ConfigureDisplay();\n\n            backgroundsPositionOffset = ArucoCameraUndistortion.CameraParameters.StereoCameraParameters.TranslationVector.ToPosition();\n\n            if (ArucoCameraUndistortion != null)\n            {\n                // Place the backgrounds to allow the eyes to fuse them in a VR HMD\n                Backgrounds[StereoArucoCamera.CameraId1].transform.localPosition += backgroundsPositionOffset / 2;\n                Backgrounds[StereoArucoCamera.CameraId2].transform.localPosition -= backgroundsPositionOffset / 2;\n\n                // Adjust the stereo convergence of the background camera to the focal length\n                BackgroundCameras[StereoArucoCamera.CameraId1].stereoConvergence = cameraFocalLength;\n                BackgroundCameras[StereoArucoCamera.CameraId2].stereoConvergence = cameraFocalLength;\n            }\n        }\n\n        /// <summary>\n        /// Cancels the base class configuration of the virtual cameras as Unity already handles them.\n        /// </summary>\n        protected override void ConfigureRectifiedCamera(int cameraId)\n        {\n        }\n\n        /// <summary>\n        /// Places the <see cref=\"ArucoCameraDisplayGeneric.Backgrounds\"/> taking account of the difference of the focal length between the VR\n        /// <see cref=\"ArucoCameraDisplayGeneric.Cameras\"/> and from <see cref=\"ArucoCameraUndistortion.RectificationMatrices\"/>.\n        /// </summary>\n        /// <param name=\"cameraId\">The id of the background and the background camera to configure.</param>\n        protected override void ConfigureRectifiedBackground(int cameraId)\n        {\n            float imageWidth = ArucoCameraUndistortion.CameraParameters.ImageWidths[cameraId];\n            float imageHeight = ArucoCameraUndistortion.CameraParameters.ImageHeights[cameraId];\n            Vector2 focalLength = ArucoCameraUndistortion.RectifiedCameraMatrices[cameraId].GetCameraFocalLengths();\n            Vector2 principalPoint = ArucoCameraUndistortion.RectifiedCameraMatrices[cameraId].GetCameraPrincipalPoint();\n\n            cameraFocalLength = Cameras[cameraId].pixelHeight / (2f * Mathf.Tan(0.5f * Cameras[cameraId].fieldOfView * Mathf.Deg2Rad));\n            arucoObjectPlacementZFactor = cameraFocalLength / focalLength.y;\n\n            float localPositionX = (0.5f * imageWidth - principalPoint.x) / cameraFocalLength * cameraBackgroundDistance;\n            float localPositionY = -(0.5f * imageHeight - principalPoint.y) / cameraFocalLength * cameraBackgroundDistance;\n\n            float localScaleX = imageWidth / cameraFocalLength * cameraBackgroundDistance;\n            float localScaleY = imageHeight / cameraFocalLength * cameraBackgroundDistance;\n\n            Backgrounds[cameraId].transform.localPosition = new Vector3(0f, 0f, cameraBackgroundDistance);\n            Backgrounds[cameraId].transform.localScale = new Vector3(localScaleX, localScaleY, 1f);\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays/StereoVRArucoCameraDisplay.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: a808b35399551b34a8022e60eb9b09d3\r\ntimeCreated: 1512406688\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Displays.meta",
    "content": "fileFormatVersion: 2\r\nguid: 28e26fdf81893c44aaed171094e4e508\r\nfolderAsset: yes\r\ntimeCreated: 1510963842\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/IArucoCamera.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing ArucoUnity.Utilities;\nusing System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras\n{\n    /// <summary>\n    /// Captures images of a camera.\n    /// </summary>\n    public interface IArucoCamera : IController\n    {\n        // Events\n\n        /// <summary>\n        /// Called when the <see cref=\"Images\"/> have been updated.\n        /// </summary>\n        event Action ImagesUpdated;\n\n        /// <summary>\n        /// Callback to undistort and rectify the images in parameters.\n        /// </summary>\n        event Action<Cv.Mat[], byte[][]> UndistortRectifyImages;\n\n        // Properties\n\n        /// <summary>\n        /// Gets the number of cameras in the system.\n        /// </summary>\n        int CameraNumber { get; }\n\n        /// <summary>\n        /// Gets the name of the camera system used.\n        /// </summary>\n        string Name { get; }\n\n        /// <summary>\n        /// Gets the the current images manipulated by Unity. There are <see cref=\"CameraNumber\"/> images: one for each camera.\n        /// </summary>\n        Texture2D[] Textures { get; }\n\n        /// <summary>\n        /// Gets or sets the current images manipulated by OpenCV. There are <see cref=\"CameraNumber\"/> images: one for each camera.\n        /// </summary>\n        Cv.Mat[] Images { get; }\n\n        /// <summary>\n        /// Gets the <see cref=\"Images\"/> content.\n        /// </summary>\n        byte[][] ImageDatas { get; }\n\n        /// <summary>\n        /// Gets the size of each <see cref=\"ImageDatas\"/>.\n        /// </summary>\n        int[] ImageDataSizes { get; }\n\n        /// <summary>\n        /// Gets the ratios of each <see cref=\"Images\"/>.\n        /// </summary>\n        float[] ImageRatios { get; }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/IArucoCamera.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 2c65708b17804334e8fc8f572b2364b3\r\ntimeCreated: 1511461003\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/IArucoCameraController.cs",
    "content": "﻿using ArucoUnity.Utilities;\n\nnamespace ArucoUnity.Cameras\n{\n    /// <summary>\n    /// Configurable controller using a <see cref=\"IArucoCamera\"/>.\n    /// </summary>\n    public interface IArucoCameraController : IController\n    {\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the camera to use.\n        /// </summary>\n        IArucoCamera ArucoCamera { get; set; }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/IArucoCameraController.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 9c2488c0150a5534bbaf572ec1408eba\r\ntimeCreated: 1511474536\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoCameraParameters.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing System;\nusing System.IO;\nusing System.Xml.Serialization;\n\nnamespace ArucoUnity.Cameras.Parameters\n{\n    /// <summary>\n    /// Manage the camera parameters from a calibration.\n    /// </summary>\n    [Serializable]\n    public class ArucoCameraParameters\n    {\n        // Constructors\n\n        /// <summary>\n        /// Create an empty CameraParameters and set <see cref=\"CalibrationDateTime\"/> to now.\n        /// </summary>\n        /// <remarks>This constructor is needed for the serialization.</remarks>\n        public ArucoCameraParameters()\n        {\n        }\n\n        /// <summary>\n        /// Initialize the properties.\n        /// </summary>\n        /// <param name=\"camerasNumber\">The number of camera in the camera system. Must be equal to the number of cameras of the related\n        /// <see cref=\"ArucoCamera\"/>.</param>\n        public ArucoCameraParameters(int camerasNumber)\n        {\n            CalibrationDateTime = DateTime.Now;\n            CameraNumber = camerasNumber;\n\n            ImageHeights = new int[CameraNumber];\n            ImageWidths = new int[CameraNumber];\n            ReprojectionErrors = new double[CameraNumber];\n            CameraMatrices = new Cv.Mat[CameraNumber];\n            CameraMatricesValues = new double[CameraNumber][][];\n            DistCoeffs = new Cv.Mat[CameraNumber];\n            DistCoeffsValues = new double[CameraNumber][][];\n            OmnidirXis = new Cv.Mat[CameraNumber];\n            OmnidirXisValues = new double[CameraNumber][][];\n        }\n\n        // Properties\n\n        /// <summary>\n        /// The calibration date and time.\n        /// </summary>\n        public DateTime CalibrationDateTime { get; set; }\n\n        /// <summary>\n        /// The number of the camera during the calibration.\n        /// </summary>\n        public int CameraNumber { get; set; }\n\n        /// <summary>\n        /// The image height during the calibration.\n        /// </summary>\n        public int[] ImageHeights { get; set; }\n\n        /// <summary>\n        /// The image width during the calibration.\n        /// </summary>\n        public int[] ImageWidths { get; set; }\n\n        /// <summary>\n        /// The calibration flags used.\n        /// </summary>\n        public int CalibrationFlagsValue { get; set; }\n\n        /// <summary>\n        /// Non null if there is a fix image aspect ratio.\n        /// </summary>\n        public float FixAspectRatioValue { get; set; }\n\n        /// <summary>\n        /// The average re-projection error of the calibration.\n        /// </summary>\n        public double[] ReprojectionErrors { get; set; }\n\n        /// <summary>\n        /// The camera matrices of the calibration.\n        /// </summary>\n        /// <remarks>When <see cref=\"SaveToXmlFile(string)\"/> is called, it's serialized with the <see cref=\"CameraMatricesType\"/> and \n        /// <see cref=\"CameraMatricesValues\"/> properties.</remarks>\n        [XmlIgnore]\n        public Cv.Mat[] CameraMatrices { get; set; }\n\n        /// <summary>\n        /// The camera matrix type of the calibration. Equals to <see cref=\"CameraMatrices.Type()\"/> and automatically written when \n        /// <see cref=\"SaveToXmlFile(string)\"/> is called.\n        /// </summary>\n        /// <remarks>This property is be public for the serialization.</remarks>\n        public Cv.Type CameraMatricesType { get; set; }\n\n        /// <summary>\n        /// The camera matrix values of the calibration. Equals to the <see cref=\"CameraMatrices\"/> content and automatically written when \n        /// <see cref=\"SaveToXmlFile(string)\"/> is called.\n        /// </summary>\n        /// <remarks>This property is be public for the serialization.</remarks>\n        public double[][][] CameraMatricesValues { get; set; }\n\n        /// <summary>\n        /// The distorsition coefficients of the calibration.\n        /// </summary>\n        /// <remarks>When <see cref=\"SaveToXmlFile(string)\"/> is called, it's serialized with the <see cref=\"DistCoeffsType\"/> and \n        /// <see cref=\"DistCoeffsValues\"/> properties.</remarks>\n        [XmlIgnore]\n        public Cv.Mat[] DistCoeffs { get; set; }\n\n        /// <summary>\n        /// The distorsition coefficients type of the calibration. Equals to <see cref=\"DistCoeffs.Type()\"/> and automatically written when \n        /// <see cref=\"SaveToXmlFile(string)\"/> is called.\n        /// </summary>\n        /// <remarks>This property is be public for the serialization.</remarks>\n        public Cv.Type DistCoeffsType { get; set; }\n\n        /// <summary>\n        /// The distorsition coefficients values of the calibration. Equals to the <see cref=\"DistCoeffs\"/> content and automatically written when \n        /// <see cref=\"SaveToXmlFile(string)\"/> is called.\n        /// </summary>\n        /// <remarks>This property is be public for the serialization.</remarks>\n        public double[][][] DistCoeffsValues { get; set; }\n\n        /// <summary>\n        /// The xi parameter used in the omnidir calibration process (ccalib module).\n        /// </summary>\n        /// <remarks>When <see cref=\"SaveToXmlFile(string)\"/> is called, it's serialized with the <see cref=\"OmnidirXisType\"/> and \n        /// <see cref=\"OmnidirXisValues\"/> properties.</remarks>\n        [XmlIgnore]\n        public Cv.Mat[] OmnidirXis { get; set; }\n\n        /// <summary>\n        /// The xi parameter type of the calibration. Equals to <see cref=\"OmnidirXis.Type()\"/> and automatically written when \n        /// <see cref=\"SaveToXmlFile(string)\"/> is called.\n        /// </summary>\n        /// <remarks>This property is be public for the serialization.</remarks>\n        public Cv.Type OmnidirXisType { get; set; }\n\n        /// <summary>\n        /// The xi parameter values of the calibration. Equals to the <see cref=\"OmnidirXis\"/> content and automatically written when \n        /// <see cref=\"SaveToXmlFile(string)\"/> is called.\n        /// </summary>\n        /// <remarks>This property is be public for the serialization.</remarks>\n        public double[][][] OmnidirXisValues { get; set; }\n\n        /// <summary>\n        /// Parameters from possible stereo calibration on the camera system.\n        /// </summary>\n        public StereoArucoCameraParameters StereoCameraParameters { get; set; }\n\n        /// <summary>\n        /// The file path of the parameters.\n        /// </summary>\n        [XmlIgnore]\n        public string FilePath { get; protected set; }\n\n        // Variables\n\n        protected Cv.Mat[] cameraMatrices;\n\n        // Methods\n\n        /// <summary>\n        /// Create a new CameraParameters object from a previously saved camera parameters XML file.\n        /// </summary>\n        /// <param name=\"cameraParametersFilePath\">The file path to load.</param>\n        /// <exception cref=\"ArgumentException\">If the camera parameters couldn't be loaded because of a wrong file path.</exception>\n        /// <returns>The CameraParameters loaded from the XML file or null if the file coulnd't be loaded.</returns>\n        public static ArucoCameraParameters LoadFromXmlFile(string cameraParametersFilePath)\n        {\n            ArucoCameraParameters cameraParameters = null;\n\n            // Try to load the file and deserialize it\n            StreamReader reader = null;\n            try\n            {\n                reader = new StreamReader(cameraParametersFilePath);\n                XmlSerializer serializer = new XmlSerializer(typeof(ArucoCameraParameters));\n                cameraParameters = serializer.Deserialize(reader) as ArucoCameraParameters;\n            }\n            catch (Exception ex)\n            {\n                throw new ArgumentException(\"Couldn't load the camera parameters file path '\" + cameraParametersFilePath + \". \",\n                    \"cameraParametersFilePath\", ex);\n            }\n            finally\n            {\n                if (reader != null)\n                {\n                    reader.Close();\n                }\n            }\n            cameraParameters.FilePath = cameraParametersFilePath;\n\n            // Populate non-serialized properties\n            cameraParameters.CameraMatrices = CreateProperty(cameraParameters.CameraMatricesType, cameraParameters.CameraMatricesValues);\n            cameraParameters.DistCoeffs = CreateProperty(cameraParameters.DistCoeffsType, cameraParameters.DistCoeffsValues);\n            cameraParameters.OmnidirXis = CreateProperty(cameraParameters.OmnidirXisType, cameraParameters.OmnidirXisValues);\n\n            // Populate non-serialized properties of the stereo camera parameters\n            if (cameraParameters.StereoCameraParameters != null)\n            {\n                cameraParameters.StereoCameraParameters.UpdateNonSerializedProperties();\n            }\n\n            return cameraParameters;\n        }\n\n        /// <summary>\n        /// Save the camera parameters to a XML file.\n        /// </summary>\n        /// <param name=\"cameraParametersFilePath\">The file path where to save the object.</param>\n        /// <exception cref=\"ArgumentException\">If the camera parameters couldn't be saved because of a wrong file path.</exception>\n        public void SaveToXmlFile(string cameraParametersFilePath)\n        {\n            // Update CameraMatrixValues and CameraMatrixType\n            CameraMatricesType = CameraMatrices[0].Type();\n            UpdatePropertyValues(CameraMatrices, CameraMatricesValues);\n\n            // Update DistCoeffsValues and DistCoeffsType\n            DistCoeffsType = DistCoeffs[0].Type();\n            UpdatePropertyValues(DistCoeffs, DistCoeffsValues);\n\n            // Update OmnidirXisValues and OmnidirXisType\n            OmnidirXisType = OmnidirXis[0].Type();\n            UpdatePropertyValues(OmnidirXis, OmnidirXisValues);\n\n            // Update properties for serialization of the stereo camera parameters\n            if (StereoCameraParameters != null)\n            {\n                StereoCameraParameters.UpdateSerializedProperties();\n            }\n\n            // Try to serialize the object and save it to the file\n            StreamWriter writer = null;\n            try\n            {\n                writer = new StreamWriter(cameraParametersFilePath);\n                XmlSerializer serializer = new XmlSerializer(typeof(ArucoCameraParameters));\n                serializer.Serialize(writer, this);\n            }\n            catch\n            {\n                throw new ArgumentException(\"Couldn't save the camera parameters to the file path '\" + cameraParametersFilePath + \".\", \"cameraParametersFilePath\");\n            }\n            finally\n            {\n                if (writer != null)\n                {\n                    writer.Close();\n                }\n            }\n        }\n\n        /// <summary>\n        /// Update the <paramref name=\"propertyValues\"/> value from <paramref name=\"property\"/>.\n        /// </summary>\n        internal static void UpdatePropertyValues(Cv.Mat[] property, double[][][] propertyValues)\n        {\n            int cameraNumber = property.Length,\n                    rows = property[0].Rows,\n                    cols = property[0].Cols;\n\n            for (int cameraId = 0; cameraId < cameraNumber; cameraId++)\n            {\n                propertyValues[cameraId] = new double[rows][];\n                for (int i = 0; i < rows; i++)\n                {\n                    propertyValues[cameraId][i] = new double[cols];\n                    for (int j = 0; j < cols; j++)\n                    {\n                        propertyValues[cameraId][i][j] = property[cameraId].AtDouble(i, j);\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// Return a property created from a <paramref name=\"propertyType\"/> type and a array of values.\n        /// </summary>\n        /// <param name=\"propertyType\">The type of the property.</param>\n        /// <param name=\"propertyValues\">The content of the propery.</param>\n        /// <returns>The property</returns>\n        internal static Cv.Mat[] CreateProperty(Cv.Type propertyType, double[][][] propertyValues)\n        {\n            int cameraNumber = propertyValues.Length;\n\n            var property = new Cv.Mat[cameraNumber];\n            for (int cameraId = 0; cameraId < cameraNumber; cameraId++)\n            {\n                int rows = propertyValues[cameraId].Length,\n                        cols = (rows > 0) ? propertyValues[cameraId][0].Length : 0;\n                property[cameraId] = new Cv.Mat(rows, cols, propertyType);\n                for (int i = 0; i < rows; i++)\n                {\n                    for (int j = 0; j < cols; j++)\n                    {\n                        property[cameraId].AtDouble(i, j, propertyValues[cameraId][i][j]);\n                    }\n                }\n            }\n\n            return property;\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoCameraParameters.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 1ee443b0d14275d48a5578ced21edb2b\r\ntimeCreated: 1476928990\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoCameraParametersController.cs",
    "content": "﻿using System;\nusing System.IO;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras.Parameters\n{\n    /// <summary>\n    /// Editor controller for <see cref=\"CameraParameters\"/>.\n    /// </summary>\n    public class ArucoCameraParametersController : MonoBehaviour, IHasArucoCameraParameters\n    {\n        // Constants\n\n        /// <summary>\n        /// The folder where to load and save the <see cref=\"CameraParameters\"/> files, relative to\n        /// <see cref=\"Application.streamingAssetsPath\"/>.\n        /// </summary>\n        protected const string CameraParametersFolderPath = \"ArucoUnity\";\n\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"Automatically load the camera parameters file at start.\")]\n        private bool autoLoadFile = true;\n\n        [SerializeField]\n        [Tooltip(\"The xml file where to load and save the camera parameters, relative to Streaming Assets.\")]\n        private string cameraParametersFilename;\n\n        // IHasArucoCameraParameters properties\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"CameraParameters\"/>.\n        /// </summary>\n        public ArucoCameraParameters CameraParameters { get; set; }\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets if automatically <see cref=\"Load\"/> at <see cref=\"Awake\"/>.\n        /// </summary>\n        public bool AutoLoadFile { get { return autoLoadFile; } set { autoLoadFile = value; } }\n\n        /// <summary>\n        /// Gets or sets the xml file corresponding to the <see cref=\"CameraParameters\"/>, relative to <see cref=\"CameraParametersFolderPath\"/>.\n        /// </summary>\n        public string CameraParametersFilename { get { return cameraParametersFilename; } set { cameraParametersFilename = value; } }\n\n        // Variables\n\n        protected string cameraParametersPath;\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Calls <see cref=\"Load\"/> if <see cref=\"AutoLoadFile\"/> is <c>true</c>.\n        /// </summary>\n        protected virtual void Awake()\n        {\n            cameraParametersPath = Path.Combine(Application.streamingAssetsPath, CameraParametersFolderPath, cameraParametersFilename);\n\n            if (AutoLoadFile)\n            {\n                Load();\n            }\n        }\n\n        // Methods\n\n        /// <summary>\n        /// Initializes <see cref=\"CameraParameters\"/> with <see cref=\"ArucoCameraParameters.ArucoCameraParameters(int)\"/>\n        /// </summary>\n        /// <param name=\"cameraNumber\">The number of cameras in the calibrated camera system.</param>\n        public virtual void Initialize(int cameraNumber)\n        {\n            CameraParameters = new ArucoCameraParameters(cameraNumber);\n        }\n\n        /// <summary>\n        /// Initializes <see cref=\"CameraParameters\"/> with <see cref=\"ArucoCameraParameters.LoadFromXmlFile(string)\"/>.\n        /// </summary>\n        public virtual void Load()\n        {\n            CameraParameters = ArucoCameraParameters.LoadFromXmlFile(cameraParametersPath);\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"ArucoCameraParameters.SaveToXmlFile(string)\"/>. Creates before the\n        /// <see cref=\"CameraParametersFolderPath\"/> folder before if necessary.\n        /// </summary>\n        public virtual void Save()\n        {\n            if (!Directory.Exists(CameraParametersFolderPath))\n            {\n                Directory.CreateDirectory(CameraParametersFolderPath);\n            }\n            CameraParameters.SaveToXmlFile(cameraParametersPath);\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoCameraParametersController.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 840bd5ba574119a4480742f7e43829df\r\ntimeCreated: 1510782083\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoStereoCameraParameters.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing System;\nusing System.Xml.Serialization;\n\nnamespace ArucoUnity.Cameras.Parameters\n{\n    /// <summary>\n    /// Manages the camera parameters of a stereo camera calibration.\n    /// </summary>\n    [Serializable]\n    public class StereoArucoCameraParameters\n    {\n        // Const\n\n        public const int CameraNumber = 2;\n\n        // Constructors\n\n        /// <summary>\n        /// Creates an empty StereoCameraParameters.\n        /// </summary>\n        /// <remarks>This constructor is needed for the serialization.</remarks>\n        public StereoArucoCameraParameters()\n        {\n        }\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the stereo calibration flags used.\n        /// </summary>\n        public int CalibrationFlagsValue { get; set; }\n\n        /// <summary>\n        /// Gets or sets the rotation vector between the first and the second camera coordinate systems.\n        /// </summary>\n        /// <remarks>When <see cref=\"UpdateSerializedProperties\"/> is called, it's copied to the <see cref=\"RotationVectorValues\"/> property.</remarks>\n        [XmlIgnore]\n        public Cv.Vec3d RotationVector { get; set; }\n\n        /// <summary>\n        /// Gets or sets the rotation matrix values between the coordinate systems of the cameras. Equals to the <see cref=\"RotationVector\"/>\n        /// content and automatically written when <see cref=\"ArucoCameraParameters.SaveToXmlFile(string)\"/> is called.\n        /// </summary>\n        /// <remarks>This property is be public for the serialization.</remarks>\n        public double[] RotationVectorValues { get; set; }\n\n        /// <summary>\n        /// Gets or sets the translation vector between the coordinate systems of the cameras.\n        /// </summary>\n        /// <remarks>When <see cref=\"UpdateSerializedProperties\"/> is called, it's copied to the <see cref=\"TranslationVectorValues\"/>\n        /// property.</remarks>\n        [XmlIgnore]\n        public Cv.Vec3d TranslationVector { get; set; }\n\n        /// <summary>\n        /// Gets or sets the translation vector values between the coordinate systems of the cameras. Equals to the <see cref=\"TranslationVector\"/>\n        /// content and automatically written when <see cref=\"ArucoCameraParameters.SaveToXmlFile(string)\"/> is called.\n        /// </summary>\n        /// <remarks>This property is be public for the serialization.</remarks>\n        public double[] TranslationVectorValues { get; set; }\n\n        /// <summary>\n        /// Gets or sets the average re-projection error of the calibration.\n        /// </summary>\n        public double ReprojectionError { get; set; }\n\n        // Methods\n\n        /// <summary>\n        /// Updates the serialized properties from the non serialized properties.\n        /// </summary>\n        public void UpdateSerializedProperties()\n        {\n            RotationVectorValues = new double[3] { RotationVector.Get(0), RotationVector.Get(1), RotationVector.Get(2) };\n            TranslationVectorValues = new double[3] { TranslationVector.Get(0), TranslationVector.Get(1), TranslationVector.Get(2) };\n        }\n\n        /// <summary>\n        /// Initializes the non serialized properties from the serialized properties.\n        /// </summary>\n        public void UpdateNonSerializedProperties()\n        {\n            RotationVector = new Cv.Vec3d(RotationVectorValues[0], RotationVectorValues[1], RotationVectorValues[2]);\n            TranslationVector = new Cv.Vec3d(TranslationVectorValues[0], TranslationVectorValues[1], TranslationVectorValues[2]);\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Parameters/ArucoStereoCameraParameters.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 4c416e1b8c63a0e46ace6e4a9b44d9b8\r\ntimeCreated: 1491407298\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Parameters/IHasArucoCameraParameters.cs",
    "content": "﻿namespace ArucoUnity.Cameras.Parameters\n{\n    /// <summary>\n    /// Contains a <see cref=\"Parameters.ArucoCameraParameters\"/>.\n    /// </summary>\n    public interface IHasArucoCameraParameters\n    {\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the <see cref=\"IArucoCamera\"/> camera parameters.\n        /// </summary>\n        ArucoCameraParameters CameraParameters { get; set; }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Parameters/IHasArucoCameraParameters.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 48f0227fb683cf945864f898edd64296\r\ntimeCreated: 1511543026\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Parameters.meta",
    "content": "fileFormatVersion: 2\r\nguid: f59cd119a04bf78458877edfadd540b1\r\nfolderAsset: yes\r\ntimeCreated: 1491407271\r\nlicenseType: Pro\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/StereoArucoCamera.cs",
    "content": "﻿namespace ArucoUnity.Cameras\n{\n    /// <summary>\n    /// Captures images of stereo camera.\n    /// </summary>\n    public abstract class StereoArucoCamera : ArucoCamera\n    {\n        // Constants\n\n        public const int StereoCameraNumber = 2;\n\n        // IArucoCamera properties\n\n        public override int CameraNumber { get { return StereoCameraNumber; } }\n\n        // Properties\n\n        /// <summary>\n        /// Gets the id of the first camera.\n        /// </summary>\n        public static int CameraId1 { get { return 0; } }\n\n        /// <summary>\n        /// Gets the id of the second camera.\n        /// </summary>\n        public static int CameraId2 { get { return 1; } }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/StereoArucoCamera.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: ab4c5dd9ee281e34d901146f8c446c19\r\ntimeCreated: 1511204990\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/StereoArucoWebcam.cs",
    "content": "﻿using ArucoUnity.Utilities;\nusing System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras\n{\n    /// <summary>\n    /// Captures image of a stereoscopic webcam.\n    /// </summary>\n    public class StereoArucoWebcam : StereoArucoCamera\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The id of the first webcam to use.\")]\n        private int webcamId1;\n\n        [SerializeField]\n        [Tooltip(\"The id of the second webcam to use.\")]\n        private int webcamId2;\n\n        // IArucoCamera properties\n\n        public override string Name { get; protected set; }\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the id of the first webcam to use.\n        /// </summary>\n        public int WebcamId1 { get { return webcamId1; } set { webcamId1 = value; } }\n\n        /// <summary>\n        /// Gets or sets the id of the second webcam to use.\n        /// </summary>\n        public int WebcamId2 { get { return webcamId2; } set { webcamId2 = value; } }\n\n        /// <summary>\n        /// Gets the controller of the webcam to use.\n        /// </summary>\n        public WebcamController WebcamController { get; private set; }\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Initializes <see cref=\"WebcamController\"/> and subscribes to.\n        /// </summary>\n        protected override void Awake()\n        {\n            base.Awake();\n            WebcamController = gameObject.AddComponent<WebcamController>();\n            WebcamController.Started += WebcamController_Started;\n        }\n\n        /// <summary>\n        /// Unsubscribes to <see cref=\"WebcamController\"/>.\n        /// </summary>\n        protected override void OnDestroy()\n        {\n            base.OnDestroy();\n            WebcamController.Started -= WebcamController_Started;\n        }\n\n        // ConfigurableController methods\n\n        /// <summary>\n        /// Calls <see cref=\"WebcamController.Configure\"/> and sets <see cref=\"Name\"/>.\n        /// </summary>\n        protected override void Configuring()\n        {\n            base.Configuring();\n\n            WebcamController.Ids.Clear();\n            WebcamController.Ids.AddRange(new int[] { WebcamId1, WebcamId2 });\n            WebcamController.Configure();\n\n            Name = \"'\" + WebcamController.Devices[CameraId1].name + \"'+'\" + WebcamController.Devices[CameraId2].name + \"'\";\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"WebcamController.StartWebcams\"/>.\n        /// </summary>\n        protected override void Starting()\n        {\n            base.Starting();\n            WebcamController.StartWebcams();\n        }\n\n        /// <summary>\n        /// Blocks <see cref=\"ArucoCamera.OnStarted\"/> until <see cref=\"WebcamController.IsStarted\"/>.\n        /// </summary>\n        protected override void OnStarted()\n        {\n        }\n\n        // ArucoCamera methods\n\n        /// <summary>\n        /// Copy current webcam images to <see cref=\"ArucoCamera.NextImages\"/>.\n        /// </summary>\n        protected override bool UpdatingImages()\n        {\n            for (int cameraId = 0; cameraId < CameraNumber; cameraId++)\n            {\n                Array.Copy(WebcamController.Textures2D[cameraId].GetRawTextureData(), NextImageDatas[cameraId], ImageDataSizes[cameraId]);\n            }\n            return true;\n        }\n\n        // Methods\n\n        /// <summary>\n        /// Configures <see cref=\"ArucoCamera.Textures\"/> and calls <see cref=\"ArucoCamera.OnStarted\"/>.\n        /// </summary>\n        protected virtual void WebcamController_Started(WebcamController webcamController)\n        {\n            for (int cameraId = 0; cameraId < CameraNumber; cameraId++)\n            {\n                var webcamTexture = WebcamController.Textures2D[cameraId];\n                Textures[cameraId] = new Texture2D(webcamTexture.width, webcamTexture.height, webcamTexture.format, false);\n            }\n            base.OnStarted();\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/StereoArucoWebcam.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: c82860b96c21f994bad617778c197a4b\r\ntimeCreated: 1511208240\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/ArucoCameraUndistortion.cs",
    "content": "﻿using ArucoUnity.Cameras.Parameters;\nusing ArucoUnity.Plugin;\nusing UnityEngine;\nusing System;\nusing ArucoUnity.Utilities;\n\nnamespace ArucoUnity.Cameras.Undistortions\n{\n    /// <summary>\n    /// Manages the processes of undistortion and rectification of <see cref=\"ArucoCamera.Images\"/>. It's a time-consuming\n    /// operation but it's necessary for cameras with an important distorsion for a good alignement of the images with\n    /// the 3D content. Base class to reference in editor fields.\n    /// </summary>\n    public abstract class ArucoCameraUndistortion : ArucoCameraController, IArucoCameraUndistortion\n    {\n        // Constants\n\n        public const int undistortionCameraMapsNumber = 2;\n\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The camera parameters associated with the ArucoCamera.\")]\n        private ArucoCameraParametersController CameraParametersController;\n\n        // IArucoCameraUndistortion properties\n\n        public ArucoCameraParameters CameraParameters { get; set; }\n        public Cv.Mat[] RectifiedCameraMatrices { get; protected set; }\n        public Cv.Mat[] RectificationMatrices { get; protected set; }\n        public Cv.Mat[] UndistortedDistCoeffs { get; private set; }\n        public Cv.Mat[][] UndistortionRectificationMaps { get; protected set; }\n\n        // Variables\n\n        protected Cv.Mat noRectificationMatrix = new Cv.Mat();\n        protected Cv.Mat noDistCoeffs = new Cv.Mat();\n        protected Cv.Rect noROI = new Cv.Rect();\n        protected string CameraParametersFilePath;\n        protected ArucoCameraSeparateThread remapThread;\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Initializes the properties.\n        /// </summary>\n        protected override void Start()\n        {\n            if (CameraParameters == null && CameraParametersController != null)\n            {\n                CameraParameters = CameraParametersController.CameraParameters;\n            }\n\n            base.Start();\n        }\n\n        // ConfigurableController methods\n\n        /// <summary>\n        /// Initializes the properties from <see cref=\"CameraParameters\"/>.\n        /// </summary>\n        protected override void Configuring()\n        {\n            base.Configuring();\n\n            if (CameraParameters == null)\n            {\n                throw new ArgumentNullException(\"CameraParameters\", \"This property needs to be set for the configuration.\");\n            }\n            if (CameraParameters.CameraNumber != ArucoCamera.CameraNumber)\n            {\n                throw new Exception(\"The number of cameras in CameraParameters must be equal to the number of cameras in ArucoCamera\");\n            }\n\n            RectifiedCameraMatrices = new Cv.Mat[CameraParameters.CameraNumber];\n            RectificationMatrices = new Cv.Mat[CameraParameters.CameraNumber];\n            UndistortedDistCoeffs = new Cv.Mat[CameraParameters.CameraNumber];\n            UndistortionRectificationMaps = new Cv.Mat[CameraParameters.CameraNumber][];\n            for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++)\n            {\n                UndistortedDistCoeffs[cameraId] = noDistCoeffs;\n                UndistortionRectificationMaps[cameraId] = new Cv.Mat[undistortionCameraMapsNumber];\n            }\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"InitializeRectification\"/> and <see cref=\"InitializeUndistortionMaps\"/> and susbcribes to\n        /// <see cref=\"ArucoCamera.UndistortRectifyImages\"/>.\n        /// </summary>\n        protected override void Starting()\n        {\n            base.Starting();\n\n            InitializeRectification();\n            InitializeUndistortionMaps();\n\n            ArucoCamera.UndistortRectifyImages += ArucoCamera_UndistortRectifyImages;\n            remapThread = new ArucoCameraSeparateThread(ArucoCamera, UndistortRectifyImages) { CopyBackImages = true };\n            remapThread.Start();\n        }\n\n        /// <summary>\n        /// Unsusbcribes from <see cref=\"ArucoCamera.UndistortRectifyImages\"/>.\n        /// </summary>\n        protected override void Stopping()\n        {\n            base.Stopping();\n            remapThread.Stop();\n            ArucoCamera.UndistortRectifyImages -= ArucoCamera_UndistortRectifyImages;\n        }\n\n        // Methods\n\n        /// <summary>\n        /// Updates the undistortion thread with the <paramref name=\"images\"/> and stops if there was an exception from this thread.\n        /// </summary>\n        protected virtual void ArucoCamera_UndistortRectifyImages(Cv.Mat[] images, byte[][] imageDatas)\n        {\n            try\n            {\n                remapThread.Update(imageDatas);\n            }\n            catch (Exception e)\n            {\n                StopController();\n                throw e;\n            }\n        }\n\n        /// <summary>\n        /// Undistorts and rectifies the <paramref name=\"images\"/> using <see cref=\"UndistortionRectificationMaps\"/> on a separate thread.\n        /// </summary>\n        protected virtual void UndistortRectifyImages(Cv.Mat[] images)\n        {\n            for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++)\n            {\n                Cv.Remap(images[cameraId], images[cameraId], UndistortionRectificationMaps[cameraId][0],\n                    UndistortionRectificationMaps[cameraId][1], Cv.InterpolationFlags.Linear);\n            }\n        }\n\n        /// <summary>\n        /// Initializes the <see cref=\"RectificationMatrices\"/> of each camera image.\n        /// </summary>\n        protected abstract void InitializeRectification();\n\n        /// <summary>\n        /// Initializes the <see cref=\"UndistortionRectificationMaps\"/> of each camera image.\n        /// </summary>\n        protected abstract void InitializeUndistortionMaps();\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/ArucoCameraUndistortion.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 81ba459c3933f8b44b4919b64953b03f\r\ntimeCreated: 1510602529\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/ArucoCameraUndistortionGeneric.cs",
    "content": "﻿using UnityEngine;\n\nnamespace ArucoUnity.Cameras.Undistortions\n{\n    /// <summary>\n    /// Manages the processes of undistortion and rectification of <see cref=\"ArucoCamera.Images\"/>. Generic class to\n    /// inherit, not the base class.\n    /// </summary>\n    public abstract class ArucoCameraUndistortionGeneric<T> : ArucoCameraUndistortion, IArucoCameraUndistortion\n        where T : ArucoCamera\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The camera to use.\")]\n        private T arucoCamera;\n\n        // MonoBehaviour properties\n\n        /// <summary>\n        /// Sets <see cref=\"ArucoCameraController.ArucoCamera\"/> with editor field if not null.\n        /// </summary>\n        protected override void Awake()\n        {\n            base.Awake();\n            if (arucoCamera != null)\n            {\n                ArucoCamera = arucoCamera;\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/ArucoCameraUndistortionGeneric.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: b325fda4007f4d649a5b8025cbf2f6ad\r\ntimeCreated: 1525414217\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/IArucoCameraUndistortion.cs",
    "content": "﻿using ArucoUnity.Cameras.Parameters;\nusing ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Cameras.Undistortions\n{\n    /// <summary>\n    /// Manages the processes of undistortion and rectification of <see cref=\"IArucoCamera.Images\"/>.\n    /// </summary>\n    public interface IArucoCameraUndistortion : IArucoCameraController, IHasArucoCameraParameters\n    {\n        // Properties\n\n        /// <summary>\n        /// Gets the new camera matrices of the undistorted and rectified images of each camera.\n        /// </summary>\n        Cv.Mat[] RectifiedCameraMatrices { get; }\n\n        /// <summary>\n        /// Gets the rectification rotation matrices of each camera to make both camera image planes the same plane, in\n        /// case of a stereo camera.\n        /// </summary>\n        Cv.Mat[] RectificationMatrices { get; }\n\n        /// <summary>\n        /// Gets the distorsion coefficients of the undistorted and rectified images of each camera.\n        /// </summary>\n        Cv.Mat[] UndistortedDistCoeffs { get; }\n\n        /// <summary>\n        /// Gets the undistortion and rectification images transformation map of each camera (two maps per camera).\n        /// </summary>\n        Cv.Mat[][] UndistortionRectificationMaps { get; }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/IArucoCameraUndistortion.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 503496346a1fac84c9bac4583d44aed1\r\ntimeCreated: 1511474987\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/OmnidirCameraUndistortion.cs",
    "content": "﻿namespace ArucoUnity.Cameras.Undistortions\n{\n  /// <summary>\n  /// Manages the undistortion and rectification process for fisheye and omnidir <see cref=\"ArucoCamera\"/>.\n  /// </summary>\n  public class OmnidirCameraUndistortion : OmnidirCameraUndistortionGeneric<ArucoCamera>\n  {\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/OmnidirCameraUndistortion.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 6bb848ecd8f05544e9393e5735213780\r\ntimeCreated: 1511490576\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/OmnidirCameraUndistortionGeneric.cs",
    "content": "﻿using ArucoUnity.Cameras.Parameters;\nusing ArucoUnity.Plugin;\nusing System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras.Undistortions\n{\n  /// <summary>\n  /// Manages the undistortion and rectification process for fisheye and omnidir <see cref=\"ArucoCamera\"/>.\n  /// \n  /// See the OpenCV's ccalib module documentation for more information:\n  /// http://docs.opencv.org/3.4/dd/d12/tutorial_omnidir_calib_main.html\n  /// </summary>\n  public abstract class OmnidirCameraUndistortionGeneric<T> : ArucoCameraUndistortionGeneric<T>\n    where T : ArucoCamera\n  {\n    /// <summary>\n    /// The different algorithms to use for the undistortion of the images.\n    /// </summary>\n    public enum RectificationTypes\n    {\n      Perspective,\n      Cylindrical,\n      LongitudeLatitude,\n      Stereographic\n    }\n\n    // Constants\n\n    protected const float minPerspectiveFov = 1f;\n    protected const float maxPerspectiveFov = 179f;\n\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"The algorithm to use for the recitification of the images.\")]\n    private RectificationTypes rectificationType = RectificationTypes.Perspective;\n\n    [SerializeField]\n    [Tooltip(\"The desired field of view for the Unity cameras shooting the undistorted and rectified images.\")]\n    [Range(1f, 179f)]\n    private float[] perspectiveFieldOfViews;\n\n    // Properties\n\n    /// <summary>\n    /// Gets or sets the algorithm to use for the rectification of the images. See this tutorial for illustrated examples:\n    /// https://docs.opencv.org/3.4/dd/d12/tutorial_omnidir_calib_main.html\n    /// </summary>\n    public RectificationTypes RectificationType { get { return rectificationType; } set { rectificationType = value; } }\n\n    /// <summary>\n    /// Gets or sets the desired field of view for the Unity cameras shooting the undistorted and rectified images.\n    /// </summary>\n    public float[] PerspectiveFieldOfViews { get { return perspectiveFieldOfViews; } set { perspectiveFieldOfViews = value; } }\n\n    // Variables\n\n    protected Dictionary<RectificationTypes, Cv.Omnidir.Rectifify> rectifyFlags = new Dictionary<RectificationTypes, Cv.Omnidir.Rectifify>()\n      {\n        { RectificationTypes.Perspective,       Cv.Omnidir.Rectifify.Perspective },\n        { RectificationTypes.Cylindrical,       Cv.Omnidir.Rectifify.Cylindrical },\n        { RectificationTypes.LongitudeLatitude, Cv.Omnidir.Rectifify.Longlati },\n        { RectificationTypes.Stereographic,     Cv.Omnidir.Rectifify.Stereographic }\n      };\n\n    // MonoBehaviour methods\n\n    /// <summary>\n    /// Resizes the length of the <see cref=\"perspectiveFieldOfViews\"/> editor field to <see cref=\"ArucoCamera.CameraNumber\"/> if different.\n    /// </summary>\n    protected virtual void OnValidate()\n    {\n      if (ArucoCamera != null && perspectiveFieldOfViews != null && perspectiveFieldOfViews.Length != ArucoCamera.CameraNumber)\n      {\n        Array.Resize(ref perspectiveFieldOfViews, ArucoCamera.CameraNumber);\n      }\n    }\n\n    // ConfigurableController methods\n\n    /// <summary>\n    /// Throw exception if <see cref=\"PerspectiveFieldOfViews\"/> length is different than <see cref=\"ArucoCamera.CameraNumber\"/>.\n    /// </summary>\n    protected override void Configuring()\n    {\n      base.Configuring();\n      if (PerspectiveFieldOfViews.Length != ArucoCamera.CameraNumber)\n      {\n        throw new Exception(\"The number of cameras for the perspective desired field of view must be equal to the number of cameras in\" +\n          \"ArucoCamera\");\n      }\n    }\n\n    // ArucoCameraUndistortion methods\n\n    /// <summary>\n    /// Initializes the <see cref=\"RectifiedCameraMatrices\"/> using the <see cref=\"PerspectiveFieldOfViews\"/> values for perspective rectification\n    /// or uses the recommended values: https://docs.opencv.org/3.3.1/dd/d12/tutorial_omnidir_calib_main.html. Initializes the\n    /// <see cref=\"RectificationMatrices\"/> to identity matrix.\n    /// </summary>\n    protected override void InitializeRectification()\n    {\n      for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++)\n      {\n        float imageWidth = CameraParameters.ImageWidths[cameraId];\n        float imageHeight = CameraParameters.ImageHeights[cameraId];\n\n        if (RectificationType == RectificationTypes.Perspective)\n        {\n          float cameraFocalLength = imageHeight / (2f * Mathf.Tan(0.5f * PerspectiveFieldOfViews[cameraId] * Mathf.Deg2Rad));\n          RectifiedCameraMatrices[cameraId] = new Cv.Mat(3, 3, Cv.Type.CV_64F, new double[9] {\n              cameraFocalLength, 0, imageWidth / 2,\n              0, cameraFocalLength, imageHeight / 2,\n              0, 0, 1\n            }).Clone();\n        }\n        else\n        {\n          // Uses the camera matrix recommended values: https://docs.opencv.org/3.3.1/dd/d12/tutorial_omnidir_calib_main.html\n          RectifiedCameraMatrices[cameraId] = new Cv.Mat(3, 3, Cv.Type.CV_64F, new double[9] {\n              imageWidth / 3.1415, 0, 0,\n              0, imageHeight / 3.1415, 0,\n              0, 0, 1\n            }).Clone();\n        }\n\n        RectificationMatrices[cameraId] = noRectificationMatrix;\n      }\n    }\n\n    protected override void InitializeUndistortionMaps()\n    {\n      for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++)\n      {\n        Cv.Omnidir.InitUndistortRectifyMap(CameraParameters.CameraMatrices[cameraId], CameraParameters.DistCoeffs[cameraId],\n          CameraParameters.OmnidirXis[cameraId], RectificationMatrices[cameraId], RectifiedCameraMatrices[cameraId],\n          ArucoCamera.Images[cameraId].Size, Cv.Type.CV_16SC2, out UndistortionRectificationMaps[cameraId][0],\n          out UndistortionRectificationMaps[cameraId][1], rectifyFlags[RectificationType]);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/OmnidirCameraUndistortionGeneric.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 7e60ddc119b9d1c4785ec16ecef3fc6b\r\ntimeCreated: 1510603602\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/StereoOmnidirCameraUndistortion.cs",
    "content": "﻿using ArucoUnity.Cameras.Parameters;\nusing ArucoUnity.Plugin;\nusing System;\n\nnamespace ArucoUnity.Cameras.Undistortions\n{\n  /// <summary>\n  /// Manages the undistortion and rectification process for fisheye and omnidir <see cref=\"StereoArucoCamera\"/>.\n  /// </summary>\n  public class StereoOmnidirCameraUndistortion : OmnidirCameraUndistortionGeneric<StereoArucoCamera>\n  {\n    // Variables\n\n    StereoArucoCameraParameters stereoCameraParameters;\n\n    // ConfigurableController methods\n\n    protected override void Configuring()\n    {\n      base.Configuring();\n\n      stereoCameraParameters = CameraParameters.StereoCameraParameters;\n      if (stereoCameraParameters == null)\n      {\n        throw new Exception(\"The camera parameters must contains a valid StereoCameraParameters to undistort and\" +\n          \" rectify a StereoArucoCamera.\");\n      }\n    }\n\n    // ArucoCameraUndistortion methods\n\n    /// <summary>\n    /// Initializes <see cref=\"RectificationMatrices\"/> with the stereo camera parameters.\n    /// </summary>\n    protected override void InitializeRectification()\n    {\n      base.InitializeRectification();\n\n      Cv.Omnidir.StereoRectify(stereoCameraParameters.RotationVector, stereoCameraParameters.TranslationVector,\n        out RectificationMatrices[StereoArucoCamera.CameraId1], out RectificationMatrices[StereoArucoCamera.CameraId2]);\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir/StereoOmnidirCameraUndistortion.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 5dae30005f935a247b8bc82e262d5ab5\r\ntimeCreated: 1511490588\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Omnidir.meta",
    "content": "fileFormatVersion: 2\r\nguid: 256380e4daa35074992ab9a06ce24ac1\r\nfolderAsset: yes\r\ntimeCreated: 1511490259\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/PinholeCameraUndistortion.cs",
    "content": "﻿using ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Cameras.Undistortions\n{\n  /// <summary>\n  /// Manages the undistortion and rectification process for pinhole <see cref=\"ArucoCamera\"/>.\n  /// </summary>\n  public class PinholeCameraUndistortion : PinholeCameraUndistortionGeneric<ArucoCamera>\n  {\n    // ArucoCameraUndistortion methods\n\n    protected override void InitializeRectification()\n    {\n      for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++)\n      {\n        RectifiedCameraMatrices[cameraId] = Cv.GetOptimalNewCameraMatrix(CameraParameters.CameraMatrices[cameraId],\n          CameraParameters.DistCoeffs[cameraId], ArucoCamera.Images[cameraId].Size, RectificationScalingFactor,\n          ArucoCamera.Images[cameraId].Size, noROI, centerPrincipalPoint: true);\n        RectificationMatrices[cameraId] = noRectificationMatrix;\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/PinholeCameraUndistortion.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: e044568ea72405e49bf56df52f9d2b57\r\ntimeCreated: 1510603613\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/PinholeCameraUndistortionGeneric.cs",
    "content": "﻿using ArucoUnity.Cameras.Parameters;\nusing ArucoUnity.Plugin;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras.Undistortions\n{\n  /// <summary>\n  /// Manages the undistortion and rectification process for pinhole cameras.\n  /// \n  /// See the OpenCV's calibd module documentation for more information:\n  /// http://docs.opencv.org/3.4/d9/d0c/group__calib3d.html\n  /// </summary>\n  public abstract class PinholeCameraUndistortionGeneric<T> : ArucoCameraUndistortionGeneric<T>\n    where T : ArucoCamera\n  {\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"Scaling factor (alpha coefficient) between 0 and 1: 0 to zoom the images so that only valid pixels are visible (no black areas\" +\n      \" after rectification), 1 to shift the images so that no source image pixels are lost. Applied both on mono and stereo cameras.\")]\n    [Range(0, 1)]\n    private float rectificationScalingFactor = 1;\n\n    // Properties\n\n    /// <summary>\n    /// Gets or sets the scaling factor (alpha coefficient) between 0 and 1: 0 to zoom the images so that only valid pixels are visible (no black\n    /// areas after rectification), 1 to shift the images so that no source image pixels are lost. Applied both on mono and stereo cameras.\n    /// </summary>\n    public float RectificationScalingFactor { get { return rectificationScalingFactor; } set { rectificationScalingFactor = value; } }\n\n    // ArucoCameraUndistortion methods\n\n    protected override void InitializeUndistortionMaps()\n    {\n      for (int cameraId = 0; cameraId < CameraParameters.CameraNumber; cameraId++)\n      {\n        Cv.InitUndistortRectifyMap(CameraParameters.CameraMatrices[cameraId], CameraParameters.DistCoeffs[cameraId],\n          RectificationMatrices[cameraId], RectifiedCameraMatrices[cameraId], ArucoCamera.Images[cameraId].Size, Cv.Type.CV_16SC2,\n          out UndistortionRectificationMaps[cameraId][0], out UndistortionRectificationMaps[cameraId][1]);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/PinholeCameraUndistortionGeneric.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: eb8072188d590ce47b56a21ea1068dee\r\ntimeCreated: 1511490288\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/StereoPinholeCameraUndistortion.cs",
    "content": "﻿using ArucoUnity.Cameras.Parameters;\nusing ArucoUnity.Plugin;\nusing System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Cameras.Undistortions\n{\n  /// <summary>\n  /// Manages the undistortion and rectification process for pinhole <see cref=\"StereoArucoCamera\"/>.\n  /// </summary>\n  public class StereoPinholeCameraUndistortion : PinholeCameraUndistortionGeneric<StereoArucoCamera>\n  {\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"If true (default), the principal points of the images have the same pixel coordinates in the rectified views. Only applied if\" +\n      \"using a stereo camera.\")]\n    private bool rectificationZeroDisparity = true;\n\n    // Properties\n\n    /// <summary>\n    /// Gets or sets if the principal point of the images have the same pixel coordinates in the rectified views (true by default). Only applied if\n    /// using a stereo camera.\n    /// </summary>\n    public bool RectificationZeroDisparity { get { return rectificationZeroDisparity; } set { rectificationZeroDisparity = value; } }\n\n    // Variables\n\n    StereoArucoCameraParameters stereoCameraParameters;\n\n    // ConfigurableController methods\n\n    protected override void Configuring()\n    {\n      base.Configuring();\n\n      stereoCameraParameters = CameraParameters.StereoCameraParameters;\n      if (stereoCameraParameters == null)\n      {\n        throw new Exception(\"The camera parameters must contains a valid StereoCameraParameters to undistort and rectify a StereoArucoCamera.\");\n      }\n    }\n\n    // ArucoCameraUndistortion methods\n\n    protected override void InitializeRectification()\n    {\n      int cameraId1 = StereoArucoCamera.CameraId1;\n      int cameraId2 = StereoArucoCamera.CameraId2;\n\n      Cv.Mat rotationMatrix, rectificationMatrix1, rectificationMatrix2, newCameraMatrix1, newCameraMatrix2, disparityMatrix;\n      Cv.StereoRectifyFlags stereoRectifyFlags = RectificationZeroDisparity ? Cv.StereoRectifyFlags.ZeroDisparity : 0;\n\n      Cv.Rodrigues(stereoCameraParameters.RotationVector, out rotationMatrix);\n      Cv.StereoRectify(CameraParameters.CameraMatrices[cameraId1], CameraParameters.DistCoeffs[cameraId1],\n        CameraParameters.CameraMatrices[cameraId2], CameraParameters.DistCoeffs[cameraId2], ArucoCamera.Images[cameraId1].Size, rotationMatrix,\n        stereoCameraParameters.TranslationVector, out rectificationMatrix1, out rectificationMatrix2, out newCameraMatrix1, out newCameraMatrix2,\n        out disparityMatrix, stereoRectifyFlags, RectificationScalingFactor);\n\n      RectifiedCameraMatrices[cameraId1] = newCameraMatrix1;\n      RectifiedCameraMatrices[cameraId2] = newCameraMatrix2;\n      RectificationMatrices[cameraId1] = rectificationMatrix1;\n      RectificationMatrices[cameraId2] = rectificationMatrix2;\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole/StereoPinholeCameraUndistortion.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 41d0d6a753fcd62488e22edc074f8ac1\r\ntimeCreated: 1511489638\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions/Pinhole.meta",
    "content": "fileFormatVersion: 2\r\nguid: 676a554959a49da44b4d3084e8559adb\r\nfolderAsset: yes\r\ntimeCreated: 1511490254\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras/Undistortions.meta",
    "content": "fileFormatVersion: 2\r\nguid: 7e65fcdd22509254098fcc3f32db4f32\r\nfolderAsset: yes\r\ntimeCreated: 1510714715\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Cameras.meta",
    "content": "fileFormatVersion: 2\r\nguid: dba05ac3d122ff446becba0754ef3577\r\nfolderAsset: yes\r\ntimeCreated: 1488568324\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Controller.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace ArucoUnity\n{\n    /// <summary>\n    /// Configurable and startable controller.\n    /// </summary>\n    /// <remarks>\n    /// It can have other configurable controllers as dependencies. They must have started before starting this\n    /// controller. They stop this controller when one of them stops.\n    /// </remarks>\n    public abstract class Controller : MonoBehaviour, IController\n    {\n        [SerializeField]\n        [Tooltip(\"Start automatically when the configuration is done. Call alternatively StartController().\")]\n        private bool autoStart = true;\n\n        /// <summary>\n        /// Called when the controller is configured.\n        /// </summary>\n        public event EventHandler Configured = delegate { };\n\n        /// <summary>\n        /// Called when the controller is configured and ready to be started, when all its dependencies started.\n        /// </summary>\n        public event EventHandler Ready = delegate { };\n\n        /// <summary>\n        /// Called when the controller is started.\n        /// </summary>\n        public event EventHandler Started = delegate { };\n\n        /// <summary>\n        /// Called when the controller is stopped.\n        /// </summary>\n        public event EventHandler Stopped = delegate { };\n\n        /// <summary>\n        /// Gets or sets if configuring and starting automatically when when all dependencies started. Manually\n        /// configure and start by calling <see cref=\"Configure\"/> and <see cref=\"StartController\"/>.\n        /// </summary>\n        public bool AutoStart { get { return autoStart; } set { SetAutoStart(value); } }\n\n        /// <summary>\n        /// Gets if the controller is configured.\n        /// </summary>\n        public bool IsConfigured { get; private set; }\n\n        /// <summary>\n        /// Gets if the controller is ready to be started when all dependencies have started.\n        /// </summary>\n        public bool IsReady { get; private set; }\n\n        /// <summary>\n        /// Gets if the controller is started.\n        /// </summary>\n        public bool IsStarted { get; private set; }\n\n        private HashSet<IController> dependencies = new HashSet<IController>();\n        private HashSet<IController> stoppedDependencies = new HashSet<IController>();\n\n        /// <summary>\n        /// Initializes the properties.\n        /// </summary>\n        protected virtual void Awake()\n        {\n            IsConfigured = false;\n            IsStarted = false;\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"SetAutoStart(bool)\"/>.\n        /// </summary>\n        protected virtual void Start()\n        {\n            SetAutoStart(AutoStart);\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"StopController\"/> if it has been configured and started.\n        /// </summary>\n        protected virtual void OnDestroy()\n        {\n            if (IsStarted)\n            {\n                StopController();\n            }\n        }\n\n        /// <summary>\n        /// Add a new dependency. The controller must be stopped.\n        /// </summary>\n        /// <param name=\"dependency\">The dependency to add.</param>\n        public void AddDependency(IController dependency)\n        {\n            if (IsStarted)\n            {\n                throw new Exception(\"Stop the controller before updating the dependencies.\");\n            }\n\n            dependencies.Add(dependency);\n            if (!dependency.IsStarted)\n            {\n                stoppedDependencies.Add(dependency);\n            }\n\n            dependency.Started += DependencyStarted;\n            dependency.Stopped += DependencyStopped;\n        }\n\n        /// <summary>\n        /// Remove a dependency. The controller must be stopped.\n        /// </summary>\n        /// <param name=\"dependency\">The dependency to remove.</param>\n        public void RemoveDependency(IController dependency)\n        {\n            if (IsStarted)\n            {\n                throw new Exception(\"Stop the controller before updating the dependencies.\");\n            }\n\n            dependencies.Remove(dependency);\n            stoppedDependencies.Remove(dependency);\n\n            dependency.Started -= DependencyStarted;\n            dependency.Stopped -= DependencyStopped;\n        }\n\n        /// <summary>\n        /// Gets the list of the dependencies.\n        /// </summary>\n        /// <returns>The list of the dependencies of this instance.</returns>\n        public List<IController> GetDependencies()\n        {\n            return new List<IController>(dependencies);\n        }\n\n        /// <summary>\n        /// Configures the controller and calls the <see cref=\"Configured\"/> event. Properties must be set and the\n        /// controller must be stopped.\n        /// </summary>\n        public void Configure()\n        {\n            if (IsStarted)\n            {\n                throw new Exception(\"Stop the controller before configure it.\");\n            }\n\n            IsConfigured = false;\n            IsReady = false;\n\n            Configuring();\n            OnConfigured();\n        }\n\n        /// <summary>\n        /// Starts the controller and calls the <see cref=\"Started\"/> event. The controller must be configured, ready and\n        /// stopped.\n        /// </summary>\n        public void StartController()\n        {\n            if (!IsConfigured || !IsReady || IsStarted)\n            {\n                throw new Exception(\"Configure and stop the controller before start it.\");\n            }\n\n            Starting();\n            OnStarted();\n        }\n\n        /// <summary>\n        /// Stops the controller and calls the <see cref=\"Stopped\"/> event. The controller must be configured and started.\n        /// </summary>\n        public void StopController()\n        {\n            if (!IsConfigured || !IsStarted)\n            {\n                throw new Exception(\"Configure and start the controller before stop it.\");\n            }\n\n            Stopping();\n            OnStopped();\n        }\n\n        protected virtual void Configuring()\n        {\n        }\n\n        /// <summary>\n        /// Sets <see cref=\"IsConfigured\"/> to true, calls <see cref=\"Configured\"/> and if all dependencies started calls\n        /// <see cref=\"OnReady\"/>.\n        /// </summary>\n        protected virtual void OnConfigured()\n        {\n            IsConfigured = true;\n            Configured(this, EventArgs.Empty);\n\n            if (stoppedDependencies.Count == 0)\n            {\n                OnReady();\n            }\n        }\n\n        protected virtual void Starting()\n        {\n        }\n\n        /// <summary>\n        /// Sets <see cref=\"IsStarted\"/> to true and calls <see cref=\"Started\"/>.\n        /// </summary>\n        protected virtual void OnStarted()\n        {\n            IsStarted = true;\n            Started(this, EventArgs.Empty);\n        }\n\n        protected virtual void Stopping()\n        {\n        }\n\n        /// <summary>\n        /// Sets <see cref=\"IsStarted\"/> to false and calls <see cref=\"Stopped\"/>.\n        /// </summary>\n        protected virtual void OnStopped()\n        {\n            IsStarted = false;\n            Stopped(this, EventArgs.Empty);\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"Configure\"/> if <see cref=\"AutoStart\"/> is true.\n        /// </summary>\n        private void SetAutoStart(bool value)\n        {\n            autoStart = value;\n            if (AutoStart)\n            {\n                Configure();\n            }\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"OnReady\"/> if the controller is configured and all the dependencies are started.\n        /// </summary>\n        private void DependencyStarted(object sender, EventArgs e)\n        {\n            var dependency = (IController)sender;\n            stoppedDependencies.Remove(dependency);\n\n            if (IsConfigured && stoppedDependencies.Count == 0)\n            {\n                OnReady();\n            }\n        }\n\n        /// <summary>\n        /// Calls <see cref=\"StopController\"/> if the controller is started.\n        /// </summary>\n        private void DependencyStopped(object sender, EventArgs e)\n        {\n            var dependency = (IController)sender;\n            stoppedDependencies.Add(dependency);\n\n            if (IsStarted)\n            {\n                StopController();\n            }\n        }\n\n        /// <summary>\n        /// Calls the <see cref=\"Ready\"/> event, and calls <see cref=\"StartController\"/> if <see cref=\"AutoStart\"/> is true.\n        /// </summary>\n        private void OnReady()\n        {\n            IsReady = true;\n            Ready(this, EventArgs.Empty);\n\n            if (AutoStart)\n            {\n                StartController();\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Controller.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: aeb2c6c744fa71b40abda28d4a9896dd\r\ntimeCreated: 1511886478\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/IController.cs",
    "content": "﻿using System;\nusing System.Collections.Generic;\n\nnamespace ArucoUnity\n{\n    /// <summary>\n    /// Configurable and startable controller.\n    /// </summary>\n    /// <remarks>\n    /// It can have other configurable controllers as dependencies. They must have started before starting this\n    /// controller. They stop this controller when one of them stops.\n    /// </remarks>\n    public interface IController\n    {\n        /// <summary>\n        /// Called when the controller is configured.\n        /// </summary>\n        event EventHandler Configured;\n\n        /// <summary>\n        /// Called when the controller is configured and ready to be started, when all its dependencies started.\n        /// </summary>\n        event EventHandler Ready;\n\n        /// <summary>\n        /// Called when the controller is started.\n        /// </summary>\n        event EventHandler Started;\n\n        /// <summary>\n        /// Called when the controller is stopped.\n        /// </summary>\n        event EventHandler Stopped;\n\n        /// <summary>\n        /// Gets or sets if configuring and starting automatically when when all dependencies started. Manually\n        /// configure and start by calling <see cref=\"Configure\"/> and <see cref=\"StartController\"/>.\n        /// </summary>\n        bool AutoStart { get; set; }\n\n        /// <summary>\n        /// Gets if the controller is configured.\n        /// </summary>\n        bool IsConfigured { get; }\n\n        /// <summary>\n        /// Gets if the controller is ready to be started when all dependencies have started.\n        /// </summary>\n        bool IsReady { get; }\n\n        /// <summary>\n        /// Gets if the controller is started.\n        /// </summary>\n        bool IsStarted { get; }\n\n        /// <summary>\n        /// Add a new dependency. The controller must be stopped.\n        /// </summary>\n        /// <param name=\"dependency\">The dependency to add.</param>\n        void AddDependency(IController dependency);\n\n        /// <summary>\n        /// Remove a dependency. The controller must be stopped.\n        /// </summary>\n        /// <param name=\"dependency\">The dependency to remove.</param>\n        void RemoveDependency(IController dependency);\n\n        /// <summary>\n        /// Gets the list of the dependencies.\n        /// </summary>\n        /// <returns>The list of the dependencies of this instance.</returns>\n        List<IController> GetDependencies();\n\n        /// <summary>\n        /// Configures the controller and calls the <see cref=\"Configured\"/> event. Properties must be set and the\n        /// controller must be stopped.\n        /// </summary>\n        void Configure();\n\n        /// <summary>\n        /// Starts the controller and calls the <see cref=\"Started\"/> event. The controller must be configured, ready and\n        /// stopped.\n        /// </summary>\n        void StartController();\n\n        /// <summary>\n        /// Stops the controller and calls the <see cref=\"Stopped\"/> event. The controller must be configured and started.\n        /// </summary>\n        void StopController();\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/IController.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: e8ad2868119317a4481bd473db76c543\r\ntimeCreated: 1511886511\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoBoard.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing UnityEngine;\n\nnamespace ArucoUnity.Objects\n{\n    /// <summary>\n    /// Describes the shared properties of the ArUco boards.\n    /// </summary>\n    public abstract class ArucoBoard : ArucoObject\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"The length of the margins around the board in pixels, used by Creators (default: 0).\")]\n        private int marginsLength;\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the length of the margins around the board in pixels, used by the Creators (default: 0).\n        /// </summary>\n        public int MarginsLength\n        {\n            get { return marginsLength; }\n            set\n            {\n                OnPropertyUpdating();\n                marginsLength = value;\n                OnPropertyUpdated();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the image size for drawing the board.\n        /// </summary>\n        public Vector2 ImageSize { get; protected set; }\n\n        /// <summary>\n        /// Gets or sets the associated board from the ArucoUnity plugin library.\n        /// </summary>\n        public Aruco.Board Board { get; protected set; }\n\n        /// <summary>\n        /// Gets or sets the length of the axis lines when drawn on the board.\n        /// </summary>\n        public float AxisLength { get; protected set; }\n\n        /// <summary>\n        /// Gets or sets the estimated rotation vector of the board when tracked.\n        /// </summary>\n        public Cv.Vec3d Rvec { get; set; }\n\n        /// <summary>\n        /// Gets or sets the estimated translation vector of the board when tracked.\n        /// </summary>\n        public Cv.Vec3d Tvec { get; set; }\n\n        // MonoBehaviour methods\n\n        /// <summary>\n        /// Calls <see cref=\"UpdateBoard\"/>.\n        /// </summary>\n        protected override void Awake()\n        {\n            base.Awake();\n            UpdateBoard();\n        }\n\n        // ArucoObject methods\n\n        /// <summary>\n        /// Calls <see cref=\"ArucoObject.OnPropertyUpdated\"/> and calls <see cref=\"UpdateBoard\"/>.\n        /// </summary>\n        protected override void UpdateProperties()\n        {\n            base.UpdateProperties();\n            UpdateBoard();\n        }\n\n        /// <summary>\n        /// Updates the <see cref=\"Board\"/> properties.\n        /// </summary>\n        protected abstract void UpdateBoard();\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoBoard.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: d51420807400b834f961c0b27b160632\r\ntimeCreated: 1486581752\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoCharucoBoard.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing UnityEngine;\n\nnamespace ArucoUnity.Objects\n{\n    /// <summary>\n    /// Describes a ChArUco board.\n    /// </summary>\n    public class ArucoCharucoBoard : ArucoBoard\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"Number of squares in the X direction.\")]\n        private int squaresNumberX;\n\n        [SerializeField]\n        [Tooltip(\"Number of squares in the Y direction.\")]\n        private int squaresNumberY;\n\n        [SerializeField]\n        [Tooltip(\"Side length of each square. In pixels for Creators. In meters for Trackers and Calibrators.\")]\n        private float squareSideLength;\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the number of squares in the X direction.\n        /// </summary>\n        public int SquaresNumberX\n        {\n            get { return squaresNumberX; }\n            set\n            {\n                OnPropertyUpdating();\n                squaresNumberX = value;\n                OnPropertyUpdated();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the number of squares in the Y direction.\n        /// </summary>\n        public int SquaresNumberY\n        {\n            get { return squaresNumberY; }\n            set\n            {\n                OnPropertyUpdating();\n                squaresNumberY = value;\n                OnPropertyUpdated();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the side length of each square. In pixels for Creators. In meters for Trackers and Calibrators.\n        /// </summary>\n        public float SquareSideLength\n        {\n            get { return squareSideLength; }\n            set\n            {\n                OnPropertyUpdating();\n                squareSideLength = value;\n                OnPropertyUpdated();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the list of the detected marker by the tracker the last frame.\n        /// </summary>\n        public Std.VectorPoint2f DetectedCorners { get; internal set; }\n\n        /// <summary>\n        /// Gets or sets the list of the ids of the detected marker by the tracker the last frame.\n        /// </summary>\n        public Std.VectorInt DetectedIds { get; internal set; }\n\n        /// <summary>\n        /// Gets or sets if the transform of the board has been correctly estimated by the tracker the last frame.\n        /// </summary>\n        public bool ValidTransform { get; internal set; }\n\n        // ArucoObject methods\n\n        public override Vector3 GetGameObjectScale()\n        {\n            ImageSize = new Vector2(\n                x: SquaresNumberX * SquareSideLength + 2 * MarginsLength,\n                y: SquaresNumberY * SquareSideLength + 2 * MarginsLength\n            );\n            return new Vector3(ImageSize.x, SquareSideLength, ImageSize.y);\n        }\n\n        protected override void UpdateArucoHashCode()\n        {\n            ArucoHashCode = GetArucoHashCode(SquaresNumberX, SquaresNumberY, MarkerSideLength, SquareSideLength);\n        }\n\n        // ArucoBoard methods\n\n        public override Cv.Mat Draw()\n        {\n#if UNITY_EDITOR\n            if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (SquaresNumberX <= 1 || SquaresNumberY <= 1 || SquareSideLength <= 0\n                || MarkerSideLength <= 0 || SquareSideLength <= MarkerSideLength || MarkerBorderBits <= 0 || Dictionary == null))\n            {\n                return null;\n            }\n#endif\n            int squareSideLength = GetInPixels(SquareSideLength);\n            int markerSideLength = GetInPixels(MarkerSideLength);\n            Aruco.CharucoBoard board = Aruco.CharucoBoard.Create(SquaresNumberX, SquaresNumberY, squareSideLength, markerSideLength, Dictionary);\n\n            Cv.Size imageSize = new Cv.Size();\n            imageSize.Width = GetInPixels(SquaresNumberX * squareSideLength + 2 * MarginsLength);\n            imageSize.Height = GetInPixels(SquaresNumberY * squareSideLength + 2 * MarginsLength);\n\n            Cv.Mat image;\n            board.Draw(imageSize, out image, MarginsLength, (int)MarkerBorderBits);\n\n            return image;\n        }\n\n        public override string GenerateName()\n        {\n            return \"ArUcoUnity_ChArUcoBoard_\" + Dictionary.Name + \"_X_\" + SquaresNumberX + \"_Y_\" + SquaresNumberY + \"_SquareSize_\" + SquareSideLength\n                    + \"_MarkerSize_\" + MarkerSideLength;\n        }\n\n        protected override void UpdateBoard()\n        {\n#if UNITY_EDITOR\n            if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (SquaresNumberX <= 1 || SquaresNumberY <= 1 || SquareSideLength <= 0\n                || MarkerSideLength <= 0 || SquareSideLength <= MarkerSideLength))\n            {\n                return;\n            }\n#endif\n\n            AxisLength = 0.5f * (Mathf.Min(SquaresNumberX, SquaresNumberY) * SquareSideLength);\n            Board = Aruco.CharucoBoard.Create(SquaresNumberX, SquaresNumberY, SquareSideLength, MarkerSideLength, Dictionary);\n        }\n\n        // Methods\n\n        /// <summary>\n        /// Computes the hash code of a ChAruco board.\n        /// </summary>\n        /// <param name=\"squaresNumberX\">The number of squares in the X direction.</param>\n        /// <param name=\"squaresNumberY\">The number of squares in the Y direction.</param>\n        /// <param name=\"markerSideLength\">The side length of each marker.</param>\n        /// <param name=\"squareSideLength\">The side length of each square.</param>\n        /// <returns>The calculated ArUco hash code.</returns>\n        public static int GetArucoHashCode(int squaresNumberX, int squaresNumberY, float markerSideLength, float squareSideLength)\n        {\n            int hashCode = 17;\n            hashCode = hashCode * 31 + typeof(ArucoCharucoBoard).GetHashCode();\n            hashCode = hashCode * 31 + squaresNumberX;\n            hashCode = hashCode * 31 + squaresNumberY;\n            hashCode = hashCode * 31 + Mathf.RoundToInt(markerSideLength * 1000); // MarkerSideLength is not less than millimetres\n            hashCode = hashCode * 31 + Mathf.RoundToInt(markerSideLength * 1000); // SquareSideLength is not less than millimetres\n            return hashCode;\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoCharucoBoard.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 2bd3bf3f4a191c04bb36564300e2e048\r\ntimeCreated: 1486579168\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoDiamond.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Objects\n{\n    /// <summary>\n    /// Describes an ChArUco diamond marker.\n    /// </summary>\n    public class ArucoDiamond : ArucoObject\n    {\n        // Constants\n\n        /// <summary>\n        /// A ChArUco diamond marker is composed of 3x3 squares(3 per side).\n        /// </summary>\n        protected const int SquareNumberPerSide = 3;\n\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"Side length of each square. In pixels for Creators. In meters for Trackers and Calibrators.\")]\n        private float squareSideLength;\n\n        [SerializeField]\n        [Tooltip(\"The id of the first marker of the diamond.\")]\n        private int marker1Id;\n\n        [SerializeField]\n        [Tooltip(\"The id of the second marker of the diamond.\")]\n        private int marker2Id;\n\n        [SerializeField]\n        [Tooltip(\"The id of the third marker of the diamond.\")]\n        private int marker3Id;\n\n        [SerializeField]\n        [Tooltip(\"The id of the fourth marker of the diamond.\")]\n        private int marker4Id;\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the side length of each square. In pixels for Creators. In meters for Trackers and Calibrators.\n        /// </summary>\n        public float SquareSideLength\n        {\n            get { return squareSideLength; }\n            set\n            {\n                OnPropertyUpdating();\n                squareSideLength = value;\n                OnPropertyUpdated();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the four ids of the four markers of the diamond.\n        /// </summary>\n        public int[] Ids\n        {\n            get { return ids; }\n            set\n            {\n                if (value.Length != ids.Length)\n                {\n                    Debug.LogError(\"Invalid number of Ids: ArucoDiamond requires \" + ids.Length + \" ids.\");\n                    return;\n                }\n\n                OnPropertyUpdating();\n                ids = value;\n                OnPropertyUpdated();\n            }\n        }\n\n        // Variables\n\n        protected int[] ids;\n\n        // MonoBehaviour methods\n\n        protected override void OnValidate()\n        {\n            ids = new int[] { marker1Id, marker2Id, marker3Id, marker4Id };\n            base.OnValidate();\n        }\n        // ArucoObject methods\n\n        public override Cv.Mat Draw()\n        {\n#if UNITY_EDITOR\n            if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (MarkerSideLength <= 0 || SquareSideLength <= 0\n                || SquareSideLength <= MarkerSideLength || Dictionary == null))\n            {\n                return null;\n            }\n#endif\n            Cv.Vec4i ids = new Cv.Vec4i();\n            for (int i = 0; i < Ids.Length; ++i)\n            {\n                ids.Set(i, Ids[i]);\n            }\n\n            Cv.Mat image;\n            Aruco.DrawCharucoDiamond(Dictionary, ids, GetInPixels(SquareSideLength), GetInPixels(MarkerSideLength), out image);\n\n            return image;\n        }\n\n        public override string GenerateName()\n        {\n            return \"ArUcoUnity_DiamondMarker_\" + Dictionary.Name + \"_Ids_\" + Ids[0] + \"_\" + Ids[1] + \"_\" + Ids[2] + \"_\" + Ids[3] + \"_SquareSize_\"\n                + SquareSideLength + \"_MarkerSize_\" + MarkerSideLength;\n        }\n\n        public override Vector3 GetGameObjectScale()\n        {\n            float sideLength = SquareNumberPerSide * SquareSideLength;\n            return new Vector3(sideLength, SquareSideLength, sideLength);\n        }\n\n        protected override void UpdateArucoHashCode()\n        {\n            if (Ids != null)\n            {\n                ArucoHashCode = GetArucoHashCode(Ids);\n            }\n        }\n\n        // Methods\n\n        /// <summary>\n        /// Computes the hash code of a ChArUco diamond marker.\n        /// </summary>\n        /// <param name=\"ids\">The list of ids of the four markers.</param>\n        /// <returns>The calculated ArUco hash code.</returns>\n        public static int GetArucoHashCode(int[] ids)\n        {\n            int hashCode = 17;\n            hashCode = hashCode * 31 + typeof(ArucoDiamond).GetHashCode();\n            foreach (var id in ids)\n            {\n                hashCode = hashCode * 31 + id;\n            }\n            return hashCode;\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoDiamond.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: ef80aa3a81113aa4280fbd60cc0008ae\r\ntimeCreated: 1486579175\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoGridBoard.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing UnityEngine;\n\nnamespace ArucoUnity.Objects\n{\n    /// <summary>\n    /// Describes an ArUco grid board.\n    /// </summary>\n    public class ArucoGridBoard : ArucoBoard\n    {\n        // Editor fields\n\n        [SerializeField]\n        [Tooltip(\"Number of markers in the X direction.\")]\n        private int markersNumberX;\n\n        [SerializeField]\n        [Tooltip(\"Number of markers in the Y direction.\")]\n        private int markersNumberY;\n\n        [SerializeField]\n        [Tooltip(\"Separation length between two consecutive markers in the grid. In pixels for Creators. In meters for Trackers and Calibrators.\")]\n        private float markerSeparation;\n\n        // Properties\n\n        /// <summary>\n        /// Gets or sets the number of markers in the X direction.\n        /// </summary>\n        public int MarkersNumberX\n        {\n            get { return markersNumberX; }\n            set\n            {\n                OnPropertyUpdating();\n                markersNumberX = value;\n                OnPropertyUpdated();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the number of markers in the Y direction.\n        /// </summary>\n        public int MarkersNumberY\n        {\n            get { return markersNumberY; }\n            set\n            {\n                OnPropertyUpdating();\n                markersNumberY = value;\n                OnPropertyUpdated();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the separation between two consecutive markers in the grid. In pixels for Creators. In meters for Trackers and Calibrators.\n        /// </summary>\n        public float MarkerSeparation\n        {\n            get { return markerSeparation; }\n            set\n            {\n                OnPropertyUpdating();\n                markerSeparation = value;\n                OnPropertyUpdated();\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the number of markers employed by the tracker the last frame for the estimation of the transform of the board.\n        /// </summary>\n        public int MarkersUsedForEstimation { get; internal set; }\n\n        // ArucoObject methods\n\n        public override Vector3 GetGameObjectScale()\n        {\n            ImageSize = new Vector2(\n                x: MarkersNumberX * (MarkerSideLength + MarkerSeparation) - MarkerSeparation + 2 * MarginsLength,\n                y: MarkersNumberY * (MarkerSideLength + MarkerSeparation) - MarkerSeparation + 2 * MarginsLength\n            );\n            return new Vector3(ImageSize.x, MarkerSideLength, ImageSize.y);\n        }\n\n        protected override void UpdateArucoHashCode()\n        {\n            ArucoHashCode = GetArucoHashCode(MarkersNumberX, MarkersNumberY, MarkerSideLength, MarkerSeparation);\n        }\n\n        // ArucoBoard methods\n\n        public override Cv.Mat Draw()\n        {\n#if UNITY_EDITOR\n            if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (MarkersNumberX <= 0 || MarkersNumberY <= 0 || MarkerSideLength <= 0\n                || MarkerSeparation <= 0 || MarkerBorderBits <= 0 || Dictionary == null))\n            {\n                return null;\n            }\n#endif\n            int markerSideLength = GetInPixels(MarkerSideLength);\n            int markerSeparation = GetInPixels(MarkerSeparation);\n            Aruco.GridBoard board = Aruco.GridBoard.Create(MarkersNumberX, MarkersNumberY, markerSideLength, markerSeparation, Dictionary);\n\n            Cv.Size imageSize = new Cv.Size();\n            imageSize.Width = GetInPixels(MarkersNumberX * (markerSideLength + markerSeparation) - markerSeparation + 2 * MarginsLength);\n            imageSize.Height = GetInPixels(MarkersNumberY * (markerSideLength + markerSeparation) - markerSeparation + 2 * MarginsLength);\n\n            Cv.Mat image;\n            board.Draw(imageSize, out image, MarginsLength, (int)MarkerBorderBits);\n\n            return image;\n        }\n\n        public override string GenerateName()\n        {\n            return \"ArUcoUnity_GridBoard_\" + Dictionary.Name + \"_X_\" + MarkersNumberX + \"_Y_\" + MarkersNumberY + \"_MarkerSize_\" + MarkerSideLength;\n        }\n\n        protected override void UpdateBoard()\n        {\n#if UNITY_EDITOR\n            if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (MarkersNumberX <= 0 || MarkersNumberY <= 0 || MarkerSideLength <= 0\n                || MarkerSeparation <= 0))\n            {\n                return;\n            }\n#endif\n\n            AxisLength = 0.5f * (Mathf.Min(MarkersNumberX, MarkersNumberY) * (MarkerSideLength + MarkerSeparation) + MarkerSeparation);\n            Board = Aruco.GridBoard.Create(MarkersNumberX, MarkersNumberY, MarkerSideLength, MarkerSeparation, Dictionary);\n        }\n\n        // Methods\n\n        /// <summary>\n        /// Computes the hash code of a grid board.\n        /// </summary>\n        /// <param name=\"markersNumberX\">The number of markers in the X direction.</param>\n        /// <param name=\"markersNumberY\">The number of markers in the Y direction.</param>\n        /// <param name=\"markerSideLength\">The side length of each marker.</param>\n        /// <param name=\"markerSeparation\">The separation between two consecutive markers in the grid.</param>\n        /// <returns>The calculated ArUco hash code.</returns>\n        public static int GetArucoHashCode(int markersNumberX, int markersNumberY, float markerSideLength, float markerSeparation)\n        {\n            int hashCode = 17;\n            hashCode = hashCode * 31 + typeof(ArucoGridBoard).GetHashCode();\n            hashCode = hashCode * 31 + markersNumberX;\n            hashCode = hashCode * 31 + markersNumberY;\n            hashCode = hashCode * 31 + Mathf.RoundToInt(markerSideLength * 1000); // MarkerSideLength is not less than millimeters\n            hashCode = hashCode * 31 + Mathf.RoundToInt(markerSeparation * 1000); // MarkerSeparation is not less than millimeters\n            return hashCode;\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoGridBoard.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: a66515f6201048442966d413775d221e\r\ntimeCreated: 1486579159\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoMarker.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing UnityEngine;\n\nnamespace ArucoUnity.Objects\n{\n  /// <summary>\n  /// Describes an ArUco marker.\n  /// </summary>\n  public class ArucoMarker : ArucoObject\n  {\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"The marker id in the used dictionary.\")]\n    private int markerId;\n\n    // Properties\n\n    /// <summary>\n    /// Gets or sets the marker id in the used dictionary.\n    /// </summary>\n    public int MarkerId\n    {\n      get { return markerId; }\n      set\n      {\n        OnPropertyUpdating();\n        markerId = value;\n        OnPropertyUpdated();\n      }\n    }\n\n    // ArucoObject methods\n\n    public override Cv.Mat Draw()\n    {\n#if UNITY_EDITOR\n      if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode && (MarkerSideLength <= 0 || MarkerBorderBits == 0 || Dictionary == null))\n      {\n        return null;\n      }\n#endif\n      Cv.Mat image;\n      Dictionary.DrawMarker(MarkerId, GetInPixels(MarkerSideLength), out image, (int)MarkerBorderBits);\n\n      return image;\n    }\n\n    public override string GenerateName()\n    {\n      return \"ArUcoUnity_Marker_\" + Dictionary.Name + \"_Id_\" + MarkerId;\n    }\n\n    public override Vector3 GetGameObjectScale()\n    {\n      return MarkerSideLength * Vector3.one;\n    }\n\n    protected override void UpdateArucoHashCode()\n    {\n      ArucoHashCode = GetArucoHashCode(MarkerId);\n    }\n\n    // Methods\n\n    /// <summary>\n    /// Computes the hash code of a marker based on its id.\n    /// </summary>\n    /// <param name=\"markerId\">The marker id.</param>\n    /// <returns>The calculated ArUco hash code.</returns>\n    public static int GetArucoHashCode(int markerId)\n    {\n      int hashCode = 17;\n      hashCode = hashCode * 31 + typeof(ArucoMarker).GetHashCode();\n      hashCode = hashCode * 31 + markerId;\n      return hashCode;\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoMarker.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: e7dccfd012452104795fa7ee55cee65a\r\ntimeCreated: 1484782075\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoObject.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Objects\n{\n  /// <summary>\n  /// Describes the shared properties of all the ArUco objects. Trackers, Creators and Calibrators use this interface.\n  /// </summary>\n  [ExecuteInEditMode]\n  public abstract class ArucoObject : MonoBehaviour\n  {\n    // Constants\n\n    protected const float metersToPixels300ppp = 100f * 300f / 2.54f;\n\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"The dictionary to use.\")]\n    private Aruco.PredefinedDictionaryName dictionaryName;\n\n    [SerializeField]\n    [Tooltip(\"The side length of each marker. In pixels for Creators. In meters for Trackers and Calibrators.\")]\n    private float markerSideLength;\n\n    [SerializeField]\n    [Tooltip(\"Number of bits in marker borders (default: 1). Used by Creators.\")]\n    private uint markerBorderBits;\n\n    private bool displayInEditor = true;\n\n    // Events\n\n    /// <summary>\n    /// Executed before a property is going to be updated.\n    /// </summary>\n    public event Action<ArucoObject> PropertyUpdating = delegate { };\n\n    /// <summary>\n    /// Executed after a property has been updated.\n    /// </summary>\n    public event Action<ArucoObject> PropertyUpdated = delegate { };\n\n    // Properties\n\n    public int ArucoHashCode { get; protected set; }\n\n    /// <summary>\n    /// Gets or sets the dictionary to use.\n    /// </summary>\n    public Aruco.Dictionary Dictionary\n    {\n      get { return dictionary; }\n      set\n      {\n        OnPropertyUpdating();\n        dictionary = value;\n        OnPropertyUpdated();\n      }\n    }\n\n    /// <summary>\n    /// Gets or sets the side length of each marker. In pixels for Creators. In meters for Trackers and Calibrators.\n    /// </summary>\n    public float MarkerSideLength\n    {\n      get { return markerSideLength; }\n      set\n      {\n        OnPropertyUpdating();\n        markerSideLength = value;\n        OnPropertyUpdated();\n      }\n    }\n\n    /// <summary>\n    /// Gets or sets the number of bits in marker borders (default: 1). Used by Creators.\n    /// </summary>\n    public uint MarkerBorderBits\n    {\n      get { return markerBorderBits; }\n      set\n      {\n        OnPropertyUpdating();\n        markerBorderBits = value;\n        OnPropertyUpdated();\n      }\n    }\n\n    public bool DisplayInEditor { get { return displayInEditor; } set { displayInEditor = value; } }\n\n    // Variables\n\n    private Aruco.Dictionary dictionary;\n\n    // MonoBehaviour methods\n\n    /// <summary>\n    /// Calls <see cref=\"UpdateProperties()\"/>.\n    /// </summary>\n    protected virtual void Awake()\n    {\n      if (Dictionary == null)\n      {\n        dictionary = Aruco.GetPredefinedDictionary(dictionaryName);\n      }\n      UpdateProperties();\n    }\n\n    /// <summary>\n    /// Calls <see cref=\"OnPropertyUpdated()\"/> in editor mode.\n    /// </summary>\n    protected virtual void OnValidate()\n    {\n#if UNITY_EDITOR\n      if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode)\n      {\n        if (Dictionary == null || dictionaryName != Dictionary.Name)\n        {\n          dictionary = Aruco.GetPredefinedDictionary(dictionaryName);\n        }\n        OnPropertyUpdated();\n      }\n#endif\n    }\n\n    // Methods\n\n    /// <summary>\n    /// Returns the image of the ArUco object. In editor it should returns null and no exception if the object is incorrectly configured.\n    /// </summary>\n    /// <returns>The image of the ArUco object.</returns>\n    public abstract Cv.Mat Draw();\n\n    /// <summary>\n    /// Returns a generated name depending on the value of the properties.\n    /// </summary>\n    public abstract string GenerateName();\n\n    /// <summary>\n    /// Gets the scale to <see cref=\"MarkerSideLength\"/> length.\n    /// </summary>\n    public abstract Vector3 GetGameObjectScale();\n\n    /// <summary>\n    /// Updates the ArUco hash code of the object.\n    /// </summary>\n    protected abstract void UpdateArucoHashCode();\n\n    /// <summary>\n    /// Calls the event <see cref=\"PropertyUpdating\"/>.\n    /// </summary>\n    protected void OnPropertyUpdating()\n    {\n      PropertyUpdating.Invoke(this);\n    }\n\n    /// <summary>\n    /// Calls <see cref=\"UpdateProperties\"/> and the <see cref=\"PropertyUpdated\"/> event.\n    /// </summary>\n    protected void OnPropertyUpdated()\n    {\n      UpdateProperties();\n      PropertyUpdated.Invoke(this);\n    }\n\n    /// <summary>\n    /// Initializes the properties and calls the <see cref=\"UpdateArucoHashCode\"/> method.\n    /// </summary>\n    protected virtual void UpdateProperties()\n    {\n      UpdateArucoHashCode();\n    }\n\n    /// <summary>\n    /// Returns a value as an int, with a conversion from meters to pixels if the property value is less than 10.\n    /// </summary>\n    protected int GetInPixels(float propertyValue)\n    {\n      int propertyValueInt = (int)propertyValue;\n      if (propertyValue > 0 && propertyValue < 10)\n      {\n        propertyValueInt = Mathf.RoundToInt(propertyValue * metersToPixels300ppp);\n      }\n      return propertyValueInt;\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/ArucoObject.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: bcaf8f91f3d0d3f4aaeb1688768f87d2\r\ntimeCreated: 1485371309\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Displayers/ArucoObjectCreator.cs",
    "content": "﻿using UnityEngine;\nusing System.IO;\n\nnamespace ArucoUnity.Objects.Displayers\n{\n  /// <summary>\n  /// Create and display images of an ArUco object ready to be printed.\n  /// \n  /// See the OpenCV documentation for more information about the marker creation (second section of the following tutorial):\n  /// http://docs.opencv.org/3.2.0/d5/dae/tutorial_aruco_detection.html\n  /// </summary>\n  public class ArucoObjectCreator : ArucoObjectDisplayer\n  {\n    // Constants\n\n    public const float pixelsToMetersFactor = 0.001f;\n\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"Save the image in play mode.\")]\n    private bool autoSaveInPlayMode = true;\n\n    [SerializeField]\n    [Tooltip(\"The output folder for the image, relative to the Application.persistentDataPath folder.\")]\n    private string outputFolder = \"ArucoUnity/Images/\";\n\n    [SerializeField]\n    [Tooltip(\"Set automatically the image filename based on the Aruco object's property values.\")]\n    private bool automaticFilename = true;\n\n    [SerializeField]\n    [Tooltip(\"The name of the image, without the extension (.png added automatically).\")]\n    private string imageFilename;\n\n    // Properties\n\n    /// <summary>\n    /// Gets or sets if the <see cref=\"ArucoObjectDisplayer.ImageTexture\"/> is automatically saved in play mode.\n    /// </summary>\n    public bool AutoSaveImage { get { return autoSaveInPlayMode; } set { autoSaveInPlayMode = value; } }\n\n    /// <summary>\n    /// Gets or sets the output folder for the image, relative to the Application.persistentDataPath folder\n    /// (default: ArucoUnity/Images/).\n    /// </summary>\n    public string OutputFolder { get { return outputFolder; } set { outputFolder = value; } }\n\n    /// <summary>\n    /// Gets or sets the name of the image, without the extension (.png added automatically). If null, it will be\n    /// generated automatically.\n    /// </summary>\n    public string ImageFilename { get { return imageFilename; } set { imageFilename = value; } }\n\n    // ArucoObjectDisplayer methods\n\n    /// <summary>\n    /// Calls <see cref=\"ArucoObjectDisplayer.UpdateImage\"/> then <see cref=\"SaveImage\"/> if <see cref=\"AutoSaveImage\"/>\n    /// is set. Also set <see cref=\"ImageFilename\"/> in the editor.\n    /// </summary>\n    protected override void UpdateImage()\n    {\n      base.UpdateImage();\n\n#if UNITY_EDITOR\n      if (automaticFilename)\n      {\n        ImageFilename = ArucoObject.GenerateName();\n      }\n#endif\n\n#if UNITY_EDITOR\n      if (UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode)\n      {\n#endif\n        if (AutoSaveImage)\n        {\n          SaveImage();\n        }\n#if UNITY_EDITOR\n      }\n#endif\n    }\n\n    protected override void PlaceImagePlane()\n    {\n      base.PlaceImagePlane();\n      if (ImagePlane != null && ArucoObject != null)\n      {\n        var scale = ArucoObject.GetGameObjectScale();\n        ImagePlane.transform.localScale = pixelsToMetersFactor * new Vector3(scale.x, scale.z, scale.y);\n      }\n    }\n\n    // Methods\n\n    /// <summary>\n    /// Save the <see cref=\"ImageTexture\"/> on a image file in the <see cref=\"OutputFolder\"/> with\n    /// <see cref=\"ImageFilename\"/> as filename.\n    /// </summary>\n    public virtual void SaveImage()\n    {\n      if (automaticFilename || ImageFilename == null || ImageFilename.Length == 0)\n      {\n        ImageFilename = ArucoObject.GenerateName() + \".png\";\n      }\n\n      string outputFolderPath = Path.Combine((Application.isEditor) ? Application.dataPath\n        : Application.persistentDataPath, OutputFolder);\n      if (!Directory.Exists(outputFolderPath))\n      {\n        Directory.CreateDirectory(outputFolderPath);\n      }\n\n      string imageFilePath = outputFolderPath + ImageFilename;\n      File.WriteAllBytes(imageFilePath, ImageTexture.EncodeToPNG());\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Displayers/ArucoObjectCreator.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 67b4f93e96aa56b4f8b21751c9e7bc16\r\ntimeCreated: 1484691079\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Displayers/ArucoObjectDisplayer.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing UnityEngine;\n\nnamespace ArucoUnity.Objects.Displayers\n{\n  [ExecuteInEditMode]\n  public class ArucoObjectDisplayer : MonoBehaviour\n  {\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"The ArUco object to display.\")]\n    private ArucoObject arucoObject;\n\n    [SerializeField]\n    [Tooltip(\"Display the image in play mode.\")]\n    private bool displayInPlayMode = false;\n\n    // Properties\n\n    /// <summary>\n    /// Get or sets the ArUco object to display.\n    /// </summary>\n    protected ArucoObject ArucoObject { get { return arucoObject; } set { SetArucoObject(value); } }\n\n    /// <summary>\n    /// Gets or sets if <see cref=\"ImagePlane\"/> is displayed in play mode.\n    /// </summary>\n    protected bool DisplayInPlayMode { get { return displayInPlayMode; } set { displayInPlayMode = value; } }\n\n    /// <summary>\n    /// Gets or sets the prefab of <see cref=\"ImagePlane\"/>. If null, default will be loaded:\n    /// `Prefabs/Resources/ArucoCreatorImagePlane.prefab`.\n    /// </summary>\n    public GameObject ImagePlanePrefab { get; set; }\n\n    /// <summary>\n    /// Gets the plane that display <see cref=\"ImageTexture\"/>.\n    /// </summary>\n    public GameObject ImagePlane { get; protected set; }\n\n    /// <summary>\n    /// Gets the image of the <see cref=\"ArucoObject\"/> to display.\n    /// </summary>\n    public Cv.Mat Image { get; protected set; }\n\n    /// <summary>\n    /// Gets the texture that contains <see cref=\"Image\"/>.\n    /// </summary>\n    public Texture2D ImageTexture { get; protected set; }\n\n    // Variables\n\n#if UNITY_EDITOR\n    protected ArucoObject lastArucoObjectOnValidate = null;\n#endif\n    protected Material imagePlaneMaterial;\n\n    // MonoBehaviour methods\n\n    /// <summary>\n    /// Calls <see cref=\"SetArucoObject\"/> to display the <see cref=\"ArucoObject\"/> only in play mode.\n    /// </summary>\n    protected virtual void Start()\n    {\n#if UNITY_EDITOR\n      if (UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode)\n      {\n#endif\n        if (DisplayInPlayMode && ArucoObject)\n        {\n          var currentArucoObject = ArucoObject;\n          arucoObject = null;\n          SetArucoObject(currentArucoObject);\n          UpdateImage();\n        }\n        else\n        {\n          enabled = false;\n        }\n#if UNITY_EDITOR\n      }\n#endif\n    }\n\n    /// <summary>\n    /// Updates the display in the editor if <see cref=\"ArucoObject\"/> has been changed.\n    /// </summary>\n    protected virtual void Update()\n    {\n#if UNITY_EDITOR\n      if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode)\n      {\n        if (lastArucoObjectOnValidate != ArucoObject)\n        {\n          if (ArucoObject != null)\n          {\n            var currentArucoObject = ArucoObject;\n            arucoObject = lastArucoObjectOnValidate;\n            SetArucoObject(currentArucoObject);\n          }\n          else\n          {\n            ResetImage();\n          }\n          lastArucoObjectOnValidate = ArucoObject;\n        }\n\n        // The Aruco Object may initialize after the displayer, so we can display the image the frame after\n        if (ArucoObject != null && Image == null)\n        {\n          UpdateImage();\n        }\n\n        // Keep the image plane at the same position\n        if (ImagePlane != null)\n        {\n          PlaceImagePlane();\n        }\n      }\n#endif\n    }\n\n    /// <summary>\n    /// Unsubscribes from the <see cref=\"ArucoObject.PropertyUpdated\"/> event.\n    /// </summary>\n    protected virtual void OnDestroy()\n    {\n      if (ArucoObject != null)\n      {\n        ArucoObject.PropertyUpdated -= ArucoObject_PropertyUpdated;\n      }\n    }\n\n    /// <summary>\n    /// Calls <see cref=\"ResetImage\"/> in the editor.\n    /// </summary>\n    private void OnDisable()\n    {\n#if UNITY_EDITOR\n      if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode)\n      {\n        ResetImage();\n      }\n#endif\n    }\n\n    // Methods\n\n    /// <summary>\n    /// Creates <see cref=\"Image\"/> and <see cref=\"ImageTexture\"/> from <see cref=\"ArucoObject\"/>.\n    /// </summary>\n    public virtual void CreateImage()\n    {\n      Image = ArucoObject.Draw();\n\n      if (Image != null)\n      {\n        // Vertical flip to correctly display the image on the texture\n        int verticalFlipCode = 0;\n        Cv.Mat imageForTexture = Image.Clone();\n        Cv.Flip(imageForTexture, imageForTexture, verticalFlipCode);\n\n        // Load the image to the texture\n        int markerDataSize = (int)(Image.ElemSize() * Image.Total());\n        ImageTexture = new Texture2D(Image.Cols, Image.Rows, TextureFormat.RGB24, false);\n        ImageTexture.LoadRawTextureData(imageForTexture.DataIntPtr, markerDataSize);\n        ImageTexture.Apply();\n      }\n    }\n\n    /// <summary>\n    /// Updates <see cref=\"ImagePlane\"/> with <see cref=\"ImageTexture\"/>.\n    /// </summary>\n    public virtual void DisplayImage()\n    {\n      InitializeImagePlane();\n      PlaceImagePlane();\n\n      imagePlaneMaterial.mainTexture = ImageTexture;\n      ImagePlane.SetActive(true);\n    }\n\n    /// <summary>\n    /// Resets <see cref=\"Image\"/>, <see cref=\"ImageTexture\"/> and <see cref=\"ImagePlane\"/>.\n    /// </summary>\n    public virtual void ResetImage()\n    {\n      Image = null;\n      ImageTexture = null;\n      if (imagePlaneMaterial != null)\n      {\n        imagePlaneMaterial.mainTexture = null;\n      }\n      if (ImagePlane != null)\n      {\n        ImagePlane.SetActive(false);\n      }\n    }\n\n    /// <summary>\n    /// Calls <see cref=\"CreateImage\"/> then <see cref=\"DisplayImage\"/> if <see cref=\"Image\"/> has been created or\n    /// <see cref=\"ResetImage\"/>.\n    /// </summary>\n    protected virtual void UpdateImage()\n    {\n      CreateImage();\n      if (Image != null)\n      {\n        DisplayImage();\n      }\n      else\n      {\n        ResetImage();\n      }\n    }\n\n    /// <summary>\n    /// Subscribes to the <see cref=\"ArucoObject.PropertyUpdated\"/> event, and unsubscribes from the previous ArucoObject.\n    /// </summary>\n    protected virtual void SetArucoObject(ArucoObject arucoObject)\n    {\n      if (ArucoObject != null)\n      {\n        ArucoObject.PropertyUpdated -= ArucoObject_PropertyUpdated;\n      }\n\n      this.arucoObject = arucoObject;\n\n      if (ArucoObject != null)\n      {\n        ArucoObject.PropertyUpdated += ArucoObject_PropertyUpdated;\n      }\n    }\n\n    /// <summary>\n    /// Initializes <see cref=\"ImagePlane\"/>.\n    /// </summary>\n    protected virtual void InitializeImagePlane()\n    {\n      // Loads the prefab\n      if (ImagePlanePrefab == null)\n      {\n        ImagePlanePrefab = Resources.Load(\"ArucoObjectDisplayerImagePlane\") as GameObject;\n      }\n\n      // Creates the image plane if null\n      if (ImagePlane == null)\n      {\n        // Finds or creates the image plane gameObject\n        var imagePlaneTransform = transform.Find(ImagePlanePrefab.name);\n        if (imagePlaneTransform != null)\n        {\n          ImagePlane = imagePlaneTransform.gameObject;\n        }\n        else\n        {\n          ImagePlane = Instantiate(ImagePlanePrefab, transform);\n          ImagePlane.name = ImagePlanePrefab.name;\n        }\n\n        // Updates the image plane material\n#if UNITY_EDITOR\n        if (!UnityEditor.EditorApplication.isPlayingOrWillChangePlaymode)\n#else\n          if (Application.isEditor)\n#endif\n        {\n          var renderer = ImagePlane.GetComponent<Renderer>();\n          imagePlaneMaterial = new Material(renderer.sharedMaterial);\n          renderer.sharedMaterial = imagePlaneMaterial;\n        }\n        else\n        {\n          imagePlaneMaterial = ImagePlane.GetComponent<Renderer>().material;\n        }\n\n        // Don't save in the scene : dynamically generated\n        ImagePlane.hideFlags = HideFlags.DontSaveInEditor;\n      }\n    }\n\n    /// <summary>\n    /// Places, rotates and scales the image plane.\n    /// </summary>\n    protected virtual void PlaceImagePlane()\n    {\n      if (ArucoObject != null)\n      {\n        var scale = ArucoObject.GetGameObjectScale();\n\n        ImagePlane.transform.SetParent(null);\n        ImagePlane.transform.localScale = new Vector3(scale.x, scale.z, scale.y); // Because it's rotated up\n        ImagePlane.transform.SetParent(transform);\n      }\n      ImagePlane.transform.localPosition = Vector3.zero;\n      ImagePlane.transform.forward = -transform.up; // Rotated up\n    }\n\n    /// <summary>\n    /// Calls <see cref=\"UpdateImage\"/>.\n    /// </summary>\n    protected virtual void ArucoObject_PropertyUpdated(ArucoObject arucoObject)\n    {\n      UpdateImage();\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Displayers/ArucoObjectDisplayer.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 3b8644fbc5335334e944b09d5c8da57a\r\ntimeCreated: 1509997582\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Displayers.meta",
    "content": "fileFormatVersion: 2\r\nguid: 658af5c773380ec4a9acc6630a5c00c5\r\nfolderAsset: yes\r\ntimeCreated: 1510715503\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoCharucoBoardTracker.cs",
    "content": "﻿using ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  public class ArucoCharucoBoardTracker : ArucoObjectTracker\n  {\n    // ArucoObjectTracker methods\n\n    public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)\n    {\n      base.Detect(cameraId, dictionary, image);\n\n      ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker;\n\n      foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects<ArucoCharucoBoard>(dictionary))\n      {\n        if (arucoTracker.RefineDetectedMarkers)\n        {\n          Aruco.RefineDetectedMarkers(image, arucoCharucoBoard.Board, markerTracker.MarkerCorners[cameraId][dictionary],\n            markerTracker.MarkerIds[cameraId][dictionary], markerTracker.RejectedCandidateCorners[cameraId][dictionary]);\n          markerTracker.DetectedMarkers[cameraId][dictionary] = (int)markerTracker.MarkerIds[cameraId][dictionary].Size();\n        }\n\n        Std.VectorPoint2f charucoCorners = null;\n        Std.VectorInt charucoIds = null;\n\n        if (markerTracker.DetectedMarkers[cameraId][dictionary] > 0)\n        {\n          if (arucoCameraUndistortion == null)\n          {\n            Aruco.InterpolateCornersCharuco(markerTracker.MarkerCorners[cameraId][dictionary],\n             markerTracker.MarkerIds[cameraId][dictionary], arucoCamera.Images[cameraId],\n             (Aruco.CharucoBoard)arucoCharucoBoard.Board, out charucoCorners, out charucoIds);\n          }\n          else\n          {\n            Aruco.InterpolateCornersCharuco(markerTracker.MarkerCorners[cameraId][dictionary],\n              markerTracker.MarkerIds[cameraId][dictionary], arucoCamera.Images[cameraId],\n              (Aruco.CharucoBoard)arucoCharucoBoard.Board, out charucoCorners, out charucoIds, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId],\n              arucoCameraUndistortion.UndistortedDistCoeffs[cameraId]);\n          }\n        }\n\n        arucoCharucoBoard.DetectedCorners = charucoCorners;\n        arucoCharucoBoard.DetectedIds = charucoIds;\n      }\n    }\n\n    public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)\n    {\n      base.Draw(cameraId, dictionary, image);\n\n      foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects<ArucoCharucoBoard>(dictionary))\n      {\n        if (arucoCharucoBoard.DetectedIds != null && arucoCharucoBoard.DetectedIds.Size() > 0)\n        {\n          if (arucoTracker.DrawDetectedCharucoMarkers)\n          {\n            Aruco.DrawDetectedCornersCharuco(image, arucoCharucoBoard.DetectedCorners, arucoCharucoBoard.DetectedIds);\n          }\n\n          if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && arucoCharucoBoard.Rvec != null)\n          {\n            Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId],\n              arucoCharucoBoard.Rvec, arucoCharucoBoard.Tvec, arucoCharucoBoard.AxisLength);\n          }\n        }\n      }\n    }\n\n    public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary)\n    {\n      base.EstimateTransforms(cameraId, dictionary);\n\n      foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects<ArucoCharucoBoard>(dictionary))\n      {\n        Cv.Vec3d rvec = null, tvec = null;\n        bool validTransform = false;\n\n        if (arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] > 0 && arucoCameraUndistortion != null)\n        {\n          validTransform = Aruco.EstimatePoseCharucoBoard(arucoCharucoBoard.DetectedCorners, arucoCharucoBoard.DetectedIds,\n          (Aruco.CharucoBoard)arucoCharucoBoard.Board, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId],\n          out rvec, out tvec);\n        }\n\n        arucoCharucoBoard.Rvec = rvec;\n        arucoCharucoBoard.Tvec = tvec;\n        arucoCharucoBoard.ValidTransform = validTransform;\n      }\n    }\n\n    public override void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary)\n    {\n      base.UpdateTransforms(cameraId, dictionary);\n\n      foreach (var arucoCharucoBoard in arucoTracker.GetArucoObjects<ArucoCharucoBoard>(dictionary))\n      {\n        if (arucoCharucoBoard.Rvec != null)\n        {\n          arucoCameraDisplay.PlaceArucoObject(arucoCharucoBoard.transform, cameraId, arucoCharucoBoard.Tvec.ToPosition(),\n            arucoCharucoBoard.Rvec.ToRotation());\n        }\n      }\n    }\n  }\n}\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoCharucoBoardTracker.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 5f945c6d884a00441af109be9eaff9a3\r\ntimeCreated: 1487619589\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoDiamondTracker.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing System.Collections.Generic;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  public class ArucoDiamondTracker : ArucoObjectTracker\n  {\n    // Constants\n\n    protected const float DetectSquareMarkerLengthRate = 2f;\n    protected const float EstimatePoseSquareLength = 1f;\n    protected const float DrawAxisLength = EstimatePoseSquareLength / 2f;\n\n    // Properties\n\n    public Dictionary<Aruco.Dictionary, Std.VectorVectorPoint2f>[] DiamondCorners { get; set; }\n\n    public Dictionary<Aruco.Dictionary, Std.VectorVec4i>[] DiamondIds { get; set; }\n\n    public Dictionary<Aruco.Dictionary, int>[] DetectedDiamonds { get; set; }\n\n    public Dictionary<Aruco.Dictionary, Std.VectorVec3d>[] DiamondRvecs { get; set; }\n\n    public Dictionary<Aruco.Dictionary, Std.VectorVec3d>[] DiamondTvecs { get; set; }\n\n    // ArucoObjectsController related methods\n\n    protected override void ArucoObjectsController_DictionaryAdded(Aruco.Dictionary dictionary)\n    {\n      for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)\n      {\n        DiamondIds[cameraId].Add(dictionary, new Std.VectorVec4i());\n        DetectedDiamonds[cameraId].Add(dictionary, 0);\n        DiamondRvecs[cameraId].Add(dictionary, new Std.VectorVec3d());\n        DiamondTvecs[cameraId].Add(dictionary, new Std.VectorVec3d());\n      }\n    }\n\n    protected override void ArucoObjectsController_DictionaryRemoved(Aruco.Dictionary dictionary)\n    {\n      for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)\n      {\n        DiamondIds[cameraId].Remove(dictionary);\n        DetectedDiamonds[cameraId].Remove(dictionary);\n        DiamondRvecs[cameraId].Remove(dictionary);\n        DiamondTvecs[cameraId].Remove(dictionary);\n      }\n    }\n\n    // ArucoObjectTracker methods\n\n    public override void Activate(IArucoObjectsTracker arucoTracker)\n    {\n      base.Activate(arucoTracker);\n\n      DiamondCorners = new Dictionary<Aruco.Dictionary, Std.VectorVectorPoint2f>[arucoCamera.CameraNumber];\n      DiamondIds = new Dictionary<Aruco.Dictionary, Std.VectorVec4i>[arucoCamera.CameraNumber];\n      DetectedDiamonds = new Dictionary<Aruco.Dictionary, int>[arucoCamera.CameraNumber];\n      DiamondRvecs = new Dictionary<Aruco.Dictionary, Std.VectorVec3d>[arucoCamera.CameraNumber];\n      DiamondTvecs = new Dictionary<Aruco.Dictionary, Std.VectorVec3d>[arucoCamera.CameraNumber];\n\n      for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)\n      {\n        DiamondCorners[cameraId] = new Dictionary<Aruco.Dictionary, Std.VectorVectorPoint2f>();\n        DiamondIds[cameraId] = new Dictionary<Aruco.Dictionary, Std.VectorVec4i>();\n        DetectedDiamonds[cameraId] = new Dictionary<Aruco.Dictionary, int>();\n        DiamondRvecs[cameraId] = new Dictionary<Aruco.Dictionary, Std.VectorVec3d>();\n        DiamondTvecs[cameraId] = new Dictionary<Aruco.Dictionary, Std.VectorVec3d>();\n\n        foreach (var arucoObjectDictionary in arucoTracker.ArucoObjects)\n        {\n          Aruco.Dictionary dictionary = arucoObjectDictionary.Key;\n\n          DiamondCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f());\n          DiamondIds[cameraId].Add(dictionary, new Std.VectorVec4i());\n          DetectedDiamonds[cameraId].Add(dictionary, 0);\n          DiamondRvecs[cameraId].Add(dictionary, new Std.VectorVec3d());\n          DiamondTvecs[cameraId].Add(dictionary, new Std.VectorVec3d());\n        }\n      }\n    }\n\n    public override void Deactivate()\n    {\n      base.Deactivate();\n\n      DiamondCorners = null;\n      DiamondIds = null;\n      DetectedDiamonds = null;\n      DiamondRvecs = null;\n      DiamondTvecs = null;\n    }\n\n    public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)\n    {\n      base.Detect(cameraId, dictionary, image);\n\n      ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker;\n\n      Std.VectorVectorPoint2f diamondCorners = null;\n      Std.VectorVec4i diamondIds = null;\n\n      if (markerTracker.DetectedMarkers[cameraId][dictionary] > 0)\n      {\n        if (arucoCameraUndistortion == null)\n        {\n          Aruco.DetectCharucoDiamond(image, markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary],\n            DetectSquareMarkerLengthRate, out diamondCorners, out diamondIds);\n        }\n        else\n        {\n          Aruco.DetectCharucoDiamond(image, markerTracker.MarkerCorners[cameraId][dictionary], markerTracker.MarkerIds[cameraId][dictionary],\n            DetectSquareMarkerLengthRate, out diamondCorners, out diamondIds, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId],\n            arucoCameraUndistortion.UndistortedDistCoeffs[cameraId]);\n        }\n      }\n\n      DiamondCorners[cameraId][dictionary] = diamondCorners;\n      DiamondIds[cameraId][dictionary] = diamondIds;\n      DetectedDiamonds[cameraId][dictionary] = (diamondIds != null) ? (int)diamondIds.Size() : 0;\n    }\n\n    public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)\n    {\n      base.Draw(cameraId, dictionary, image);\n\n      if (DetectedDiamonds[cameraId][dictionary] > 0)\n      {\n        // Draw detected diamonds\n        if (arucoTracker.DrawDetectedDiamonds)\n        {\n          Aruco.DrawDetectedDiamonds(image, DiamondCorners[cameraId][dictionary], DiamondIds[cameraId][dictionary]);\n        }\n\n        // Draw axes of detected diamonds\n        if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && DiamondRvecs[cameraId][dictionary] != null)\n        {\n          for (uint i = 0; i < DetectedDiamonds[cameraId][dictionary]; i++)\n          {\n            Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId],\n            DiamondRvecs[cameraId][dictionary].At(i), DiamondTvecs[cameraId][dictionary].At(i), DrawAxisLength);\n          }\n        }\n      }\n    }\n\n    public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary)\n    {\n      base.EstimateTransforms(cameraId, dictionary);\n\n      Std.VectorVec3d diamondRvecs = null, diamondTvecs = null;\n\n      if (DetectedDiamonds[cameraId][dictionary] > 0 && arucoCameraUndistortion != null)\n      {\n        Aruco.EstimatePoseSingleMarkers(DiamondCorners[cameraId][dictionary], EstimatePoseSquareLength, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId],\n          arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], out diamondRvecs, out diamondTvecs);\n      }\n\n      DiamondRvecs[cameraId][dictionary] = diamondRvecs;\n      DiamondTvecs[cameraId][dictionary] = diamondTvecs;\n    }\n\n    public override void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary)\n    {\n      base.UpdateTransforms(cameraId, dictionary);\n\n      if (DiamondRvecs[cameraId][dictionary] != null)\n      {\n        for (uint i = 0; i < DetectedDiamonds[cameraId][dictionary]; i++)\n        {\n          ArucoDiamond foundArucoDiamond;\n          if (TryGetArucoDiamond(cameraId, dictionary, i, out foundArucoDiamond))\n          {\n            float positionFactor = foundArucoDiamond.SquareSideLength * EstimatePoseSquareLength / DetectSquareMarkerLengthRate; // Equal to marker length\n            arucoCameraDisplay.PlaceArucoObject(foundArucoDiamond.transform, cameraId,\n              arucoTracker.MarkerTracker.MarkerTvecs[cameraId][dictionary].At(i).ToPosition() * positionFactor,\n              arucoTracker.MarkerTracker.MarkerRvecs[cameraId][dictionary].At(i).ToRotation());\n          }\n        }\n      }\n    }\n\n    protected virtual bool TryGetArucoDiamond(int cameraId, Aruco.Dictionary dictionary, uint arucoObjectId, out ArucoDiamond arucoDiamond)\n    {\n      int[] detectedDiamondIds = new int[4];\n      for (int j = 0; j < 4; j++)\n      {\n        detectedDiamondIds[j] = DiamondIds[cameraId][dictionary].At(arucoObjectId).Get(j);\n      }\n\n      ArucoObject foundArucoObject;\n      int detectedDiamondHashCode = ArucoDiamond.GetArucoHashCode(detectedDiamondIds);\n      if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedDiamondHashCode, out foundArucoObject))\n      {\n        arucoDiamond = foundArucoObject as ArucoDiamond;\n        if (arucoDiamond != null)\n        {\n          return true;\n        }\n      }\n\n      arucoDiamond = null;\n      return false;\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoDiamondTracker.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 9dc64ceca377f264ba826f1de3af6752\r\ntimeCreated: 1487619150\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoGridBoardTracker.cs",
    "content": "﻿using ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  public class ArucoGridBoardTracker : ArucoObjectTracker\n  {\n    // ArucoObjectTracker methods\n\n    public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)\n    {\n      base.Detect(cameraId, dictionary, image);\n\n      ArucoMarkerTracker markerTracker = arucoTracker.MarkerTracker;\n\n      if (arucoTracker.RefineDetectedMarkers && arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] > 0)\n      {\n        foreach (var arucoBoard in arucoTracker.GetArucoObjects<ArucoGridBoard>(dictionary))\n        {\n          Aruco.RefineDetectedMarkers(image, arucoBoard.Board, markerTracker.MarkerCorners[cameraId][dictionary],\n            markerTracker.MarkerIds[cameraId][dictionary], markerTracker.RejectedCandidateCorners[cameraId][dictionary]);\n          markerTracker.DetectedMarkers[cameraId][dictionary] = (int)markerTracker.MarkerIds[cameraId][dictionary].Size();\n        }\n      }\n    }\n\n    public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)\n    {\n      base.Draw(cameraId, dictionary, image);\n\n      foreach (var arucoGridBoard in arucoTracker.GetArucoObjects<ArucoGridBoard>(dictionary))\n      {\n        if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && arucoGridBoard.Rvec != null)\n        {\n          Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId],\n            arucoGridBoard.Rvec, arucoGridBoard.Tvec, arucoGridBoard.AxisLength);\n        }\n      }\n    }\n\n    public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary)\n    {\n      base.EstimateTransforms(cameraId, dictionary);\n\n      foreach (var arucoGridBoard in arucoTracker.GetArucoObjects<ArucoGridBoard>(dictionary))\n      {\n        Cv.Vec3d rvec = null, tvec = null;\n        int markersUsedForEstimation = 0;\n\n        if (arucoTracker.MarkerTracker.DetectedMarkers[cameraId][dictionary] > 0 && arucoCameraUndistortion != null)\n        {\n          markersUsedForEstimation = Aruco.EstimatePoseBoard(arucoTracker.MarkerTracker.MarkerCorners[cameraId][dictionary],\n            arucoTracker.MarkerTracker.MarkerIds[cameraId][dictionary], arucoGridBoard.Board, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId],\n            arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], out rvec, out tvec);\n        }\n\n        arucoGridBoard.Rvec = rvec;\n        arucoGridBoard.Tvec = tvec;\n        arucoGridBoard.MarkersUsedForEstimation = markersUsedForEstimation;\n      }\n    }\n\n    public override void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary)\n    {\n      base.UpdateTransforms(cameraId, dictionary);\n\n      // Update transform of each tracked board\n      foreach (var arucoGridBoard in arucoTracker.GetArucoObjects<ArucoGridBoard>(dictionary))\n      {\n        if (arucoGridBoard.Rvec != null)\n        {\n          // Adjust the estimated coordinates\n          var position = arucoGridBoard.Tvec.ToPosition()\n            + arucoGridBoard.transform.right * arucoGridBoard.GetGameObjectScale().x / 2\n            + arucoGridBoard.transform.forward * arucoGridBoard.GetGameObjectScale().z / 2;\n\n          arucoCameraDisplay.PlaceArucoObject(arucoGridBoard.transform, cameraId, position, arucoGridBoard.Rvec.ToRotation());\n        }\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoGridBoardTracker.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 444e053177bf32444b0863b16780a8f7\r\ntimeCreated: 1487619379\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoMarkerTracker.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  public class ArucoMarkerTracker : ArucoObjectTracker\n  {\n    // Constants\n\n    protected const float estimatePoseMarkerLength = 1f;\n    protected readonly Color rejectedMarkerCandidatesColor = new Color(100, 0, 255);\n\n    // Properties\n\n    public Dictionary<Aruco.Dictionary, int>[] DetectedMarkers { get; protected internal set; }\n\n    /// <summary>\n    /// Vector of the detected marker corners on each <see cref=\"ArucoCamera.Images\"/>. Updated by <see cref=\"Detect\"/>.\n    /// </summary>\n    public Dictionary<Aruco.Dictionary, Std.VectorVectorPoint2f>[] MarkerCorners { get; protected internal set; }\n\n    /// <summary>\n    /// Vector of identifiers of the detected markers on each <see cref=\"ArucoCamera.Images\"/>. Updated by <see cref=\"Detect\"/>.\n    /// </summary>\n    public Dictionary<Aruco.Dictionary, Std.VectorInt>[] MarkerIds { get; protected internal set; }\n\n    /// <summary>\n    /// Vector of the corners with not a correct identification on each <see cref=\"ArucoCamera.Images\"/>. Updated by <see cref=\"Detect\"/>.\n    /// </summary>\n    public Dictionary<Aruco.Dictionary, Std.VectorVectorPoint2f>[] RejectedCandidateCorners { get; protected internal set; }\n\n    /// <summary>\n    /// Vector of rotation vectors of the detected markers on each <see cref=\"ArucoCamera.Images\"/>.\n    /// </summary>\n    public Dictionary<Aruco.Dictionary, Std.VectorVec3d>[] MarkerRvecs { get; protected internal set; }\n\n    /// <summary>\n    /// Vector of translation vectors of the detected markers on each <see cref=\"ArucoCamera.Images\"/>.\n    /// </summary>\n    public Dictionary<Aruco.Dictionary, Std.VectorVec3d>[] MarkerTvecs { get; protected internal set; }\n\n    // ArucoObjectsController related methods\n\n    protected override void ArucoObjectsController_DictionaryAdded(Aruco.Dictionary dictionary)\n    {\n      for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)\n      {\n        MarkerCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f());\n        MarkerIds[cameraId].Add(dictionary, new Std.VectorInt());\n        RejectedCandidateCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f());\n        MarkerRvecs[cameraId].Add(dictionary, new Std.VectorVec3d());\n        MarkerTvecs[cameraId].Add(dictionary, new Std.VectorVec3d());\n        DetectedMarkers[cameraId].Add(dictionary, 0);\n      }\n    }\n\n    protected override void ArucoObjectsController_DictionaryRemoved(Aruco.Dictionary dictionary)\n    {\n      for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)\n      {\n        MarkerCorners[cameraId].Remove(dictionary);\n        MarkerIds[cameraId].Remove(dictionary);\n        RejectedCandidateCorners[cameraId].Remove(dictionary);\n        MarkerRvecs[cameraId].Remove(dictionary);\n        MarkerTvecs[cameraId].Remove(dictionary);\n        DetectedMarkers[cameraId].Remove(dictionary);\n      }\n    }\n\n    // ArucoObjectTracker methods\n\n    public override void Activate(IArucoObjectsTracker arucoTracker)\n    {\n      base.Activate(arucoTracker);\n\n      // Initialize the properties and the ArUco objects\n      MarkerCorners = new Dictionary<Aruco.Dictionary, Std.VectorVectorPoint2f>[arucoCamera.CameraNumber];\n      MarkerIds = new Dictionary<Aruco.Dictionary, Std.VectorInt>[arucoCamera.CameraNumber];\n      RejectedCandidateCorners = new Dictionary<Aruco.Dictionary, Std.VectorVectorPoint2f>[arucoCamera.CameraNumber];\n      MarkerRvecs = new Dictionary<Aruco.Dictionary, Std.VectorVec3d>[arucoCamera.CameraNumber];\n      MarkerTvecs = new Dictionary<Aruco.Dictionary, Std.VectorVec3d>[arucoCamera.CameraNumber];\n      DetectedMarkers = new Dictionary<Aruco.Dictionary, int>[arucoCamera.CameraNumber];\n\n      for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)\n      {\n        MarkerCorners[cameraId] = new Dictionary<Aruco.Dictionary, Std.VectorVectorPoint2f>();\n        MarkerIds[cameraId] = new Dictionary<Aruco.Dictionary, Std.VectorInt>();\n        RejectedCandidateCorners[cameraId] = new Dictionary<Aruco.Dictionary, Std.VectorVectorPoint2f>();\n        MarkerRvecs[cameraId] = new Dictionary<Aruco.Dictionary, Std.VectorVec3d>();\n        MarkerTvecs[cameraId] = new Dictionary<Aruco.Dictionary, Std.VectorVec3d>();\n        DetectedMarkers[cameraId] = new Dictionary<Aruco.Dictionary, int>();\n\n        foreach (var arucoObjectDictionary in arucoTracker.ArucoObjects)\n        {\n          Aruco.Dictionary dictionary = arucoObjectDictionary.Key;\n\n          MarkerCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f());\n          MarkerIds[cameraId].Add(dictionary, new Std.VectorInt());\n          RejectedCandidateCorners[cameraId].Add(dictionary, new Std.VectorVectorPoint2f());\n          MarkerRvecs[cameraId].Add(dictionary, new Std.VectorVec3d());\n          MarkerTvecs[cameraId].Add(dictionary, new Std.VectorVec3d());\n          DetectedMarkers[cameraId].Add(dictionary, 0);\n        }\n      }\n    }\n\n    public override void Deactivate()\n    {\n      base.Deactivate();\n\n      MarkerCorners = null;\n      MarkerIds = null;\n      RejectedCandidateCorners = null;\n      MarkerRvecs = null;\n      MarkerTvecs = null;\n      DetectedMarkers = null;\n    }\n\n    public override void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)\n    {\n      base.Detect(cameraId, dictionary, image);\n\n      Std.VectorVectorPoint2f markerCorners, rejectedCandidateCorners;\n      Std.VectorInt markerIds;\n\n      Aruco.DetectMarkers(image, dictionary, out markerCorners, out markerIds, arucoTracker.DetectorParameters, out rejectedCandidateCorners);\n\n      DetectedMarkers[cameraId][dictionary] = (int)markerIds.Size();\n      MarkerCorners[cameraId][dictionary] = markerCorners;\n      MarkerIds[cameraId][dictionary] = markerIds;\n      RejectedCandidateCorners[cameraId][dictionary] = rejectedCandidateCorners;\n    }\n\n    public override void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)\n    {\n      base.Draw(cameraId, dictionary, image);\n\n      if (DetectedMarkers[cameraId][dictionary] > 0)\n      {\n        // Draw all the detected markers\n        if (arucoTracker.DrawDetectedMarkers)\n        {\n          Aruco.DrawDetectedMarkers(image, MarkerCorners[cameraId][dictionary], MarkerIds[cameraId][dictionary]);\n        }\n\n        // Draw axes of detected tracked markers\n        if (arucoTracker.DrawAxes && arucoCameraUndistortion != null && MarkerRvecs[cameraId][dictionary] != null)\n        {\n          for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++)\n          {\n            ArucoObject foundArucoObject;\n            int detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i));\n            if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject))\n            {\n              Aruco.DrawAxis(image, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId], arucoCameraUndistortion.UndistortedDistCoeffs[cameraId],\n                MarkerRvecs[cameraId][dictionary].At(i), MarkerTvecs[cameraId][dictionary].At(i), estimatePoseMarkerLength);\n            }\n          }\n        }\n      }\n\n      // Draw the rejected marker candidates\n      if (arucoTracker.DrawRejectedCandidates && RejectedCandidateCorners[cameraId][dictionary].Size() > 0)\n      {\n        Aruco.DrawDetectedMarkers(image, RejectedCandidateCorners[cameraId][dictionary]);\n      }\n    }\n\n    public override void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary)\n    {\n      base.EstimateTransforms(cameraId, dictionary);\n\n      Std.VectorVec3d rvecs = null, tvecs = null;\n\n      if (DetectedMarkers[cameraId][dictionary] > 0 && arucoCameraUndistortion != null)\n      {\n        Aruco.EstimatePoseSingleMarkers(MarkerCorners[cameraId][dictionary], estimatePoseMarkerLength, arucoCameraUndistortion.RectifiedCameraMatrices[cameraId],\n          arucoCameraUndistortion.UndistortedDistCoeffs[cameraId], out rvecs, out tvecs);\n      }\n\n      MarkerRvecs[cameraId][dictionary] = rvecs;\n      MarkerTvecs[cameraId][dictionary] = tvecs;\n    }\n\n    public override void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary)\n    {\n      base.UpdateTransforms(cameraId, dictionary);\n\n      if (MarkerRvecs[cameraId][dictionary] != null)\n      {\n        for (uint i = 0; i < DetectedMarkers[cameraId][dictionary]; i++)\n        {\n          ArucoObject foundArucoObject;\n          int detectedMarkerHashCode = ArucoMarker.GetArucoHashCode(MarkerIds[cameraId][dictionary].At(i));\n          if (arucoTracker.ArucoObjects[dictionary].TryGetValue(detectedMarkerHashCode, out foundArucoObject))\n          {\n            var localPosition = MarkerTvecs[cameraId][dictionary].At(i).ToPosition() * foundArucoObject.MarkerSideLength / estimatePoseMarkerLength;\n            arucoCameraDisplay.PlaceArucoObject(foundArucoObject.transform, cameraId, localPosition,\n              MarkerRvecs[cameraId][dictionary].At(i).ToRotation());\n          }\n        }\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoMarkerTracker.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 014974a785f11b944bf780a4a3a84995\r\ntimeCreated: 1487619347\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectDetector.cs",
    "content": "﻿using ArucoUnity.Cameras;\nusing ArucoUnity.Plugin;\nusing System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  /// <summary>\n  /// Detects ArUco objects for a <see cref=\"ArucoCamera\"/> camera system according to <see cref=\"DetectorParameters\"/>.\n  /// </summary>\n  public abstract class ArucoObjectDetector : ArucoCameraController, IHasDetectorParameter\n  {\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"The parameters to use for the marker detection.\")]\n    private DetectorParametersController detectorParametersController;\n\n    // Properties\n\n    /// <summary>\n    /// Gets or sets the parameters to use for the detection.\n    /// </summary>\n    public Aruco.DetectorParameters DetectorParameters { get; set; }\n\n    // ConfigurableController methods\n\n    /// <summary>\n    /// Checks if <see cref=\"DetectorParameters\"/> is set.\n    /// </summary>\n    protected override void Configuring()\n    {\n      base.Configuring();\n\n      DetectorParameters = detectorParametersController.DetectorParameters;\n      if (DetectorParameters == null)\n      {\n        throw new ArgumentNullException(\"DetectorParameters\", \"This property needs to be set for the configuration.\");\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectDetector.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 3530d31a8349e4c48b59002deb2dcde8\r\ntimeCreated: 1484072734\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectTracker.cs",
    "content": "﻿using ArucoUnity.Cameras;\nusing ArucoUnity.Cameras.Displays;\nusing ArucoUnity.Cameras.Undistortions;\nusing ArucoUnity.Plugin;\nusing System;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  /// <summary>\n  /// Base for detecting and estimating the transform of an ArUco object.\n  /// </summary>\n  public abstract class ArucoObjectTracker\n  {\n    // Properties\n\n    /// <summary>\n    /// Is the tracker configured and activated?\n    /// </summary>\n    public bool IsActivated { get; protected set; }\n\n    // Variables\n\n    protected IArucoObjectsTracker arucoTracker;\n    protected IArucoCamera arucoCamera;\n    protected IArucoCameraUndistortion arucoCameraUndistortion;\n    protected IArucoCameraDisplay arucoCameraDisplay;\n\n    // ArucoObjectsController related methods\n\n    /// <summary>\n    /// Update the properties when a new dictionary is added.\n    /// </summary>\n    /// <param name=\"dictionary\">The new dictionary.</param>\n    protected virtual void ArucoObjectsController_DictionaryAdded(Aruco.Dictionary dictionary)\n    {\n    }\n\n    /// <summary>\n    /// Update the properties when a dictionary is removed.\n    /// </summary>\n    /// <param name=\"dictionary\">The removed dictionary.</param>\n    protected virtual void ArucoObjectsController_DictionaryRemoved(Aruco.Dictionary dictionary)\n    {\n    }\n\n    // Methods\n\n    /// <summary>\n    /// Configure and activate the tracker.\n    /// </summary>\n    public virtual void Activate(IArucoObjectsTracker arucoTracker)\n    {\n      this.arucoTracker = arucoTracker;\n      arucoCamera = arucoTracker.ArucoCamera;\n      arucoCameraUndistortion = arucoTracker.ArucoCameraDisplay.ArucoCameraUndistortion;\n      arucoCameraDisplay = arucoTracker.ArucoCameraDisplay;\n      IsActivated = true;\n\n      arucoTracker.DictionaryAdded += ArucoObjectsController_DictionaryAdded;\n      arucoTracker.DictionaryRemoved += ArucoObjectsController_DictionaryRemoved;\n    }\n\n\n    /// <summary>\n    /// Deactivate the tracker.\n    /// </summary>\n    public virtual void Deactivate()\n    {\n      arucoTracker.DictionaryAdded -= ArucoObjectsController_DictionaryAdded;\n      arucoTracker.DictionaryRemoved -= ArucoObjectsController_DictionaryRemoved;\n\n      IsActivated = false;\n    }\n\n    /// <summary>\n    /// Detect the ArUco objects on the current image of a camera.\n    /// </summary>\n    /// <param name=\"cameraId\">The id of the camera to use.</param>\n    /// <param name=\"dictionary\">The dictionary to use for the detection.</param>\n    public virtual void Detect(int cameraId, Aruco.Dictionary dictionary)\n    {\n      Detect(cameraId, dictionary, arucoCamera.Images[cameraId]);\n    }\n\n    /// <summary>\n    /// Detect the ArUco objects for a camera on an custom image.\n    /// </summary>\n    /// <param name=\"cameraId\">The id of the camera.</param>\n    /// <param name=\"dictionary\">The dictionary to use for the detection.</param>\n    /// <param name=\"image\">The image to use for the detection.</param>\n    public virtual void Detect(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)\n    {\n      if (!IsActivated)\n      {\n        throw new Exception(\"Activate the tracker before detecting ArUco objects.\");\n      }\n    }\n\n    /// <summary>\n    /// Draw the detected ArUco objects on the current image of a camera.\n    /// </summary>\n    /// <param name=\"cameraId\">The id of the camera to use.</param>\n    /// <param name=\"dictionary\">The dictionary to use.</param>\n    public virtual void Draw(int cameraId, Aruco.Dictionary dictionary)\n    {\n      Draw(cameraId, dictionary, arucoCamera.Images[cameraId]);\n    }\n\n    /// <summary>\n    /// Draw the detected ArUco objects for a camera on a custom image.\n    /// </summary>\n    /// <param name=\"cameraId\">The id of the camera to use.</param>\n    /// <param name=\"dictionary\">The dictionary to use.</param>\n    /// <param name=\"image\">Draw on this image.</param>\n    public virtual void Draw(int cameraId, Aruco.Dictionary dictionary, Cv.Mat image)\n    {\n      if (!IsActivated)\n      {\n        throw new Exception(\"Activate the tracker before drawing ArUco objects.\");\n      }\n    }\n\n    /// <summary>\n    /// Estimate the gameObject's transform of each detected ArUco object.\n    /// </summary>\n    /// <param name=\"cameraId\">The id of the camera to use.</param>\n    /// <param name=\"dictionary\">The dictionary to use.</param>\n    public virtual void EstimateTransforms(int cameraId, Aruco.Dictionary dictionary)\n    {\n      if (!IsActivated)\n      {\n        throw new Exception(\"Activate the tracker before estimating transforms of ArUco objects.\");\n      }\n    }\n\n    /// <summary>\n    /// Place and orient the detected ArUco objects relative to a camera.\n    /// </summary>\n    /// <param name=\"cameraId\">The id of the camera to use.</param>\n    /// <param name=\"dictionary\">The dictionary to use.</param>\n    public virtual void UpdateTransforms(int cameraId, Aruco.Dictionary dictionary)\n    {\n      if (!IsActivated)\n      {\n        throw new Exception(\"Activate the tracker before updating transforms of ArUco objects.\");\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectTracker.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: c1ab9da512bec8f4291e399fb49439d8\r\ntimeCreated: 1487614490\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectsController.cs",
    "content": "﻿using UnityEngine;\nusing System.Collections.Generic;\nusing ArucoUnity.Plugin;\nusing System;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  /// <summary>\n  /// Manages a list of <see cref=\"ArucoObject\"/> to detect for a <see cref=\"ArucoCamera\"/> camera system.\n  /// </summary>\n  public abstract class ArucoObjectsController : ArucoObjectDetector, IArucoObjectsController\n  {\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"The list of the ArUco objects to detect.\")]\n    private ArucoObject[] arucoObjects;\n\n    // IArucoObjectsController events\n\n    public event Action<ArucoObject> ArucoObjectAdded = delegate { };\n    public event Action<ArucoObject> ArucoObjectRemoved = delegate { };\n    public event Action<Aruco.Dictionary> DictionaryAdded = delegate { };\n    public event Action<Aruco.Dictionary> DictionaryRemoved = delegate { };\n\n    // IArucoObjectsController Properties\n\n    public Dictionary<Aruco.Dictionary, Dictionary<int, ArucoObject>> ArucoObjects { get; protected set; }\n\n    // MonoBehaviour methods\n\n    /// <summary>\n    /// Initializes the properties.\n    /// </summary>\n    protected override void Awake()\n    {\n      base.Awake();\n      ArucoObjects = new Dictionary<Aruco.Dictionary, Dictionary<int, ArucoObject>>();\n    }\n\n    /// <summary>\n    /// Adds to the <see cref=\"ArucoObjects\"/> list the ArUco objects added from the editor field array <see cref=\"arucoObjects\"/>.\n    /// </summary>\n    protected override void Start()\n    {\n      foreach (ArucoObject arucoObject in arucoObjects)\n      {\n        AddArucoObject(arucoObject);\n      }\n      base.Start();\n    }\n\n    // IArucoObjectsController Methods\n\n    public virtual void AddArucoObject(ArucoObject arucoObject)\n    {\n      // Make sure the object is started and initialized\n      arucoObject.gameObject.SetActive(true);\n\n      // Try to find a list with the same dictionary than the new ArUco object\n      Dictionary<int, ArucoObject> arucoObjectsCollection = null;\n      foreach (var arucoObjectDictionary in ArucoObjects)\n      {\n        if (arucoObjectDictionary.Key.Name == arucoObject.Dictionary.Name || arucoObjectDictionary.Key == arucoObject.Dictionary)\n        {\n          arucoObjectsCollection = arucoObjectDictionary.Value;\n          break;\n        }\n      }\n\n      // If not found, create the new list attached to this dictionary\n      if (arucoObjectsCollection == null)\n      {\n        arucoObjectsCollection = new Dictionary<int, ArucoObject>();\n        ArucoObjects.Add(arucoObject.Dictionary, arucoObjectsCollection);\n        DictionaryAdded(arucoObject.Dictionary);\n      }\n      // Return if the ArUco object is already in the list \n      else\n      {\n        if (arucoObjectsCollection.ContainsKey(arucoObject.ArucoHashCode))\n        {\n          return;\n        }\n      }\n\n      // Suscribe to property events on the aruco object\n      arucoObject.PropertyUpdating += ArucoObject_PropertyUpdating;\n      arucoObject.PropertyUpdated += ArucoObject_PropertyUpdated;\n\n      // Add the ArUco object to the list\n      arucoObjectsCollection.Add(arucoObject.ArucoHashCode, arucoObject);\n      ArucoObjectAdded(arucoObject);\n    }\n\n    public virtual void RemoveArucoObject(ArucoObject arucoObject)\n    {\n      // Find the list with the same dictionary than the ArUco object to remove\n      Dictionary<int, ArucoObject> arucoObjectsCollection = null;\n      foreach (var arucoObjectDictionary in ArucoObjects)\n      {\n        if (arucoObjectDictionary.Key.Name == arucoObject.Dictionary.Name || arucoObjectDictionary.Key == arucoObject.Dictionary)\n        {\n          arucoObjectsCollection = arucoObjectDictionary.Value;\n          break;\n        }\n      }\n\n      if (arucoObjectsCollection == null)\n      {\n        throw new ArgumentException(\"Can't remove the ArUco object: not found.\", \"arucoObject\");\n      }\n\n      // Remove the ArUco object\n      arucoObjectsCollection.Remove(arucoObject.ArucoHashCode);\n      ArucoObjectRemoved(arucoObject);\n\n      // Unsuscribe to property events on the aruco object\n      arucoObject.PropertyUpdating -= ArucoObject_PropertyUpdating;\n      arucoObject.PropertyUpdated -= ArucoObject_PropertyUpdated;\n\n      // If the list is empty, remove it with its dictionary\n      if (arucoObjectsCollection.Count == 0)\n      {\n        ArucoObjects.Remove(arucoObject.Dictionary);\n        DictionaryRemoved(arucoObject.Dictionary);\n      }\n    }\n\n    public virtual HashSet<U> GetArucoObjects<U>(Aruco.Dictionary dictionary) where U : ArucoObject\n    {\n      if (!ArucoObjects.ContainsKey(dictionary))\n      {\n        throw new ArgumentException(\"This dictionary is not found.\", \"dictionary\");\n      }\n\n      HashSet<U> arucoTObjectsCollection = new HashSet<U>();\n      foreach (var arucoObject in ArucoObjects[dictionary])\n      {\n        U arucoTObject = arucoObject.Value as U;\n        if (arucoTObject != null)\n        {\n          arucoTObjectsCollection.Add(arucoTObject);\n        }\n      }\n      return arucoTObjectsCollection;\n    }\n\n    // Methods\n\n    /// <summary>\n    /// Remove an ArucoObject from the <see cref=\"ArucoObjects\"/> list, before the its properties will be updated.\n    /// </summary>\n    /// <param name=\"arucoObject\">The updated ArUco object.</param>\n    protected virtual void ArucoObject_PropertyUpdating(ArucoObject arucoObject)\n    {\n      RemoveArucoObject(arucoObject);\n    }\n\n    /// <summary>\n    /// Re-adds the updated ArUco object the <see cref=\"ArucoObjects\"/> list.\n    /// </summary>\n    /// <param name=\"arucoObject\">The updated ArUco object.</param>\n    protected virtual void ArucoObject_PropertyUpdated(ArucoObject arucoObject)\n    {\n      AddArucoObject(arucoObject);\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectsController.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 7ba29fe720f3b0f49ac8d8433b75b781\r\ntimeCreated: 1484775909\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectsTracker.cs",
    "content": "﻿using ArucoUnity.Cameras.Displays;\nusing ArucoUnity.Plugin;\nusing ArucoUnity.Utilities;\nusing UnityEngine;\nusing System;\nusing System.Collections.Generic;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  /// <summary>\n  /// Detects <see cref=\"ArucoObject\"/>, displays detections and applies the estimated transforms to gameObjects associated to the ArUco objects.\n  /// \n  /// See the OpenCV documentation for more information about the marker detection: http://docs.opencv.org/3.2.0/d5/dae/tutorial_aruco_detection.html\n  /// </summary>\n  public class ArucoObjectsTracker : ArucoObjectsController, IArucoObjectsTracker\n  {\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"The display associated with the camera.\")]\n    private ArucoCameraDisplay arucoCameraDisplay;\n\n    [SerializeField]\n    [Tooltip(\"Apply refine strategy to detect more markers using the boards in the Aruco Object list.\")]\n    private bool refineDetectedMarkers = true;\n\n    [SerializeField]\n    [Tooltip(\"Display the detected markers in the CameraImageTexture.\")]\n    private bool drawDetectedMarkers = true;\n\n    [SerializeField]\n    [Tooltip(\"Display the rejected markers candidates.\")]\n    private bool drawRejectedCandidates = false;\n\n    [SerializeField]\n    [Tooltip(\"Display the axis of the detected boards and diamonds.\")]\n    private bool drawAxes = true;\n\n    [SerializeField]\n    [Tooltip(\"Display the markers of the detected ChArUco boards.\")]\n    private bool drawDetectedCharucoMarkers = true;\n\n    [SerializeField]\n    [Tooltip(\"Display the detected diamonds.\")]\n    private bool drawDetectedDiamonds = true;\n\n    // IArucoObjectsTracker properties\n\n    public IArucoCameraDisplay ArucoCameraDisplay { get; set; }\n    public bool RefineDetectedMarkers { get { return refineDetectedMarkers; } set { refineDetectedMarkers = value; } }\n    public bool DrawDetectedMarkers { get { return drawDetectedMarkers; } set { drawDetectedMarkers = value; } }\n    public bool DrawRejectedCandidates { get { return drawRejectedCandidates; } set { drawRejectedCandidates = value; } }\n    public bool DrawAxes { get { return drawAxes; } set { drawAxes = value; } }\n    public bool DrawDetectedCharucoMarkers { get { return drawDetectedCharucoMarkers; } set { drawDetectedCharucoMarkers = value; } }\n    public bool DrawDetectedDiamonds { get { return drawDetectedDiamonds; } set { drawDetectedDiamonds = value; } }\n    public ArucoMarkerTracker MarkerTracker { get; protected set; }\n\n    // Variables\n\n    protected Dictionary<Type, ArucoObjectTracker> additionalTrackers;\n    protected ArucoCameraSeparateThread trackingThread;\n\n    // MonoBehaviour methods\n\n    /// <summary>\n    /// Initializes the trackers list and sets <see cref=\"ArucoCameraDisplay\"/> from editor field if not null.\n    /// </summary>\n    protected override void Awake()\n    {\n      base.Awake();\n\n      MarkerTracker = new ArucoMarkerTracker();\n      additionalTrackers = new Dictionary<Type, ArucoObjectTracker>()\n        {\n          { typeof(ArucoGridBoard), new ArucoGridBoardTracker() },\n          { typeof(ArucoCharucoBoard), new ArucoCharucoBoardTracker() },\n          { typeof(ArucoDiamond), new ArucoDiamondTracker() }\n        };\n\n      if (arucoCameraDisplay != null)\n      {\n        ArucoCameraDisplay = arucoCameraDisplay;\n      }\n    }\n\n    // ConfigurableController methods\n\n    /// <summary>\n    /// Add <see cref=\"ArucoCameraDisplay\"/> as dependency.\n    /// </summary>\n    protected override void Configuring()\n    {\n      if (ArucoCameraDisplay == null)\n      {\n        throw new ArgumentNullException(\"ArucoCameraDisplay\", \"This property needs to be set for the configuration.\");\n      }\n\n      ArucoCamera = ArucoCameraDisplay.ArucoCamera;\n      AddDependency(ArucoCameraDisplay);\n\n      base.Configuring();\n    }\n\n    /// <summary>\n    /// Initializes the tracking, activates the trackers, susbcribes to the <see cref=\"ArucoObjectsController{T}.ArucoObjectAdded\"/> and\n    /// <see cref=\"ArucoObjectsController{T}.ArucoObjectRemoved\"/> events and starts the tracking thread.\n    /// </summary>\n    protected override void Starting()\n    {\n      base.Starting();\n\n      MarkerTracker.Activate(this);\n      foreach (var arucoObjectDictionary in ArucoObjects)\n      {\n        foreach (var arucoObject in arucoObjectDictionary.Value)\n        {\n          ArucoObjectsController_ArucoObjectAdded(arucoObject.Value);\n        }\n      }\n\n      ArucoObjectAdded += ArucoObjectsController_ArucoObjectAdded;\n      ArucoObjectRemoved += ArucoObjectsController_ArucoObjectRemoved;\n\n      ArucoCamera.ImagesUpdated += ArucoCamera_ImagesUpdated;\n      trackingThread = new ArucoCameraSeparateThread(ArucoCamera, TrackArucoObjects)\n      {\n        CopyBackImages = DrawDetectedMarkers || DrawRejectedCandidates || DrawAxes || DrawDetectedCharucoMarkers || DrawDetectedDiamonds\n      };\n      trackingThread.Start();\n    }\n\n    /// <summary>\n    /// Unsuscribes from ArucoObjectController events, deactivates the trackers and abort the tracking thread and stops the tracking thread.\n    /// </summary>\n    protected override void Stopping()\n    {\n      base.Stopping();\n\n      trackingThread.Stop();\n      ArucoCamera.ImagesUpdated -= ArucoCamera_ImagesUpdated;\n\n      ArucoObjectAdded -= ArucoObjectsController_ArucoObjectAdded;\n      ArucoObjectRemoved -= ArucoObjectsController_ArucoObjectRemoved;\n\n      MarkerTracker.Deactivate();\n      foreach (var tracker in additionalTrackers)\n      {\n        if (tracker.Value.IsActivated)\n        {\n          tracker.Value.Deactivate();\n        }\n      }\n    }\n\n    // ArucoObjectController methods\n\n    /// <summary>\n    /// Activates the tracker associated with the <paramref name=\"arucoObject\"/> and configure its gameObject.\n    /// </summary>\n    /// <param name=\"arucoObject\">The added ArUco object.</param>\n    protected virtual void ArucoObjectsController_ArucoObjectAdded(ArucoObject arucoObject)\n    {\n      if (arucoObject.GetType() != typeof(ArucoMarker))\n      {\n        ArucoObjectTracker tracker = null;\n        if (!additionalTrackers.TryGetValue(arucoObject.GetType(), out tracker))\n        {\n          throw new ArgumentException(\"No tracker found for the type '\" + arucoObject.GetType() + \"'.\", \"arucoObject\");\n        }\n        else if (!tracker.IsActivated)\n        {\n          tracker.Activate(this);\n        }\n      }\n    }\n\n    /// <summary>\n    /// Deactivates the tracker associated with the <paramref name=\"arucoObject\"/> if it was the last one of this type.\n    /// </summary>\n    /// <param name=\"arucoObject\">The removed</param>\n    protected virtual void ArucoObjectsController_ArucoObjectRemoved(ArucoObject arucoObject)\n    {\n      ArucoObjectTracker tracker = null;\n      if (arucoObject.GetType() == typeof(ArucoMarker) || !additionalTrackers.TryGetValue(arucoObject.GetType(), out tracker))\n      {\n        return;\n      }\n\n      if (tracker.IsActivated)\n      {\n        bool deactivateTracker = true;\n\n        // Try to find at leat one object of the same type as arucoObject\n        foreach (var arucoObjectDictionary in ArucoObjects)\n        {\n          foreach (var arucoObject2 in arucoObjectDictionary.Value)\n          {\n            if (arucoObject2.GetType() == arucoObject.GetType())\n            {\n              deactivateTracker = false;\n              break;\n            }\n          }\n          if (!deactivateTracker)\n          {\n            break;\n          }\n        }\n\n        if (deactivateTracker)\n        {\n          tracker.Deactivate();\n        }\n      }\n    }\n\n    // IArucoObjectsTracker Methods\n\n    public void DeactivateArucoObjects()\n    {\n      foreach (var arucoObjectDictionary in ArucoObjects)\n      {\n        foreach (var arucoObject in arucoObjectDictionary.Value)\n        {\n          arucoObject.Value.gameObject.SetActive(false);\n        }\n      }\n    }\n\n    public void Detect(Cv.Mat[] images)\n    {\n      if (!IsConfigured)\n      {\n        throw new Exception(\"The tracker must be configured before tracking ArUco objects.\");\n      }\n\n      ExecuteOnActivatedTrackers((tracker, cameraId, dictionary) =>\n      {\n        tracker.Detect(cameraId, dictionary, images[cameraId]);\n      });\n    }\n\n    public void Detect()\n    {\n      Detect(ArucoCamera.Images);\n    }\n\n    public void Draw(Cv.Mat[] images)\n    {\n      if (!IsConfigured)\n      {\n        throw new Exception(\"The tracker must be configured before tracking ArUco objects.\");\n      }\n\n      ExecuteOnActivatedTrackers((tracker, cameraId, dictionary) =>\n      {\n        tracker.Draw(cameraId, dictionary, images[cameraId]);\n      });\n    }\n\n    public void Draw()\n    {\n      Draw(ArucoCamera.Images);\n    }\n\n    public void EstimateTransforms()\n    {\n      if (!IsConfigured)\n      {\n        throw new Exception(\"The tracker must be configured before tracking ArUco objects.\");\n      }\n\n      ExecuteOnActivatedTrackers((tracker, cameraId, dictionary) =>\n      {\n        tracker.EstimateTransforms(cameraId, dictionary);\n      });\n    }\n\n    public void UpdateTransforms()\n    {\n      if (!IsConfigured)\n      {\n        throw new Exception(\"The tracker must be configured before tracking ArUco objects.\");\n      }\n\n      ExecuteOnActivatedTrackers((tracker, cameraId, dictionary) =>\n      {\n        tracker.UpdateTransforms(cameraId, dictionary);\n      });\n    }\n\n    // Methods\n\n    /// <summary>\n    /// Updates the tracking thread with <see cref=\"ArucoCamera.ImageDatas\"/>, calls <see cref=\"DeactivateArucoObjects\"/>\n    /// and <see cref=\"UpdateTransforms\"/> and stops if there was an exception from this thread.\n    /// </summary>\n    protected void ArucoCamera_ImagesUpdated()\n    {\n      try\n      {\n        trackingThread.Update(ArucoCamera.ImageDatas);\n        if (trackingThread.ImagesUpdated)\n        {\n          DeactivateArucoObjects();\n          if (ArucoCameraDisplay != null)\n          {\n            UpdateTransforms();\n          }\n        }\n      }\n      catch (Exception e)\n      {\n        StopController();\n        throw e;\n      }\n    }\n\n    /// <summary>\n    /// Detects and estimates the transforms of the detected ArUco objects. Executed on a separated tracking thread.\n    /// </summary>\n    protected void TrackArucoObjects(Cv.Mat[] images)\n    {\n      Detect(images);\n      EstimateTransforms();\n      if (trackingThread.CopyBackImages)\n      {\n        Draw(images);\n      }\n    }\n\n    /// <summary>\n    /// Executes an <paramref name=\"actionOnTracker\"/> on all the activated <see cref=\"ArucoObjectTracker\"/>.\n    /// </summary>\n    protected void ExecuteOnActivatedTrackers(Action<ArucoObjectTracker, int, Aruco.Dictionary> actionOnTracker)\n    {\n      for (int cameraId = 0; cameraId < ArucoCamera.CameraNumber; cameraId++)\n      {\n        foreach (var arucoObjectDictionary in ArucoObjects)\n        {\n          actionOnTracker(MarkerTracker, cameraId, arucoObjectDictionary.Key);\n          foreach (var tracker in additionalTrackers)\n          {\n            if (tracker.Value.IsActivated)\n            {\n              actionOnTracker(tracker.Value, cameraId, arucoObjectDictionary.Key);\n            }\n          }\n        }\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/ArucoObjectsTracker.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 255fe063ecb04c04296ffd43ed49ae04\r\ntimeCreated: 1475701582\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/DetectorParametersController.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing UnityEngine;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  /// <summary>\n  /// Editor controller for <see cref=\"Aruco.DetectorParameters\"/>.\n  /// </summary>\n  public class DetectorParametersController : MonoBehaviour, IHasDetectorParameter\n  {\n    // Editor fields\n\n    [SerializeField]\n    [Tooltip(\"The minimum window size for adaptive thresholding before finding contours (default 3).\")]\n    private int adaptiveThreshWinSizeMin = 3;\n\n    [SerializeField]\n    [Tooltip(\"The maximum window size for adaptive thresholding before finding contours (default 23).\")]\n    private int adaptiveThreshWinSizeMax = 23;\n\n    [SerializeField]\n    [Tooltip(\"The increments from adaptiveThreshWinSizeMin to adaptiveThreshWinSizeMax during the thresholding (default 10).\")]\n    private int adaptiveThreshWinSizeStep = 10;\n\n    [SerializeField]\n    [Tooltip(\"The constant for adaptive thresholding before finding contours (default 7).\")]\n    private double adaptiveThreshConstant = 7;\n\n    [SerializeField]\n    [Tooltip(\"The minimum perimeter for marker contour to be detected. This is defined as a rate respect to the maximum dimension of the input image (default 0.03).\")]\n    private double minMarkerPerimeterRate = 0.03;\n\n    [SerializeField]\n    [Tooltip(\"The maximum perimeter for marker contour to be detected. This is defined as a rate respect to the maximum dimension of the input image (default 4.0).\")]\n    private double maxMarkerPerimeterRate = 4.0;\n\n    [SerializeField]\n    [Tooltip(\"The minimum accuracy during the polygonal approximation process to determine which contours are squares.\")]\n    private double polygonalApproxAccuracyRate = 0.03;\n\n    [SerializeField]\n    [Tooltip(\"The minimum distance between corners for detected markers relative to its perimeter (default 0.05).\")]\n    private double minCornerDistanceRate = 0.05;\n\n    [SerializeField]\n    [Tooltip(\"The minimum distance of any corner to the image border for detected markers (in pixels) (default 3).\")]\n    private int minDistanceToBorder = 3;\n\n    [SerializeField]\n    [Tooltip(\"The minimum mean distance beetween two marker corners to be considered similar, so that the smaller one is removed. The rate is relative to the smaller perimeter of the two markers (default 0.05).\")]\n    private double minMarkerDistanceRate = 0.05;\n\n    [SerializeField]\n    [Tooltip(\"The method to use for corner refinement.\")]\n    private Aruco.CornerRefineMethod cornerRefinementMethod = Aruco.CornerRefineMethod.None;\n\n    [SerializeField]\n    [Tooltip(\"The window size for the corner refinement process (in pixels) (default 5).\")]\n    private int cornerRefinementWinSize = 5;\n\n    [SerializeField]\n    [Tooltip(\"The maximum number of iterations for stop criteria of the corner refinement process (default 30).\")]\n    private int cornerRefinementMaxIterations = 30;\n\n    [SerializeField]\n    [Tooltip(\"The minimum error for the stop cristeria of the corner refinement process (default: 0.1).\")]\n    private double cornerRefinementMinAccuracy = 0.1;\n\n    [SerializeField]\n    [Tooltip(\"The number of bits of the marker border, i.e. marker border width (default 1).\")]\n    private int markerBorderBits = 1;\n\n    [SerializeField]\n    [Tooltip(\"The number of bits (per dimension) for each cell of the marker when removing the perspective (default 8).\")]\n    private int perspectiveRemovePixelPerCell = 8;\n\n    [SerializeField]\n    [Tooltip(\"The width of the margin of pixels on each cell not considered for the determination of the cell bit. Represents the rate respect to the total size of the cell, i.e. perpectiveRemovePixelPerCell (default 0.13).\")]\n    private double perspectiveRemoveIgnoredMarginPerCell = 0.13;\n\n    [SerializeField]\n    [Tooltip(\"The maximum number of accepted erroneous bits in the border (i.e. number of allowed white bits in the border). Represented as a rate respect to the total number of bits per marker (default 0.35).\")]\n    private double maxErroneousBitsInBorderRate = 0.35;\n\n    [SerializeField]\n    [Tooltip(\"The minimun standard deviation in pixels values during the decodification step to apply Otsu thresholding (otherwise, all the bits are sets to 0 or 1 depending on mean higher than 128 or not) (default 5.0).\")]\n    private double minOtsuStdDev = 5.0;\n\n    [SerializeField]\n    [Tooltip(\"The maximun error correction capability for each dictionary (default 0.6).\")]\n    private double errorCorrectionRate = 0.6;\n\n    // Properties\n\n    /// <summary>\n    /// Gets or sets the <see cref=\"DetectorParameters\"/>.\n    /// </summary>\n    public Aruco.DetectorParameters DetectorParameters { get; set; }\n\n    // MonoBehaviour methods\n\n    /// <summary>\n    /// Initializes <see cref=\"DetectorParameters\"/> from editor fields.\n    /// </summary>\n    protected virtual void Awake()\n    {\n      DetectorParameters = new Aruco.DetectorParameters();\n      DetectorParameters.AdaptiveThreshWinSizeMin = adaptiveThreshWinSizeMin;\n      DetectorParameters.AdaptiveThreshWinSizeMax = adaptiveThreshWinSizeMax;\n      DetectorParameters.AdaptiveThreshWinSizeStep = adaptiveThreshWinSizeStep;\n      DetectorParameters.AdaptiveThreshConstant = adaptiveThreshConstant;\n      DetectorParameters.MinMarkerPerimeterRate = minMarkerPerimeterRate;\n      DetectorParameters.MaxMarkerPerimeterRate = maxMarkerPerimeterRate;\n      DetectorParameters.PolygonalApproxAccuracyRate = polygonalApproxAccuracyRate;\n      DetectorParameters.MinCornerDistanceRate = minCornerDistanceRate;\n      DetectorParameters.MinDistanceToBorder = minDistanceToBorder;\n      DetectorParameters.MinMarkerDistanceRate = minMarkerDistanceRate;\n      DetectorParameters.CornerRefinementMethod = cornerRefinementMethod;\n      DetectorParameters.CornerRefinementWinSize = cornerRefinementWinSize;\n      DetectorParameters.CornerRefinementMaxIterations = cornerRefinementMaxIterations;\n      DetectorParameters.CornerRefinementMinAccuracy = cornerRefinementMinAccuracy;\n      DetectorParameters.MarkerBorderBits = markerBorderBits;\n      DetectorParameters.PerspectiveRemovePixelPerCell = perspectiveRemovePixelPerCell;\n      DetectorParameters.PerspectiveRemoveIgnoredMarginPerCell = perspectiveRemoveIgnoredMarginPerCell;\n      DetectorParameters.MaxErroneousBitsInBorderRate = maxErroneousBitsInBorderRate;\n      DetectorParameters.MinOtsuStdDev = minOtsuStdDev;\n      DetectorParameters.ErrorCorrectionRate = errorCorrectionRate;\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/DetectorParametersController.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 91ed676394d8639429b6c76f63c37c18\r\ntimeCreated: 1475378694\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/IArucoObjectsController.cs",
    "content": "﻿using System.Collections.Generic;\nusing ArucoUnity.Plugin;\nusing System;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  /// <summary>\n  /// Manages a list of <see cref=\"ArucoObject\"/>.\n  /// </summary>\n  public interface IArucoObjectsController\n  {\n    // Events\n\n    /// <summary>\n    /// Called when an ArUco object has been added to <see cref=\"ArucoObjects\"/>.\n    /// </summary>\n    event Action<ArucoObject> ArucoObjectAdded;\n\n    /// <summary>\n    /// Called when an ArUco object has been removed from <see cref=\"ArucoObjects\"/>.\n    /// </summary>\n    event Action<ArucoObject> ArucoObjectRemoved;\n\n    /// <summary>\n    /// Called when a new dictionary has been added to <see cref=\"ArucoObjects\"/>.\n    /// </summary>\n    event Action<Aruco.Dictionary> DictionaryAdded;\n\n    /// <summary>\n    /// Called when a dictionary has been removed from <see cref=\"ArucoObjects\"/>.\n    /// </summary>\n    event Action<Aruco.Dictionary> DictionaryRemoved;\n\n    // Properties\n\n    /// <summary>\n    /// Gets the list of the ArUco objects to detect.\n    /// </summary>\n    Dictionary<Aruco.Dictionary, Dictionary<int, ArucoObject>> ArucoObjects { get; }\n\n    // Methods\n\n    /// <summary>\n    /// Adds an ArUco object to the <see cref=\"ArucoObjects\"/> list.\n    /// </summary>\n    /// <param name=\"arucoObject\">The ArUco object to add.</param>\n    void AddArucoObject(ArucoObject arucoObject);\n\n    /// <summary>\n    /// Removes an ArUco object to the <see cref=\"ArucoObjects\"/> list.\n    /// </summary>\n    /// <param name=\"arucoObject\">The ArUco object to remove.</param>\n    void RemoveArucoObject(ArucoObject arucoObject);\n\n    /// <summary>\n    /// Returns a sublist from <see cref=\"ArucoObjects\"/> of ArUco objects of a precise type <typeparamref name=\"U\"/> in a certain\n    /// <paramref name=\"dictionary\"/>.\n    /// </summary>\n    /// <typeparam name=\"U\">The type of the ArUco objects in the returned sublist.</typeparam>\n    /// <param name=\"dictionary\">The <see cref=\"Aruco.Dictionary\" /> to use.</param>\n    /// <returns>The sublist.</returns>\n    HashSet<U> GetArucoObjects<U>(Aruco.Dictionary dictionary) where U : ArucoObject;\n  }\n}\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/IArucoObjectsController.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 9909cdd7f1ee6294e8fba572402d7a7f\r\ntimeCreated: 1511476597\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/IArucoObjectsTracker.cs",
    "content": "﻿using ArucoUnity.Cameras;\nusing ArucoUnity.Cameras.Displays;\nusing ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  /// <summary>\n  /// \n  /// </summary>\n  public interface IArucoObjectsTracker : IArucoCameraController, IArucoObjectsController, IHasDetectorParameter\n  {\n    // Properties\n\n    /// <summary>\n    /// Gets or sets the optional camera display associated with the ArucoCamera.\n    /// </summary>\n    IArucoCameraDisplay ArucoCameraDisplay { get; set; }\n\n    /// <summary>\n    /// Gets or sets if using refine strategy to detect more markers using the <see cref=\"ArucoBoard\"/> in the\n    /// <see cref=\"IArucoObjectsController.ArucoObjects\"/> list.\n    /// </summary>\n    bool RefineDetectedMarkers { get; set; }\n\n    /// <summary>\n    /// Get or sets if displaying the detected <see cref=\"ArucoMarker\"/> in the <see cref=\"IArucoCamera.Textures\"/>.\n    /// </summary>\n    bool DrawDetectedMarkers { get; set; }\n\n    /// <summary>\n    /// Get or sets if displaying the rejected markers candidates.\n    /// </summary>\n    bool DrawRejectedCandidates { get; set; }\n\n    /// <summary>\n    /// Get or sets if displaying the axes of each detected <see cref=\"ArucoBoard\"/> and <see cref=\"ArucoDiamond\"/>.\n    /// </summary>\n    bool DrawAxes { get; set; }\n\n    /// <summary>\n    /// Get or sets if displaying the markers of each detected <see cref=\"ArucoCharucoBoard\"/>.\n    /// </summary>\n    bool DrawDetectedCharucoMarkers { get; set; }\n\n    /// <summary>\n    /// Get or sets if displaying each detected <see cref=\"ArucoDiamond\"/>.\n    /// </summary>\n    bool DrawDetectedDiamonds { get; set; }\n\n    /// <summary>\n    /// Gets the ArUco markers tracker used.\n    /// </summary>\n    ArucoMarkerTracker MarkerTracker { get; }\n\n    // Methods\n\n    /// <summary>\n    /// Hides all the ArUco objects.\n    /// </summary>\n    void DeactivateArucoObjects();\n\n    /// <summary>\n    /// Detects the ArUco objects on a set of custom images.\n    /// </summary>\n    /// <param name=\"images\">The images set.</param>\n    void Detect(Cv.Mat[] images);\n\n    /// <summary>\n    /// Detects the ArUco objects on the current <see cref=\"IArucoCamera.Images\"/>.\n    /// </summary>\n    void Detect();\n\n    /// <summary>\n    /// Draws each detected <see cref=\"ArucoObject\"/> on a set of custom images.\n    /// </summary>\n    /// <param name=\"images\">The images set to draw.</param>\n    void Draw(Cv.Mat[] images);\n\n    /// <summary>\n    /// Draws each detected <see cref=\"ArucoObject\"/> on the <see cref=\"IArucoCamera.Images\"/>.\n    /// </summary>\n    void Draw();\n\n    /// <summary>\n    /// Estimates the transforms of each detected <see cref=\"ArucoObject\"/> on the current <see cref=\"IArucoCamera.Images\"/>.\n    /// </summary>\n    void EstimateTransforms();\n\n    /// <summary>\n    /// Updates transforms of each detected <see cref=\"ArucoObject\"/>. <see cref=\"ArucoCameraDisplay\"/> must be set.\n    /// </summary>\n    void UpdateTransforms();\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/IArucoObjectsTracker.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 100612681f7e9a9478271eac5fe2f881\r\ntimeCreated: 1511474366\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/IHasDetectorParameter.cs",
    "content": "﻿using ArucoUnity.Plugin;\n\nnamespace ArucoUnity.Objects.Trackers\n{\n  /// <summary>\n  /// Contains a <see cref=\"Aruco.DetectorParameters\"/>.\n  /// </summary>\n  public interface IHasDetectorParameter\n  {\n    /// <summary>\n    /// Gets or sets the parameters to use for the detection.\n    /// </summary>\n    Aruco.DetectorParameters DetectorParameters { get; set; }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers/IHasDetectorParameter.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: e3afb0b94e146264397a23aa41a26237\r\ntimeCreated: 1511476549\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects/Trackers.meta",
    "content": "fileFormatVersion: 2\r\nguid: 5e3649083fbdd46458f07c658d8492ce\r\nfolderAsset: yes\r\ntimeCreated: 1488568181\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Objects.meta",
    "content": "fileFormatVersion: 2\r\nguid: 53fa77e13e8bd324fb58e783de3ecd6f\r\nfolderAsset: yes\r\ntimeCreated: 1488568297\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/Aruco.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n    public static partial class Aruco\n    {\n        // Enums\n\n        public enum PredefinedDictionaryName\n        {\n            Dict4x4_50 = 0,\n            Dict4x4_100,\n            Dict4x4_250,\n            Dict4x4_1000,\n            Dict5x5_50,\n            Dict5x5_100,\n            Dict5x5_250,\n            Dict5x5_1000,\n            Dict6x6_50,\n            Dict6x6_100,\n            Dict6x6_250,\n            Dict6x6_1000,\n            Dict7x7_50,\n            Dict7x7_100,\n            Dict7x7_250,\n            Dict7x7_1000,\n            DictArucoOriginal\n        }\n\n        public enum CornerRefineMethod\n        {\n            None, /// No corner refinement\n            Subpix, /// Refine the corners using subpix\n            Contour /// Refine the corners using the contour-points\n        }\n\n        // Native functions\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern double au_calibrateCameraAruco(IntPtr corners, IntPtr ids, IntPtr counter, IntPtr board,\n        IntPtr imageSize, IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs, int flags,\n        IntPtr criteria, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern double au_calibrateCameraCharuco(IntPtr charucoCorners, IntPtr charucoIds, IntPtr board,\n            IntPtr imageSize, IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs, int flags,\n            IntPtr criteria, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern void au_detectCharucoDiamond(IntPtr image, IntPtr markerCorners, IntPtr markerIds,\n            float squareMarkerLengthRate, out IntPtr diamondCorners, out IntPtr diamondIds, IntPtr cameraMatrix,\n            IntPtr distCoeffs, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern void au_detectMarkers(IntPtr image, IntPtr dictionary, out IntPtr corners, out IntPtr ids,\n            IntPtr parameters, out IntPtr rejectedImgPoints, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern void au_drawAxis(IntPtr image, IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr rvec,\n            IntPtr tvec, float length, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern void au_drawCharucoDiamond(IntPtr dictionary, IntPtr ids, int squareLength, int markerLength,\n            out IntPtr img, int marginSize, int borderBits, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern void au_drawDetectedCornersCharuco(IntPtr image, IntPtr charucoCorners, IntPtr charucoIds,\n            IntPtr cornerColor, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern void au_drawDetectedDiamonds(IntPtr image, IntPtr diamondCorners, IntPtr diamondIds,\n            IntPtr borderColor, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern void au_drawDetectedMarkers(IntPtr image, IntPtr corners, IntPtr ids, IntPtr borderColor,\n            IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern int au_estimatePoseBoard(IntPtr corners, IntPtr ids, IntPtr board, IntPtr cameraMatrix,\n            IntPtr distCoeffs, out IntPtr rvec, out IntPtr tvec, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern bool au_estimatePoseCharucoBoard(IntPtr charucoCorners, IntPtr charucoIds, IntPtr board,\n            IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvec, out IntPtr tvec, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern void au_estimatePoseSingleMarkers(IntPtr corners, float markerLength, IntPtr cameraMatrix, IntPtr distCoeffs,\n            out IntPtr rvecs, out IntPtr tvecs, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern IntPtr au_generateCustomDictionary(int nMarkers, int markerSize, IntPtr baseDictionary, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern void au_getBoardObjectAndImagePoints(IntPtr board, IntPtr detectedCorners, IntPtr detectedIds,\n            out IntPtr objPoints, out IntPtr imgPoints, IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern IntPtr au_getPredefinedDictionary(PredefinedDictionaryName name);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern int au_interpolateCornersCharuco(IntPtr markerCorners, IntPtr markerIds, IntPtr image, IntPtr board,\n            out IntPtr charucoCorners, out IntPtr charucoIds, IntPtr cameraMatrix, IntPtr distCoeffs,\n            IntPtr exception);\n\n        [DllImport(\"ArucoUnityPlugin\")]\n        static extern void au_refineDetectedMarkers(IntPtr image, IntPtr board, IntPtr detectedCorners, IntPtr detectedIds,\n            IntPtr rejectedCorners, IntPtr cameraMatrix, IntPtr distCoeffs, float minRepDistance, float errorCorrectionRate,\n            bool checkAllOrders, IntPtr recoveredIdxs, IntPtr parameters, IntPtr exception);\n\n        // Static methods\n\n        public static double CalibrateCameraAruco(Std.VectorVectorPoint2f corners, Std.VectorInt ids, Std.VectorInt counter, Board board,\n            Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs, out Std.VectorMat tvecs, Cv.Calib flags,\n            Cv.TermCriteria criteria)\n        {\n            Cv.Exception exception = new Cv.Exception();\n            IntPtr rvecsPtr, tvecsPtr;\n\n            double reProjectionError = au_calibrateCameraAruco(corners.CppPtr, ids.CppPtr, counter.CppPtr, board.CppPtr, imageSize.CppPtr,\n                cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, (int)flags, criteria.CppPtr, exception.CppPtr);\n            rvecs = new Std.VectorMat(rvecsPtr);\n            tvecs = new Std.VectorMat(tvecsPtr);\n\n            exception.Check();\n            return reProjectionError;\n        }\n\n        public static double CalibrateCameraAruco(Std.VectorVectorPoint2f corners, Std.VectorInt ids, Std.VectorInt counter, Board board,\n            Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs, out Std.VectorMat tvecs, Cv.Calib flags = 0)\n        {\n            Cv.TermCriteria criteria = new Cv.TermCriteria(Cv.TermCriteria.Type.Count | Cv.TermCriteria.Type.Eps, 30, Cv.EPSILON);\n            return CalibrateCameraAruco(corners, ids, counter, board, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs, flags, criteria);\n        }\n\n        public static double CalibrateCameraAruco(Std.VectorVectorPoint2f corners, Std.VectorInt ids, Std.VectorInt counter, Board board,\n            Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs)\n        {\n            Std.VectorMat tvecs;\n            return CalibrateCameraAruco(corners, ids, counter, board, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs);\n        }\n\n        public static double CalibrateCameraAruco(Std.VectorVectorPoint2f corners, Std.VectorInt ids, Std.VectorInt counter, Board board,\n      Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs)\n    {\n      Std.VectorMat rvecs;\n      return CalibrateCameraAruco(corners, ids, counter, board, imageSize, cameraMatrix, distCoeffs, out rvecs);\n    }\n\n    public static double CalibrateCameraCharuco(Std.VectorVectorPoint2f charucoCorners, Std.VectorVectorInt charucoIds, CharucoBoard board,\n      Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs, out Std.VectorMat tvecs, Cv.Calib flags,\n      Cv.TermCriteria criteria)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      IntPtr rvecsPtr, tvecsPtr;\n\n      double reProjectionError = au_calibrateCameraCharuco(charucoCorners.CppPtr, charucoIds.CppPtr, board.CppPtr, imageSize.CppPtr,\n        cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, (int)flags, criteria.CppPtr, exception.CppPtr);\n      rvecs = new Std.VectorMat(rvecsPtr);\n      tvecs = new Std.VectorMat(tvecsPtr);\n\n      exception.Check();\n      return reProjectionError;\n    }\n\n    public static double CalibrateCameraCharuco(Std.VectorVectorPoint2f charucoCorners, Std.VectorVectorInt charucoIds, CharucoBoard board,\n      Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs, out Std.VectorMat tvecs, Cv.Calib flags = 0)\n    {\n      Cv.TermCriteria criteria = new Cv.TermCriteria(Cv.TermCriteria.Type.Count | Cv.TermCriteria.Type.Eps, 30, Cv.EPSILON);\n      return CalibrateCameraCharuco(charucoCorners, charucoIds, board, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs, flags, criteria);\n    }\n\n    public static double CalibrateCameraCharuco(Std.VectorVectorPoint2f charucoCorners, Std.VectorVectorInt charucoIds, CharucoBoard board,\n      Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Std.VectorMat rvecs)\n    {\n      Std.VectorMat tvecs;\n      return CalibrateCameraCharuco(charucoCorners, charucoIds, board, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs);\n    }\n\n    public static double CalibrateCameraCharuco(Std.VectorVectorPoint2f charucoCorners, Std.VectorVectorInt charucoIds, CharucoBoard board,\n      Cv.Size imageSize, Cv.Mat cameraMatrix, Cv.Mat distCoeffs)\n    {\n      Std.VectorMat rvecs;\n      return CalibrateCameraCharuco(charucoCorners, charucoIds, board, imageSize, cameraMatrix, distCoeffs, out rvecs);\n    }\n\n    public static void DetectCharucoDiamond(Cv.Mat image, Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds,\n      float squareMarkerLengthRate, out Std.VectorVectorPoint2f diamondCorners, out Std.VectorVec4i diamondIds, Cv.Mat cameraMatrix,\n      Cv.Mat distCoeffs)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      IntPtr diamondCornersPtr, diamondIdsPtr;\n\n      au_detectCharucoDiamond(image.CppPtr, markerCorners.CppPtr, markerIds.CppPtr, squareMarkerLengthRate, out diamondCornersPtr,\n        out diamondIdsPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, exception.CppPtr);\n      diamondCorners = new Std.VectorVectorPoint2f(diamondCornersPtr);\n      diamondIds = new Std.VectorVec4i(diamondIdsPtr);\n\n      exception.Check();\n    }\n\n    public static void DetectCharucoDiamond(Cv.Mat image, Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds,\n      float squareMarkerLengthRate, out Std.VectorVectorPoint2f diamondCorners, out Std.VectorVec4i diamondIds, Cv.Mat cameraMatrix)\n    {\n      Cv.Mat distCoeffs = new Cv.Mat();\n      DetectCharucoDiamond(image, markerCorners, markerIds, squareMarkerLengthRate, out diamondCorners, out diamondIds, cameraMatrix, distCoeffs);\n    }\n\n    public static void DetectCharucoDiamond(Cv.Mat image, Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds,\n      float squareMarkerLengthRate, out Std.VectorVectorPoint2f diamondCorners, out Std.VectorVec4i diamondIds)\n    {\n      Cv.Mat cameraMatrix = new Cv.Mat();\n      DetectCharucoDiamond(image, markerCorners, markerIds, squareMarkerLengthRate, out diamondCorners, out diamondIds, cameraMatrix);\n    }\n\n    public static void DetectMarkers(Cv.Mat image, Dictionary dictionary, out Std.VectorVectorPoint2f corners, out Std.VectorInt ids,\n      DetectorParameters parameters, out Std.VectorVectorPoint2f rejectedImgPoints)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      IntPtr cornersPtr, idsPtr, rejectedPtr;\n\n      au_detectMarkers(image.CppPtr, dictionary.CppPtr, out cornersPtr, out idsPtr, parameters.CppPtr, out rejectedPtr, exception.CppPtr);\n      corners = new Std.VectorVectorPoint2f(cornersPtr);\n      ids = new Std.VectorInt(idsPtr);\n      rejectedImgPoints = new Std.VectorVectorPoint2f(rejectedPtr);\n\n      exception.Check();\n    }\n\n    public static void DetectMarkers(Cv.Mat image, Dictionary dictionary, out Std.VectorVectorPoint2f corners, out Std.VectorInt ids,\n      DetectorParameters parameters)\n    {\n      Std.VectorVectorPoint2f rejectedImgPoints;\n      DetectMarkers(image, dictionary, out corners, out ids, parameters, out rejectedImgPoints);\n    }\n\n    public static void DetectMarkers(Cv.Mat image, Dictionary dictionary, out Std.VectorVectorPoint2f corners, out Std.VectorInt ids)\n    {\n      DetectorParameters parameters = new DetectorParameters();\n      DetectMarkers(image, dictionary, out corners, out ids, parameters);\n    }\n\n    public static void DrawAxis(Cv.Mat image, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, Cv.Vec3d rvec, Cv.Vec3d tvec, float length)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      au_drawAxis(image.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, rvec.CppPtr, tvec.CppPtr, length, exception.CppPtr);\n      exception.Check();\n    }\n    public static void DrawCharucoDiamond(Dictionary dictionary, Cv.Vec4i ids, int squareLength, int markerLength, out Cv.Mat image,\n      int marginSize = 0, int borderBits = 1)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      IntPtr imagePtr;\n\n      au_drawCharucoDiamond(dictionary.CppPtr, ids.CppPtr, squareLength, markerLength, out imagePtr, marginSize, borderBits, exception.CppPtr);\n      image = new Cv.Mat(imagePtr);\n\n      exception.Check();\n    }\n\n    public static void DrawDetectedCornersCharuco(Cv.Mat image, Std.VectorPoint2f charucoCorners, Std.VectorInt charucoIds, Cv.Scalar cornerColor)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      au_drawDetectedCornersCharuco(image.CppPtr, charucoCorners.CppPtr, charucoIds.CppPtr, cornerColor.CppPtr, exception.CppPtr);\n      exception.Check();\n    }\n\n    public static void DrawDetectedCornersCharuco(Cv.Mat image, Std.VectorPoint2f charucoCorners, Std.VectorInt charucoIds)\n    {\n      Cv.Scalar cornerColor = new Cv.Scalar(255, 0, 0);\n      DrawDetectedCornersCharuco(image, charucoCorners, charucoIds, cornerColor);\n    }\n\n    public static void DrawDetectedCornersCharuco(Cv.Mat image, Std.VectorPoint2f charucoCorners)\n    {\n      Std.VectorInt charucoIds = new Std.VectorInt();\n      DrawDetectedCornersCharuco(image, charucoCorners, charucoIds);\n    }\n\n    public static void DrawDetectedDiamonds(Cv.Mat image, Std.VectorVectorPoint2f diamondCorners, Std.VectorVec4i diamondIds,\n      Cv.Scalar borderColor)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      au_drawDetectedDiamonds(image.CppPtr, diamondCorners.CppPtr, diamondIds.CppPtr, borderColor.CppPtr, exception.CppPtr);\n      exception.Check();\n    }\n\n    public static void DrawDetectedDiamonds(Cv.Mat image, Std.VectorVectorPoint2f diamondCorners, Std.VectorVec4i diamondIds)\n    {\n      Cv.Scalar borderColor = new Cv.Scalar(0, 0, 255);\n      DrawDetectedDiamonds(image, diamondCorners, diamondIds, borderColor);\n    }\n\n    public static void DrawDetectedDiamonds(Cv.Mat image, Std.VectorVectorPoint2f diamondCorners)\n    {\n      Std.VectorVec4i diamondIds = new Std.VectorVec4i();\n      DrawDetectedDiamonds(image, diamondCorners, diamondIds);\n    }\n\n    public static void DrawDetectedMarkers(Cv.Mat image, Std.VectorVectorPoint2f corners, Std.VectorInt ids, Cv.Scalar borderColor)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      au_drawDetectedMarkers(image.CppPtr, corners.CppPtr, ids.CppPtr, borderColor.CppPtr, exception.CppPtr);\n      exception.Check();\n    }\n\n    public static void DrawDetectedMarkers(Cv.Mat image, Std.VectorVectorPoint2f diamondCorners, Std.VectorInt ids)\n    {\n      Cv.Scalar borderColor = new Cv.Scalar(0, 255, 0);\n      DrawDetectedMarkers(image, diamondCorners, ids, borderColor);\n    }\n\n    public static void DrawDetectedMarkers(Cv.Mat image, Std.VectorVectorPoint2f diamondCorners)\n    {\n      Std.VectorInt ids = new Std.VectorInt();\n      DrawDetectedMarkers(image, diamondCorners, ids);\n    }\n\n    public static int EstimatePoseBoard(Std.VectorVectorPoint2f corners, Std.VectorInt ids, Board board, Cv.Mat cameraMatrix, Cv.Mat distCoeffs,\n      out Cv.Vec3d rvec, out Cv.Vec3d tvec)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      IntPtr rvecPtr, tvecPtr;\n\n      int valid = au_estimatePoseBoard(corners.CppPtr, ids.CppPtr, board.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecPtr, out tvecPtr,\n        exception.CppPtr);\n      rvec = new Cv.Vec3d(rvecPtr);\n      tvec = new Cv.Vec3d(tvecPtr);\n\n      exception.Check();\n      return valid;\n    }\n\n    public static bool EstimatePoseCharucoBoard(Std.VectorPoint2f charucoCorners, Std.VectorInt charucoIds, CharucoBoard board,\n      Cv.Mat cameraMatrix, Cv.Mat distCoeffs, out Cv.Vec3d rvec, out Cv.Vec3d tvec)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      IntPtr rvecPtr, tvecPtr;\n\n      bool valid = au_estimatePoseCharucoBoard(charucoCorners.CppPtr, charucoIds.CppPtr, board.CppPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr,\n        out rvecPtr, out tvecPtr, exception.CppPtr);\n      rvec = new Cv.Vec3d(rvecPtr);\n      tvec = new Cv.Vec3d(tvecPtr);\n\n      exception.Check();\n      return valid;\n    }\n\n    public static void EstimatePoseSingleMarkers(Std.VectorVectorPoint2f corners, float markerLength, Cv.Mat cameraMatrix, Cv.Mat distCoeffs,\n      out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      IntPtr rvecsPtr, tvecsPtr;\n\n      au_estimatePoseSingleMarkers(corners.CppPtr, markerLength, cameraMatrix.CppPtr, distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr,\n        exception.CppPtr);\n      rvecs = new Std.VectorVec3d(rvecsPtr);\n      tvecs = new Std.VectorVec3d(tvecsPtr);\n\n      exception.Check();\n    }\n\n    public static Dictionary GenerateCustomDictionary(int nMarkers, int markerSize, Dictionary baseDictionary)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      IntPtr dictionaryPtr = au_generateCustomDictionary(nMarkers, markerSize, baseDictionary.CppPtr, exception.CppPtr);\n      exception.Check();\n      return new Dictionary(dictionaryPtr);\n    }\n\n    public static Dictionary GenerateCustomDictionary(int nMarkers, int markerSize)\n    {\n      Dictionary baseDictionary = new Dictionary();\n      return GenerateCustomDictionary(nMarkers, markerSize, baseDictionary);\n    }\n\n    public static void GetBoardObjectAndImagePoints(Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds,\n      out Std.VectorPoint3f objPoints, out Std.VectorPoint2f imgPoints)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      IntPtr objPointsPtr, imgPointsPtr;\n\n      au_getBoardObjectAndImagePoints(board.CppPtr, detectedCorners.CppPtr, detectedIds.CppPtr, out objPointsPtr, out imgPointsPtr,\n        exception.CppPtr);\n      objPoints = new Std.VectorPoint3f(objPointsPtr);\n      imgPoints = new Std.VectorPoint2f(imgPointsPtr);\n\n      exception.Check();\n    }\n\n    public static Dictionary GetPredefinedDictionary(PredefinedDictionaryName name)\n    {\n      Dictionary dictionary = new Dictionary(au_getPredefinedDictionary(name));\n      dictionary.Name = name;\n      return dictionary;\n    }\n\n    public static int InterpolateCornersCharuco(Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds, Cv.Mat image, CharucoBoard board,\n      out Std.VectorPoint2f charucoCorners, out Std.VectorInt charucoIds, Cv.Mat cameraMatrix, Cv.Mat distCoeffs)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      IntPtr charucoCornersPtr, charucoIdsPtr;\n\n      int interpolateCorners = au_interpolateCornersCharuco(markerCorners.CppPtr, markerIds.CppPtr, image.CppPtr, board.CppPtr,\n        out charucoCornersPtr, out charucoIdsPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, exception.CppPtr);\n      charucoCorners = new Std.VectorPoint2f(charucoCornersPtr);\n      charucoIds = new Std.VectorInt(charucoIdsPtr);\n      exception.Check();\n\n      return interpolateCorners;\n    }\n\n    public static int InterpolateCornersCharuco(Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds, Cv.Mat image, CharucoBoard board,\n      out Std.VectorPoint2f charucoCorners, out Std.VectorInt charucoIds, Cv.Mat cameraMatrix)\n    {\n      Cv.Mat distCoeffs = new Cv.Mat();\n      return InterpolateCornersCharuco(markerCorners, markerIds, image, board, out charucoCorners, out charucoIds, cameraMatrix, distCoeffs);\n    }\n\n    public static int InterpolateCornersCharuco(Std.VectorVectorPoint2f markerCorners, Std.VectorInt markerIds, Cv.Mat image, CharucoBoard board,\n      out Std.VectorPoint2f charucoCorners, out Std.VectorInt charucoIds)\n    {\n      Cv.Mat cameraMatrix = new Cv.Mat();\n      return InterpolateCornersCharuco(markerCorners, markerIds, image, board, out charucoCorners, out charucoIds, cameraMatrix);\n    }\n\n    public static void RefineDetectedMarkers(Cv.Mat image, Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds,\n      Std.VectorVectorPoint2f rejectedCorners, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, float minRepDistance, float errorCorrectionRate,\n      bool checkAllOrders, Std.VectorInt recoveredIdxs, DetectorParameters parameters)\n    {\n      Cv.Exception exception = new Cv.Exception();\n      au_refineDetectedMarkers(image.CppPtr, board.CppPtr, detectedCorners.CppPtr, detectedIds.CppPtr, rejectedCorners.CppPtr, cameraMatrix.CppPtr,\n        distCoeffs.CppPtr, minRepDistance, errorCorrectionRate, checkAllOrders, recoveredIdxs.CppPtr, parameters.CppPtr, exception.CppPtr);\n      exception.Check();\n    }\n\n    public static void RefineDetectedMarkers(Cv.Mat image, Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds,\n      Std.VectorVectorPoint2f rejectedCorners, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, float minRepDistance, float errorCorrectionRate,\n      bool checkAllOrders, Std.VectorInt recoveredIdxs)\n    {\n      DetectorParameters parameters = new DetectorParameters();\n      RefineDetectedMarkers(image, board, detectedCorners, detectedIds, rejectedCorners, cameraMatrix, distCoeffs, minRepDistance,\n        errorCorrectionRate, checkAllOrders, recoveredIdxs, parameters);\n    }\n\n    public static void RefineDetectedMarkers(Cv.Mat image, Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds,\n      Std.VectorVectorPoint2f rejectedCorners, Cv.Mat cameraMatrix, Cv.Mat distCoeffs, float minRepDistance = 10f,\n      float errorCorrectionRate = 3f, bool checkAllOrders = true)\n    {\n      Std.VectorInt recoveredIdxs = new Std.VectorInt();\n      RefineDetectedMarkers(image, board, detectedCorners, detectedIds, rejectedCorners, cameraMatrix, distCoeffs, minRepDistance,\n        errorCorrectionRate, checkAllOrders, recoveredIdxs);\n    }\n\n    public static void RefineDetectedMarkers(Cv.Mat image, Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds,\n      Std.VectorVectorPoint2f rejectedCorners, Cv.Mat cameraMatrix)\n    {\n      Cv.Mat distCoeffs = new Cv.Mat();\n      RefineDetectedMarkers(image, board, detectedCorners, detectedIds, rejectedCorners, cameraMatrix, distCoeffs);\n    }\n\n    public static void RefineDetectedMarkers(Cv.Mat image, Board board, Std.VectorVectorPoint2f detectedCorners, Std.VectorInt detectedIds,\n      Std.VectorVectorPoint2f rejectedCorners)\n    {\n      Cv.Mat cameraMatrix = new Cv.Mat();\n      RefineDetectedMarkers(image, board, detectedCorners, detectedIds, rejectedCorners, cameraMatrix);\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/Aruco.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 1e66f16b23870c24c92ec8df1b018980\r\ntimeCreated: 1472228401\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/Board.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n    public static partial class Aruco\n    {\n        public abstract class Board : HandleCppPtr\n        {\n            // Native functions\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern IntPtr au_Board_getDictionary(IntPtr board);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern void au_Board_setDictionary(IntPtr board, IntPtr dictionary);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern IntPtr au_Board_getIds(IntPtr board);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern void au_Board_setIds(IntPtr board, IntPtr ids);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern IntPtr au_Board_getObjPoints(IntPtr board);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern void au_Board_setObjPoints(IntPtr board, IntPtr objPoints);\n\n            // Constructors\n\n            internal Board(IntPtr boardPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n                    : base(boardPtr, deleteResponsibility)\n            {\n            }\n\n            // Properties\n\n            public Dictionary Dictionary\n            {\n                get { return new Dictionary(au_Board_getDictionary(CppPtr), DeleteResponsibility.False); }\n                set { au_Board_setDictionary(CppPtr, value.CppPtr); }\n            }\n\n            public Std.VectorInt Ids\n            {\n                get { return new Std.VectorInt(au_Board_getIds(CppPtr), DeleteResponsibility.False); }\n                set { au_Board_setIds(CppPtr, value.CppPtr); }\n            }\n\n            public Std.VectorVectorPoint3f ObjPoints\n            {\n                get { return new Std.VectorVectorPoint3f(au_Board_getObjPoints(CppPtr), DeleteResponsibility.False); }\n                set { au_Board_setObjPoints(CppPtr, value.CppPtr); }\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/Board.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: c836d2089a9caa447b37dc877890ca55\r\ntimeCreated: 1476143477\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/CharucoBoard.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n    public static partial class Aruco\n    {\n        public class CharucoBoard : Board\n        {\n            // Native functions\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern void au_CharucoBoard_delete(IntPtr charucoBoard);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern void au_CharucoBoard_draw(IntPtr charucoBoard, IntPtr outSize, out IntPtr img, int marginSize,\n                int borderBits, IntPtr exception);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern IntPtr au_CharucoBoard_getChessboardSize(IntPtr charucoBoard);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern float au_CharucoBoard_getMarkerLength(IntPtr charucoBoard);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern float au_CharucoBoard_getSquareLength(IntPtr charucoBoard);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern IntPtr au_CharucoBoard_create(int squaresX, int squaresY, float squareLength, float markerLength,\n                IntPtr dictionary, IntPtr exception);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern IntPtr au_CharucoBoard_getChessboardCorners(IntPtr charucoBoard);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern void au_CharucoBoard_setChessboardCorners(IntPtr charucoBoard, IntPtr chessboardCorners);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern IntPtr au_CharucoBoard_getNearestMarkerCorners(IntPtr charucoBoard);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern void au_CharucoBoard_setNearestMarkerCorners(IntPtr charucoBoard, IntPtr nearestMarkerCorners);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern IntPtr au_CharucoBoard_getNearestMarkerIdx(IntPtr charucoBoard);\n\n            [DllImport(\"ArucoUnityPlugin\")]\n            static extern void au_CharucoBoard_setNearestMarkerIdx(IntPtr charucoBoard, IntPtr nearestMarkerIdx);\n\n            // Constructors & destructor\n\n            internal CharucoBoard(IntPtr charucoBoardPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n                    : base(charucoBoardPtr, deleteResponsibility)\n            {\n            }\n\n            protected override void DeleteCppPtr()\n            {\n                au_CharucoBoard_delete(CppPtr);\n            }\n\n            // Properties\n\n            public Std.VectorPoint3f ChessboardCorners\n            {\n                get { return new Std.VectorPoint3f(au_CharucoBoard_getChessboardCorners(CppPtr), DeleteResponsibility.False); }\n                set { au_CharucoBoard_setChessboardCorners(CppPtr, value.CppPtr); }\n            }\n\n            public Std.VectorVectorInt MarkerCorners\n            {\n                get { return new Std.VectorVectorInt(au_CharucoBoard_getNearestMarkerCorners(CppPtr), DeleteResponsibility.False); }\n                set { au_CharucoBoard_setNearestMarkerCorners(CppPtr, value.CppPtr); }\n            }\n\n            public Std.VectorVectorInt MarkerIdx\n            {\n                get { return new Std.VectorVectorInt(au_CharucoBoard_getNearestMarkerIdx(CppPtr), DeleteResponsibility.False); }\n                set { au_CharucoBoard_setNearestMarkerIdx(CppPtr, value.CppPtr); }\n            }\n\n            // Static methods\n\n            static public CharucoBoard Create(int squaresX, int squaresY, float squareLength, float markerLength, Dictionary dictionary)\n            {\n                Cv.Exception exception = new Cv.Exception();\n                IntPtr charucoBoardPtr = au_CharucoBoard_create(squaresX, squaresY, squareLength, markerLength, dictionary.CppPtr,\n                    exception.CppPtr);\n                exception.Check();\n                return new CharucoBoard(charucoBoardPtr);\n            }\n\n            // Methods\n\n            public void Draw(Cv.Size outSize, out Cv.Mat img, int marginSize = 0, int borderBits = 1)\n            {\n                Cv.Exception exception = new Cv.Exception();\n                IntPtr imgPtr;\n\n                au_CharucoBoard_draw(CppPtr, outSize.CppPtr, out imgPtr, marginSize, borderBits, exception.CppPtr);\n                img = new Cv.Mat(imgPtr);\n\n                exception.Check();\n            }\n\n            public Cv.Size GetChessboardSize()\n            {\n                return new Cv.Size(au_CharucoBoard_getChessboardSize(CppPtr));\n            }\n\n            public float GetMarkerLength()\n            {\n                return au_CharucoBoard_getMarkerLength(CppPtr);\n            }\n\n            public float GetSquareLength()\n            {\n                return au_CharucoBoard_getSquareLength(CppPtr);\n            }\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/CharucoBoard.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: b7c76001850819d4ebef0bc79116259e\r\ntimeCreated: 1476548350\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/DetectorParameters.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Aruco\n  {\n    public class DetectorParameters : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_DetectorParameters_create();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_delete(IntPtr parameters);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_DetectorParameters_getAdaptiveThreshWinSizeMin(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setAdaptiveThreshWinSizeMin(IntPtr parameters, int adaptiveThreshWinSizeMin);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_DetectorParameters_getAdaptiveThreshWinSizeMax(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setAdaptiveThreshWinSizeMax(IntPtr parameters, int adaptiveThreshWinSizeMax);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_DetectorParameters_getAdaptiveThreshWinSizeStep(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setAdaptiveThreshWinSizeStep(IntPtr parameters, int adaptiveThreshWinSizeStep);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getAdaptiveThreshConstant(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setAdaptiveThreshConstant(IntPtr parameters, double adaptiveThreshConstant);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getMinMarkerPerimeterRate(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setMinMarkerPerimeterRate(IntPtr parameters, double minMarkerPerimeterRate);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getMaxMarkerPerimeterRate(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setMaxMarkerPerimeterRate(IntPtr parameters, double maxMarkerPerimeterRate);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getPolygonalApproxAccuracyRate(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setPolygonalApproxAccuracyRate(IntPtr parameters, double polygonalApproxAccuracyRate);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getMinCornerDistanceRate(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setMinCornerDistanceRate(IntPtr parameters, double minCornerDistanceRate);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_DetectorParameters_getMinDistanceToBorder(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setMinDistanceToBorder(IntPtr parameters, int minDistanceToBorder);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getMinMarkerDistanceRate(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setMinMarkerDistanceRate(IntPtr parameters, double minMarkerDistanceRate);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_DetectorParameters_getCornerRefinementMethod(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setCornerRefinementMethod(IntPtr parameters, int cornerRefinementMethod);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_DetectorParameters_getCornerRefinementWinSize(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setCornerRefinementWinSize(IntPtr parameters, int cornerRefinementWinSize);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_DetectorParameters_getCornerRefinementMaxIterations(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setCornerRefinementMaxIterations(IntPtr parameters, int cornerRefinementMaxIterations);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getCornerRefinementMinAccuracy(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setCornerRefinementMinAccuracy(IntPtr parameters, double cornerRefinementMinAccuracy);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_DetectorParameters_getMarkerBorderBits(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setMarkerBorderBits(IntPtr parameters, int markerBorderBits);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_DetectorParameters_getPerspectiveRemovePixelPerCell(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setPerspectiveRemovePixelPerCell(IntPtr parameters, int perspectiveRemovePixelPerCell);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getPerspectiveRemoveIgnoredMarginPerCell(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setPerspectiveRemoveIgnoredMarginPerCell(IntPtr parameters, double perspectiveRemoveIgnoredMarginPerCell);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getMaxErroneousBitsInBorderRate(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setMaxErroneousBitsInBorderRate(IntPtr parameters, double maxErroneousBitsInBorderRate);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getMinOtsuStdDev(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setMinOtsuStdDev(IntPtr parameters, double minOtsuStdDev);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_DetectorParameters_getErrorCorrectionRate(IntPtr parameters);\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_DetectorParameters_setErrorCorrectionRate(IntPtr parameters, double errorCorrectionRate);\n\n      public DetectorParameters() : base(au_DetectorParameters_create())\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_DetectorParameters_delete(CppPtr);\n      }\n\n      public int AdaptiveThreshWinSizeMin\n      {\n        get { return au_DetectorParameters_getAdaptiveThreshWinSizeMin(CppPtr); }\n        set { au_DetectorParameters_setAdaptiveThreshWinSizeMin(CppPtr, value); }\n      }\n\n      public int AdaptiveThreshWinSizeMax\n      {\n        get { return au_DetectorParameters_getAdaptiveThreshWinSizeMax(CppPtr); }\n        set { au_DetectorParameters_setAdaptiveThreshWinSizeMax(CppPtr, value); }\n      }\n\n      public int AdaptiveThreshWinSizeStep\n      {\n        get { return au_DetectorParameters_getAdaptiveThreshWinSizeStep(CppPtr); }\n        set { au_DetectorParameters_setAdaptiveThreshWinSizeStep(CppPtr, value); }\n      }\n\n      public double AdaptiveThreshConstant\n      {\n        get { return au_DetectorParameters_getAdaptiveThreshConstant(CppPtr); }\n        set { au_DetectorParameters_setAdaptiveThreshConstant(CppPtr, value); }\n      }\n\n      public double MinMarkerPerimeterRate\n      {\n        get { return au_DetectorParameters_getMinMarkerPerimeterRate(CppPtr); }\n        set { au_DetectorParameters_setMinMarkerPerimeterRate(CppPtr, value); }\n      }\n\n      public double MaxMarkerPerimeterRate\n      {\n        get { return au_DetectorParameters_getMaxMarkerPerimeterRate(CppPtr); }\n        set { au_DetectorParameters_setMaxMarkerPerimeterRate(CppPtr, value); }\n      }\n\n      public double PolygonalApproxAccuracyRate\n      {\n        get { return au_DetectorParameters_getPolygonalApproxAccuracyRate(CppPtr); }\n        set { au_DetectorParameters_setPolygonalApproxAccuracyRate(CppPtr, value); }\n      }\n\n      public double MinCornerDistanceRate\n      {\n        get { return au_DetectorParameters_getMinCornerDistanceRate(CppPtr); }\n        set { au_DetectorParameters_setMinCornerDistanceRate(CppPtr, value); }\n      }\n\n      public int MinDistanceToBorder\n      {\n        get { return au_DetectorParameters_getMinDistanceToBorder(CppPtr); }\n        set { au_DetectorParameters_setMinDistanceToBorder(CppPtr, value); }\n      }\n\n      public double MinMarkerDistanceRate\n      {\n        get { return au_DetectorParameters_getMinMarkerDistanceRate(CppPtr); }\n        set { au_DetectorParameters_setMinMarkerDistanceRate(CppPtr, value); }\n      }\n\n      public CornerRefineMethod CornerRefinementMethod\n      {\n        get { return (CornerRefineMethod)au_DetectorParameters_getCornerRefinementMethod(CppPtr); }\n        set { au_DetectorParameters_setCornerRefinementMethod(CppPtr, (int)value); }\n      }\n\n      public int CornerRefinementWinSize\n      {\n        get { return au_DetectorParameters_getCornerRefinementWinSize(CppPtr); }\n        set { au_DetectorParameters_setCornerRefinementWinSize(CppPtr, value); }\n      }\n\n      public int CornerRefinementMaxIterations\n      {\n        get { return au_DetectorParameters_getCornerRefinementMaxIterations(CppPtr); }\n        set { au_DetectorParameters_setCornerRefinementMaxIterations(CppPtr, value); }\n      }\n\n      public double CornerRefinementMinAccuracy\n      {\n        get { return au_DetectorParameters_getCornerRefinementMinAccuracy(CppPtr); }\n        set { au_DetectorParameters_setCornerRefinementMinAccuracy(CppPtr, value); }\n      }\n\n      public int MarkerBorderBits\n      {\n        get { return au_DetectorParameters_getMarkerBorderBits(CppPtr); }\n        set { au_DetectorParameters_setMarkerBorderBits(CppPtr, value); }\n      }\n\n      public int PerspectiveRemovePixelPerCell\n      {\n        get { return au_DetectorParameters_getPerspectiveRemovePixelPerCell(CppPtr); }\n        set { au_DetectorParameters_setPerspectiveRemovePixelPerCell(CppPtr, value); }\n      }\n\n      public double PerspectiveRemoveIgnoredMarginPerCell\n      {\n        get { return au_DetectorParameters_getPerspectiveRemoveIgnoredMarginPerCell(CppPtr); }\n        set { au_DetectorParameters_setPerspectiveRemoveIgnoredMarginPerCell(CppPtr, value); }\n      }\n\n      public double MaxErroneousBitsInBorderRate\n      {\n        get { return au_DetectorParameters_getMaxErroneousBitsInBorderRate(CppPtr); }\n        set { au_DetectorParameters_setMaxErroneousBitsInBorderRate(CppPtr, value); }\n      }\n\n      public double MinOtsuStdDev\n      {\n        get { return au_DetectorParameters_getMinOtsuStdDev(CppPtr); }\n        set { au_DetectorParameters_setMinOtsuStdDev(CppPtr, value); }\n      }\n\n      public double ErrorCorrectionRate\n      {\n        get { return au_DetectorParameters_getErrorCorrectionRate(CppPtr); }\n        set { au_DetectorParameters_setErrorCorrectionRate(CppPtr, value); }\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/DetectorParameters.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 8e80dc63fddc4cc43a91d70107fbac55\r\ntimeCreated: 1473175557\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/Dictionary.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Aruco\n  {\n    public class Dictionary : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_Dictionary_new1(IntPtr bytesList, int markerSize, int maxCorrectionBits);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_Dictionary_new2(IntPtr dictionary);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_Dictionary_delete(IntPtr dictionary);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_Dictionary_drawMarker(IntPtr dictionary, int id, int sidePixels, out IntPtr img, int borderBits, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_Dictionary_getDistanceToId(IntPtr dictionary, IntPtr bits, int id, bool allRotations, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern bool au_Dictionary_identify(IntPtr dictionary, IntPtr onlyBits, out int idx, out int rotation, double maxCorrectionRate, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_Dictionary_getBitsFromByteList(IntPtr byteList, int markerSize, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_Dictionary_getByteListFromBits(IntPtr bits);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_Dictionary_getBytesList(IntPtr dictionary);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_Dictionary_setBytesList(IntPtr dictionary, IntPtr bytesList);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_Dictionary_getMarkerSize(IntPtr dictionary);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_Dictionary_setMarkerSize(IntPtr dictionary, int markerSize);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_Dictionary_getMaxCorrectionBits(IntPtr dictionary);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_Dictionary_setMaxCorrectionBits(IntPtr dictionary, int maxCorrectionBits);\n\n      // Constructors & destructor\n\n      public Dictionary(Cv.Mat bytesList, int markerSize = 0, int maxCorrectionBits = 0)\n        : base(au_Dictionary_new1(bytesList.CppPtr, markerSize, maxCorrectionBits))\n      {\n      }\n\n      public Dictionary() : this(new Cv.Mat())\n      {\n      }\n\n      public Dictionary(Dictionary dictionary) : base(au_Dictionary_new2(dictionary.CppPtr))\n      {\n      }\n\n      internal Dictionary(IntPtr dictionaryPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(dictionaryPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_Dictionary_delete(CppPtr);\n      }\n\n      // Properties\n\n      public Cv.Mat BytesList\n      {\n        get { return new Cv.Mat(au_Dictionary_getBytesList(CppPtr), DeleteResponsibility.False); }\n        set { au_Dictionary_setBytesList(CppPtr, value.CppPtr); }\n      }\n\n      public int MarkerSize\n      {\n        get { return au_Dictionary_getMarkerSize(CppPtr); }\n        set { au_Dictionary_setMarkerSize(CppPtr, value); }\n      }\n\n      public int MaxCorrectionBits\n      {\n        get { return au_Dictionary_getMaxCorrectionBits(CppPtr); }\n        set { au_Dictionary_setMaxCorrectionBits(CppPtr, value); }\n      }\n\n      public PredefinedDictionaryName Name { get; set; }\n\n      // Static methods\n\n      static public Cv.Mat GetBitsFromByteList(Cv.Mat byteList, int markerSiz)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        Cv.Mat bits = new Cv.Mat(au_Dictionary_getBitsFromByteList(byteList.CppPtr, markerSiz, exception.CppPtr));\n        exception.Check();\n        return bits;\n      }\n\n      static public Cv.Mat GetByteListFromBits(IntPtr bits)\n      {\n        return new Cv.Mat(au_Dictionary_getByteListFromBits(bits));\n      }\n\n      // Methods\n\n      public void DrawMarker(int id, int sidePixels, out Cv.Mat img, int borderBits)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        IntPtr imgPtr;\n\n        au_Dictionary_drawMarker(CppPtr, id, sidePixels, out imgPtr, borderBits, exception.CppPtr);\n        img = new Cv.Mat(imgPtr);\n\n        exception.Check();\n      }\n\n      public int GetDistanceToId(Dictionary dictionary, Cv.Mat bits, int id, bool allRotations = true)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        int distanceToId = au_Dictionary_getDistanceToId(CppPtr, bits.CppPtr, id, allRotations, exception.CppPtr);\n        exception.Check();\n        return distanceToId;\n      }\n\n      public bool Identify(Dictionary dictionary, Cv.Mat onlyBits, out int idx, out int rotation, double maxCorrectionRate)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        bool result = au_Dictionary_identify(CppPtr, onlyBits.CppPtr, out idx, out rotation, maxCorrectionRate, exception.CppPtr);\n        exception.Check();\n        return result;\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/Dictionary.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: e1cadcf5b9a8527448b40065a335f4c5\r\ntimeCreated: 1472228401\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/GridBoard.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Aruco\n  {\n    public class GridBoard : Board\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_GridBoard_delete(IntPtr gridBoard);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_GridBoard_draw(IntPtr gridBoard, IntPtr outSize, out IntPtr img, int marginSize, int borderBits,\n        IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_GridBoard_getGridSize(IntPtr gridBoard);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern float au_GridBoard_getMarkerLength(IntPtr gridBoard);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern float au_GridBoard_getMarkerSeparation(IntPtr gridBoard);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_GridBoard_create(int markersX, int markersY, float markerLength, float markerSeparation,\n        IntPtr dictionary, int firstMarker, IntPtr exception);\n\n      // Constructors & destructor\n\n      internal GridBoard(IntPtr gridBoardPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n          : base(gridBoardPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_GridBoard_delete(CppPtr);\n      }\n\n      // Static methods\n\n      static public GridBoard Create(int markersX, int markersY, float markerLength, float markerSeparation, Dictionary dictionary,\n        int firstMarker = 0)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        IntPtr gridBoardPtr = au_GridBoard_create(markersX, markersY, markerLength, markerSeparation, dictionary.CppPtr, firstMarker,\n          exception.CppPtr);\n        exception.Check();\n        return new GridBoard(gridBoardPtr);\n      }\n\n      // Methods\n\n      public void Draw(Cv.Size outSize, out Cv.Mat img, int marginSize = 0, int borderBits = 1)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        IntPtr imgPtr;\n\n        au_GridBoard_draw(CppPtr, outSize.CppPtr, out imgPtr, marginSize, borderBits, exception.CppPtr);\n        img = new Cv.Mat(imgPtr);\n\n        exception.Check();\n      }\n\n      public Cv.Size GetGridSize()\n      {\n        return new Cv.Size(au_GridBoard_getGridSize(CppPtr));\n      }\n\n      public float GetMarkerLength()\n      {\n        return au_GridBoard_getMarkerLength(CppPtr);\n      }\n\n      public float GetMarkerSeparation()\n      {\n        return au_GridBoard_getMarkerSeparation(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco/GridBoard.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 1ff1c0d67b2576248929575388eb0dd8\r\ntimeCreated: 1476154441\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Aruco.meta",
    "content": "fileFormatVersion: 2\r\nguid: 77e8d1821a6b36445ab1ed1546120ffd\r\nfolderAsset: yes\r\ntimeCreated: 1490303539\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Calib3d.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    // Enums\n\n    public enum Calib\n    {\n      UseIntrinsicGuess = 0x00001,\n      FixAspectRatio = 0x00002,\n      FixPrincipalPoint = 0x00004,\n      ZeroTangentDist = 0x00008,\n      FixK1 = 0x00020,\n      FixK2 = 0x00040,\n      FixK3 = 0x00080,\n      FixK4 = 0x00800,\n      FixK5 = 0x01000,\n      FixK6 = 0x02000,\n      RationalModel = 0x04000,\n      ThinPrismModel = 0x08000,\n      FixS1S2S3S4 = 0x10000,\n      TiltedModel = 0x40000,\n      FixTauxTauy = 0x80000,\n      // Following are only for stereo\n      FixFocalLength = 0x00010,\n      FixIntrinsic = 0x00100,\n      SameFocalLength = 0x00200\n    };\n\n    public enum StereoRectifyFlags\n    {\n      ZeroDisparity = 1024\n    };\n\n    // Native functions\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern double au_cv_calib3d_calibrateCamera1(IntPtr objectPoints, IntPtr imagePoints, IntPtr imageSize,\n      IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs,\n      IntPtr stdDeviationsIntrinsics, IntPtr stdDeviationsExtrinsics, IntPtr perViewErrors, int flags,\n      IntPtr criteria, IntPtr exception);\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern double au_cv_calib3d_calibrateCamera2(IntPtr objectPoints, IntPtr imagePoints, IntPtr imageSize,\n      IntPtr cameraMatrix, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs, int flags, IntPtr criteria,\n      IntPtr exception);\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern IntPtr au_cv_calib3d_initCameraMatrix2D(IntPtr objectPoints, IntPtr imagePoints, IntPtr imageSize,\n      double aspectRatio, IntPtr exception);\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern void au_cv_calib3d_Rodrigues1(IntPtr rotationVector, out IntPtr rotationMatrix, IntPtr exception);\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern void au_cv_calib3d_Rodrigues2(IntPtr rotationMatrix, out IntPtr rotationVector, IntPtr exception);\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern double au_cv_calib3d_stereoCalibrate(IntPtr objectPoints, IntPtr imagePoints1, IntPtr imagePoints2,\n      IntPtr cameraMatrix1, IntPtr distCoeffs1, IntPtr cameraMatrix2, IntPtr distCoeffs2, IntPtr imageSize,\n      out IntPtr R, out IntPtr T, out IntPtr E, out IntPtr F, int flags, IntPtr criteria,\n      IntPtr exception);\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern void au_cv_calib3d_stereoRectify(IntPtr cameraMatrix1, IntPtr distCoeffs1, IntPtr cameraMatrix2,\n      IntPtr distCoeffs2, IntPtr imageSize, IntPtr R, IntPtr T, out IntPtr R1, out IntPtr R2,\n      out IntPtr P1, out IntPtr P2, out IntPtr Q, int flags, double alpha, IntPtr newImageSize,\n      IntPtr validPixROI1, IntPtr validPixROI2, IntPtr exception);\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern IntPtr au_cv_calib3d_getOptimalNewCameraMatrix(IntPtr cameraMatrix, IntPtr distCoeffs,\n      IntPtr imageSize, double scalingFactor, IntPtr newImageSize, IntPtr validPixROI, bool centerPrincipalPoint,\n      IntPtr exception);\n\n    // Static methods\n\n    public static double CalibrateCamera(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize,\n      Mat cameraMatrix, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Std.VectorDouble stdDeviationsIntrinsics,\n      Std.VectorDouble stdDeviationsExtrinsics, Std.VectorDouble perViewErrors, Calib flags, TermCriteria criteria)\n    {\n      Exception exception = new Exception();\n      IntPtr rvecsPtr, tvecsPtr;\n\n      double error = au_cv_calib3d_calibrateCamera1(objectPoints.CppPtr, imagePoints.CppPtr, imageSize.CppPtr, cameraMatrix.CppPtr,\n        distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, stdDeviationsIntrinsics.CppPtr, stdDeviationsExtrinsics.CppPtr, perViewErrors.CppPtr,\n        (int)flags, criteria.CppPtr, exception.CppPtr);\n      rvecs = new Std.VectorVec3d(rvecsPtr);\n      tvecs = new Std.VectorVec3d(tvecsPtr);\n      exception.Check();\n\n      return error;\n    }\n\n    public static double CalibrateCamera(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize,\n      Mat cameraMatrix, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Std.VectorDouble stdDeviationsIntrinsics,\n      Std.VectorDouble stdDeviationsExtrinsics, Std.VectorDouble perViewErrors, Calib flags = 0)\n    {\n      TermCriteria criteria = new TermCriteria(TermCriteria.Type.Count | TermCriteria.Type.Eps, 30, EPSILON);\n      return CalibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs, stdDeviationsIntrinsics,\n        stdDeviationsExtrinsics, perViewErrors, flags, criteria);\n    }\n\n    public static double CalibrateCamera(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize,\n      Mat cameraMatrix, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Calib flags, TermCriteria criteria)\n    {\n      Exception exception = new Exception();\n      IntPtr rvecsPtr, tvecsPtr;\n\n      double error = au_cv_calib3d_calibrateCamera2(objectPoints.CppPtr, imagePoints.CppPtr, imageSize.CppPtr, cameraMatrix.CppPtr,\n        distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, (int)flags, criteria.CppPtr, exception.CppPtr);\n      rvecs = new Std.VectorVec3d(rvecsPtr);\n      tvecs = new Std.VectorVec3d(tvecsPtr);\n\n      exception.Check();\n      return error;\n    }\n\n    public static double CalibrateCamera(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize,\n      Mat cameraMatrix, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Calib flags = 0)\n    {\n      TermCriteria criteria = new TermCriteria(TermCriteria.Type.Count | TermCriteria.Type.Eps, 30, EPSILON);\n      return CalibrateCamera(objectPoints, imagePoints, imageSize, cameraMatrix, distCoeffs, out rvecs, out tvecs, flags, criteria);\n    }\n\n    public static Mat InitCameraMatrix2D(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize,\n      double aspectRatio = 1.0)\n    {\n      Exception exception = new Exception();\n      IntPtr cameraMatrixPtr = au_cv_calib3d_initCameraMatrix2D(objectPoints.CppPtr, imagePoints.CppPtr, imageSize.CppPtr, aspectRatio,\n        exception.CppPtr);\n      exception.Check();\n      return new Mat(cameraMatrixPtr);\n    }\n\n    public static void Rodrigues(Vec3d rotationVector, out Mat rotationMatrix)\n    {\n      Exception exception = new Exception();\n      IntPtr rotationMatrixPtr;\n      au_cv_calib3d_Rodrigues1(rotationVector.CppPtr, out rotationMatrixPtr, exception.CppPtr);\n      rotationMatrix = new Mat(rotationMatrixPtr);\n      exception.Check();\n    }\n\n    public static void Rodrigues(Mat rotationMatrix, out Vec3d rotationVector)\n    {\n      Exception exception = new Exception();\n      IntPtr rotationVectorPtr;\n      au_cv_calib3d_Rodrigues2(rotationMatrix.CppPtr, out rotationVectorPtr, exception.CppPtr);\n      rotationVector = new Vec3d(rotationVectorPtr);\n      exception.Check();\n    }\n\n    public static double StereoCalibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints1,\n      Std.VectorVectorPoint2f imagePoints2, Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize,\n      out Mat rotationMatrix, out Vec3d tvec, out Mat essentialMatrix, out Mat fundamentalMatrix, Calib flags, TermCriteria criteria)\n    {\n      Exception exception = new Exception();\n      IntPtr rotationMatrixPtr, tvecPtr, essentialMatrixPtr, fundamentalMatrixPtr;\n\n      double error = au_cv_calib3d_stereoCalibrate(objectPoints.CppPtr, imagePoints1.CppPtr, imagePoints2.CppPtr, cameraMatrix1.CppPtr,\n        distCoeffs1.CppPtr, cameraMatrix2.CppPtr, distCoeffs2.CppPtr, imageSize.CppPtr, out rotationMatrixPtr, out tvecPtr, out essentialMatrixPtr,\n        out fundamentalMatrixPtr, (int)flags, criteria.CppPtr, exception.CppPtr);\n      rotationMatrix = new Mat(rotationMatrixPtr);\n      tvec = new Vec3d(tvecPtr);\n      essentialMatrix = new Mat(essentialMatrixPtr);\n      fundamentalMatrix = new Mat(fundamentalMatrixPtr);\n\n      exception.Check();\n      return error;\n    }\n\n    public static double StereoCalibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints1,\n      Std.VectorVectorPoint2f imagePoints2, Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize,\n      out Mat rotationMatrix, out Vec3d tvec, out Mat essentialMatrix, out Mat fundamentalMatrix, Calib flags = Calib.FixIntrinsic)\n    {\n      TermCriteria criteria = new TermCriteria(TermCriteria.Type.Count | TermCriteria.Type.Eps, 30, 1e-6);\n      return StereoCalibrate(objectPoints, imagePoints1, imagePoints2, cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize,\n        out rotationMatrix, out tvec, out essentialMatrix, out fundamentalMatrix, flags, criteria);\n    }\n\n    public static void StereoRectify(Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize, Mat rotationMatrix,\n      Vec3d tvec, out Mat rectificationMatrix1, out Mat rectificationMatrix2, out Mat projectionMatrix1, out Mat projectionMatrix2,\n      out Mat disparityMatrix, StereoRectifyFlags flags, double scalingFactor, Size newImageSize, Rect validPixROI1, Rect validPixROI2)\n    {\n      Exception exception = new Exception();\n      IntPtr rectificationMatrix1Ptr, rectificationMatrix2Ptr, projectionMatrix1Ptr, projectionMatrix2Ptr, disparityMatrixPtr;\n\n      au_cv_calib3d_stereoRectify(cameraMatrix1.CppPtr, distCoeffs1.CppPtr, cameraMatrix2.CppPtr, distCoeffs2.CppPtr, imageSize.CppPtr,\n        rotationMatrix.CppPtr, tvec.CppPtr, out rectificationMatrix1Ptr, out rectificationMatrix2Ptr, out projectionMatrix1Ptr,\n        out projectionMatrix2Ptr, out disparityMatrixPtr, (int)flags, scalingFactor, newImageSize.CppPtr, validPixROI1.CppPtr,\n        validPixROI2.CppPtr, exception.CppPtr);\n      rectificationMatrix1 = new Mat(rectificationMatrix1Ptr);\n      rectificationMatrix2 = new Mat(rectificationMatrix2Ptr);\n      projectionMatrix1 = new Mat(projectionMatrix1Ptr);\n      projectionMatrix2 = new Mat(projectionMatrix2Ptr);\n      disparityMatrix = new Mat(disparityMatrixPtr);\n\n      exception.Check();\n    }\n\n    public static void StereoRectify(Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize, Mat rotationMatrix,\n      Vec3d tvec, out Mat rectificationMatrix1, out Mat rectificationMatrix2, out Mat projectionMatrix1, out Mat projectionMatrix2,\n      out Mat disparityMatrix, StereoRectifyFlags flags, double scalingFactor, Size newImageSize, Rect validPixROI1)\n    {\n      Rect validPixROI2 = new Rect();\n      StereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, rotationMatrix, tvec, out rectificationMatrix1,\n        out rectificationMatrix2, out projectionMatrix1, out projectionMatrix2, out disparityMatrix, flags, scalingFactor, newImageSize,\n        validPixROI1, validPixROI2);\n    }\n\n    public static void StereoRectify(Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize, Mat rotationMatrix,\n      Vec3d tvec, out Mat rectificationMatrix1, out Mat rectificationMatrix2, out Mat projectionMatrix1, out Mat projectionMatrix2,\n      out Mat disparityMatrix, StereoRectifyFlags flags, double scalingFactor, Size newImageSize)\n    {\n      Rect validPixROI1 = new Rect();\n      StereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, rotationMatrix, tvec, out rectificationMatrix1,\n        out rectificationMatrix2, out projectionMatrix1, out projectionMatrix2, out disparityMatrix, flags, scalingFactor, newImageSize,\n        validPixROI1);\n    }\n\n    public static void StereoRectify(Mat cameraMatrix1, Mat distCoeffs1, Mat cameraMatrix2, Mat distCoeffs2, Size imageSize, Mat rotationMatrix,\n      Vec3d tvec, out Mat rectificationMatrix1, out Mat rectificationMatrix2, out Mat projectionMatrix1, out Mat projectionMatrix2,\n      out Mat disparityMatrix, StereoRectifyFlags flags = StereoRectifyFlags.ZeroDisparity, double scalingFactor = -1)\n    {\n      Size newImageSize = new Size();\n      StereoRectify(cameraMatrix1, distCoeffs1, cameraMatrix2, distCoeffs2, imageSize, rotationMatrix, tvec, out rectificationMatrix1,\n        out rectificationMatrix2, out projectionMatrix1, out projectionMatrix2, out disparityMatrix, flags, scalingFactor, newImageSize);\n    }\n\n    public static Mat GetOptimalNewCameraMatrix(Mat cameraMatrix, Mat distCoeffs, Size imageSize, double scalingFactor, Size newImageSize,\n      Rect validPixRoi, bool centerPrincipalPoint = false)\n    {\n      Exception exception = new Exception();\n      IntPtr newCameraMatrixPtr;\n\n      newCameraMatrixPtr = au_cv_calib3d_getOptimalNewCameraMatrix(cameraMatrix.CppPtr, distCoeffs.CppPtr, imageSize.CppPtr, scalingFactor,\n        newImageSize.CppPtr, validPixRoi.CppPtr, centerPrincipalPoint, exception.CppPtr);\n\n      exception.Check();\n      return (newCameraMatrixPtr != IntPtr.Zero) ? new Mat(newCameraMatrixPtr) : null;\n    }\n\n    public static Mat GetOptimalNewCameraMatrix(Mat cameraMatrix, Mat distCoeffs, Size imageSize, double scalingFactor, Size newImageSize)\n    {\n      Rect validPixROI = new Rect();\n      return GetOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, scalingFactor, newImageSize, validPixROI);\n    }\n\n    public static Mat GetOptimalNewCameraMatrix(Mat cameraMatrix, Mat distCoeffs, Size imageSize, double scalingFactor)\n    {\n      Size newImageSize = imageSize;\n      return GetOptimalNewCameraMatrix(cameraMatrix, distCoeffs, imageSize, scalingFactor, newImageSize);\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Calib3d.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 7b57a12c3ec3c7647830358c43f8a2a8\r\ntimeCreated: 1477514709\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Ccalib.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public static partial class Omnidir\n    {\n      // Enums\n\n      public enum Calib\n      {\n        UseGuess = 1,\n        FixSkew = 2,\n        FixK1 = 4,\n        FixK2 = 8,\n        FixP1 = 16,\n        FixP2 = 32,\n        FixXi = 64,\n        FixGamma = 128,\n        FixCenter = 256,\n      };\n\n      public enum Rectifify\n      {\n        Perspective = 1,\n        Cylindrical = 2,\n        Longlati = 3,\n        Stereographic = 4\n      };\n\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_cv_ccalib_omnidir_calibrate(IntPtr objectPoints, IntPtr imagePoints, IntPtr imageSize,\n        IntPtr cameraMatrix, IntPtr xi, IntPtr distCoeffs, out IntPtr rvecs, out IntPtr tvecs, int flags,\n        IntPtr criteria, out IntPtr idx, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_ccalib_omnidir_initUndistortRectifyMap(IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr xi,\n        IntPtr R, IntPtr newCameraMatrix, IntPtr size, int m1type, out IntPtr map1, out IntPtr map2, int flags,\n        IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_cv_ccalib_omnidir_stereoCalibrate(IntPtr objectPoints, IntPtr imagePoints1, IntPtr imagePoints2,\n        IntPtr imageSize1, IntPtr imageSize2, IntPtr cameraMatrix1, IntPtr xi1, IntPtr distCoeffs1,\n         IntPtr cameraMatrix2, IntPtr xi2, IntPtr distCoeffs2, out IntPtr rvec, out IntPtr tvec,\n         out IntPtr rvecsL, out IntPtr tvecsL, int flags, IntPtr criteria, out IntPtr idx, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_ccalib_omnidir_stereoRectify(IntPtr rvec, IntPtr tvec, out IntPtr R1, out IntPtr R2,\n        IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_ccalib_omnidir_undistortImage(IntPtr distorted, out IntPtr undistorted, IntPtr cameraMatrix,\n        IntPtr distCoeffs, IntPtr xi, int flags, IntPtr newCameraMatrix, IntPtr newSize, IntPtr R,\n        IntPtr exception);\n\n      // Static methods\n\n      public static double Calibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize,\n        Mat cameraMatrix, Mat xi, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Calib flags, TermCriteria criteria,\n        out Mat idx)\n      {\n        Exception exception = new Exception();\n        IntPtr rvecsPtr, tvecsPtr, idxPtr;\n\n        double error = au_cv_ccalib_omnidir_calibrate(objectPoints.CppPtr, imagePoints.CppPtr, imageSize.CppPtr, cameraMatrix.CppPtr,\n          xi.CppPtr, distCoeffs.CppPtr, out rvecsPtr, out tvecsPtr, (int)flags, criteria.CppPtr, out idxPtr, exception.CppPtr);\n        rvecs = new Std.VectorVec3d(rvecsPtr);\n        tvecs = new Std.VectorVec3d(tvecsPtr);\n        idx = new Mat(idxPtr);\n\n        exception.Check();\n        return error;\n      }\n\n      public static double Calibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize,\n        Mat cameraMatrix, Mat xi, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Calib flags, TermCriteria criteria)\n      {\n        Mat idx;\n        return Calibrate(objectPoints, imagePoints, imageSize, cameraMatrix, xi, distCoeffs, out rvecs, out tvecs, flags, criteria, out idx);\n      }\n\n      public static double Calibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints, Size imageSize,\n        Mat cameraMatrix, Mat xi, Mat distCoeffs, out Std.VectorVec3d rvecs, out Std.VectorVec3d tvecs, Calib flags)\n      {\n        TermCriteria criteria = new TermCriteria(TermCriteria.Type.Count | TermCriteria.Type.Eps, 200, EPSILON);\n        return Calibrate(objectPoints, imagePoints, imageSize, cameraMatrix, xi, distCoeffs, out rvecs, out tvecs, flags, criteria);\n      }\n\n      public static void InitUndistortRectifyMap(Mat cameraMatrix, Mat distCoeffs, Mat xi, Mat R, Mat newCameraMatrix, Size size, Type m1type,\n        out Mat map1, out Mat map2, Rectifify flags)\n      {\n        Exception exception = new Exception();\n        IntPtr map1Ptr, map2Ptr;\n\n        au_cv_ccalib_omnidir_initUndistortRectifyMap(cameraMatrix.CppPtr, distCoeffs.CppPtr, xi.CppPtr, R.CppPtr, newCameraMatrix.CppPtr, size.CppPtr,\n          (int)m1type, out map1Ptr, out map2Ptr, (int)flags, exception.CppPtr);\n        map1 = new Mat(map1Ptr);\n        map2 = new Mat(map2Ptr);\n\n        exception.Check();\n      }\n\n      public static double StereoCalibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints1,\n        Std.VectorVectorPoint2f imagePoints2, Size imageSize1, Size imageSize2, Mat cameraMatrix1, Mat xi1, Mat distCoeffs1, Mat cameraMatrix2,\n        Mat xi2, Mat distCoeffs2, out Vec3d rvec, out Vec3d tvec, out Std.VectorVec3d rvecsL, out Std.VectorVec3d tvecsL, Calib flags,\n        TermCriteria criteria, out Mat idx)\n      {\n        Exception exception = new Exception();\n        IntPtr rvecPtr, tvecPtr, rvecsLPtr, tvecsLPtr, idxPtr;\n\n        double error = au_cv_ccalib_omnidir_stereoCalibrate(objectPoints.CppPtr, imagePoints1.CppPtr, imagePoints2.CppPtr, imageSize1.CppPtr,\n          imageSize2.CppPtr, cameraMatrix1.CppPtr, xi1.CppPtr, distCoeffs1.CppPtr, cameraMatrix2.CppPtr, xi2.CppPtr, distCoeffs2.CppPtr, out rvecPtr,\n          out tvecPtr, out rvecsLPtr, out tvecsLPtr, (int)flags, criteria.CppPtr, out idxPtr, exception.CppPtr);\n        rvec = new Vec3d(rvecPtr);\n        tvec = new Vec3d(tvecPtr);\n        rvecsL = new Std.VectorVec3d(rvecsLPtr);\n        tvecsL = new Std.VectorVec3d(tvecsLPtr);\n        idx = new Mat(idxPtr);\n\n        exception.Check();\n        return error;\n      }\n\n      public static double StereoCalibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints1,\n        Std.VectorVectorPoint2f imagePoints2, Size imageSize1, Size imageSize2, Mat cameraMatrix1, Mat xi1, Mat distCoeffs1, Mat cameraMatrix2,\n        Mat xi2, Mat distCoeffs2, out Vec3d rvec, out Vec3d tvec, out Std.VectorVec3d rvecsL, out Std.VectorVec3d tvecsL, Calib flags, TermCriteria criteria)\n      {\n        Mat idx;\n        return StereoCalibrate(objectPoints, imagePoints1, imagePoints2, imageSize1, imageSize2, cameraMatrix1, xi1, distCoeffs1, cameraMatrix2,\n          xi2, distCoeffs2, out rvec, out tvec, out rvecsL, out tvecsL, flags, criteria, out idx);\n      }\n\n      public static double StereoCalibrate(Std.VectorVectorPoint3f objectPoints, Std.VectorVectorPoint2f imagePoints1,\n        Std.VectorVectorPoint2f imagePoints2, Size imageSize1, Size imageSize2, Mat cameraMatrix1, Mat xi1, Mat distCoeffs1, Mat cameraMatrix2,\n        Mat xi2, Mat distCoeffs2, out Vec3d rvec, out Vec3d tvec, out Std.VectorVec3d rvecsL, out Std.VectorVec3d tvecsL, Calib flags)\n      {\n        TermCriteria criteria = new TermCriteria(TermCriteria.Type.Count | TermCriteria.Type.Eps, 200, EPSILON);\n        return StereoCalibrate(objectPoints, imagePoints1, imagePoints2, imageSize1, imageSize2, cameraMatrix1, xi1, distCoeffs1, cameraMatrix2,\n          xi2, distCoeffs2, out rvec, out tvec, out rvecsL, out tvecsL, flags, criteria);\n      }\n\n      public static void StereoRectify(Vec3d rvec, Vec3d tvec, out Mat R1, out Mat R2)\n      {\n        Exception exception = new Exception();\n        IntPtr R1Ptr, R2Ptr;\n\n        au_cv_ccalib_omnidir_stereoRectify(rvec.CppPtr, tvec.CppPtr, out R1Ptr, out R2Ptr, exception.CppPtr);\n        R1 = new Mat(R1Ptr);\n        R2 = new Mat(R2Ptr);\n\n        exception.Check();\n      }\n\n      public static void UndistortImage(Mat distorted, out Mat undistorted, Mat cameraMatrix, Mat distCoeffs, Mat xi, Rectifify flags,\n        Mat newCameraMatrix, Size newSize, Mat R)\n      {\n        Exception exception = new Exception();\n        IntPtr undistortedPtr;\n\n        au_cv_ccalib_omnidir_undistortImage(distorted.CppPtr, out undistortedPtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, xi.CppPtr, (int)flags,\n          newCameraMatrix.CppPtr, newSize.CppPtr, R.CppPtr, exception.CppPtr);\n        undistorted = new Mat(undistortedPtr);\n\n        exception.Check();\n      }\n\n      public static void UndistortImage(Mat distorted, out Mat undistorted, Mat cameraMatrix, Mat distCoeffs, Mat xi, Rectifify flags,\n        Mat newCameraMatrix, Size newSize)\n      {\n        Mat R = new Mat(3, 3, Type.CV_64F, new double[9] { 1, 0, 0, 0, 1, 0, 0, 0, 1 });\n        UndistortImage(distorted, out undistorted, cameraMatrix, distorted, xi, flags, newCameraMatrix, newSize, R);\n      }\n\n      public static void UndistortImage(Mat distorted, out Mat undistorted, Mat cameraMatrix, Mat distCoeffs, Mat xi, Rectifify flags,\n        Mat newCameraMatrix)\n      {\n        Size newSize = new Size();\n        UndistortImage(distorted, out undistorted, cameraMatrix, distorted, xi, flags, newCameraMatrix, newSize);\n      }\n\n      public static void UndistortImage(Mat distorted, out Mat undistorted, Mat cameraMatrix, Mat distCoeffs, Mat xi, Rectifify flags)\n      {\n        UndistortImage(distorted, out undistorted, cameraMatrix, distorted, xi, flags, cameraMatrix);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Ccalib.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: cc736cee2ab42454e94628875b1c4671\r\ntimeCreated: 1493162376\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Core.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    // Constants\n\n    public const int CN_SHIFT = 3;\n    public const int DEPTH_MAX = 1 << CN_SHIFT;\n    public const int MAT_DEPTH_MAX = DEPTH_MAX - 1;\n    public const double EPSILON = 2.2204460492503131e-016;\n\n    public const int horizontalFlipCode = 1;\n    public const int verticalFlipCode = 0;\n    public const int bothAxesFlipCode = -1;\n\n    // Enums\n\n    public enum Type\n    {\n      CV_8U = 0,\n      CV_8UC1 = (CV_8U & MAT_DEPTH_MAX) + (0 << CN_SHIFT),\n      CV_8UC2 = (CV_8U & MAT_DEPTH_MAX) + (1 << CN_SHIFT),\n      CV_8UC3 = (CV_8U & MAT_DEPTH_MAX) + (2 << CN_SHIFT),\n      CV_8UC4 = (CV_8U & MAT_DEPTH_MAX) + (3 << CN_SHIFT),\n      CV_16S = 3,\n      CV_16SC1 = (CV_16S & MAT_DEPTH_MAX) + (0 << CN_SHIFT),\n      CV_16SC2 = (CV_16S & MAT_DEPTH_MAX) + (1 << CN_SHIFT),\n      CV_16SC3 = (CV_16S & MAT_DEPTH_MAX) + (2 << CN_SHIFT),\n      CV_16SC4 = (CV_16S & MAT_DEPTH_MAX) + (3 << CN_SHIFT),\n      CV_64F = 6,\n      CV_64FC1 = (CV_64F & MAT_DEPTH_MAX) + (0 << CN_SHIFT),\n      CV_64FC2 = (CV_64F & MAT_DEPTH_MAX) + (1 << CN_SHIFT),\n      CV_64FC3 = (CV_64F & MAT_DEPTH_MAX) + (2 << CN_SHIFT),\n      CV_64FC4 = (CV_64F & MAT_DEPTH_MAX) + (3 << CN_SHIFT),\n    };\n\n    // Native functions\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern void au_cv_core_flip(IntPtr src, IntPtr dst, int flipCode, IntPtr exception);\n\n    // Static methods\n\n    public static void Flip(Mat src, Mat dst, int flipCode)\n    {\n      Exception exception = new Exception();\n      au_cv_core_flip(src.CppPtr, dst.CppPtr, flipCode, exception.CppPtr);\n      exception.Check();\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Core.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 8171f90e207e55a47a9b8c736588b731\r\ntimeCreated: 1490206055\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Exception.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\nusing System.Text;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public class Exception : HandleCppPtr\n    {\n      // Constants\n\n      private const int WhatLength = 1024;\n\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Exception_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Exception_delete(IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Exception_what(IntPtr exception, StringBuilder sb, int sbLength);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Exception_getCode(IntPtr exception);\n\n      // Variables\n\n      private StringBuilder sb;\n\n      // Constructor & Destructor\n\n      public Exception() : base(au_cv_Exception_new())\n      {\n        sb = new StringBuilder(WhatLength);\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        //au_cv_Exception_delete(cvPtr); // TODO: fix\n      }\n\n      // Properties\n\n      public int Code\n      {\n        get { return au_cv_Exception_getCode(CppPtr); }\n      }\n\n      // Methods\n\n      public string What()\n      {\n        au_cv_Exception_what(CppPtr, sb, WhatLength);\n        return sb.ToString();\n      }\n\n      public void Check()\n      {\n        if (Code != 0)\n        {\n          throw new System.Exception(What());\n        }\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Exception.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: d6b41ba830f01004082572a07799015d\r\ntimeCreated: 1475010512\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Imgproc.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    // Enums\n\n    /// <summary>\n    /// See the OpenCV documentation for more information: \n    /// http://docs.opencv.org/3.2.0/d2/de8/group__core__array.html#ga209f2f4869e304c82d07739337eae7c5\n    /// </summary>\n    public enum BorderTypes\n    {\n      Constant = 0, /// `iiiiii|abcdefgh|iiiiiii` with some specified `i`\n      Replicate = 1, /// `aaaaaa|abcdefgh|hhhhhhh`\n      Reflect = 2, /// `fedcba|abcdefgh|hgfedcb`\n      Wrap = 3, /// `cdefgh|abcdefgh|abcdefg`\n      Reflect101 = 4, /// `gfedcb|abcdefgh|gfedcba`\n      Transparent = 5, /// `uvwxyz|absdefgh|ijklmno`\n      Default = Reflect101, /// Same as BORDER_REFLECT_101.\n      Isolated = 16 /// Do not look outside of ROI.\n    }\n\n    /// <summary>\n    /// See the OpenCV documentation for more information: \n    /// http://docs.opencv.org/3.2.0/da/d54/group__imgproc__transform.html#gga5bb5a1fea74ea38e1a5445ca803ff121ac97d8e4880d8b5d509e96825c7522deb\n    /// </summary>\n    public enum InterpolationFlags\n    {\n      Nearest = 0, /// Nearest neighbor interpolation.\n      Linear = 1, /// Bilinear interpolation.\n      Cubic = 2, /// Bicubic interpolation.\n      Area = 3, /// Resampling using pixel area relation.\n      Lanczos4 = 4, /// Lanczos interpolation over 8x8 neighborhood.\n      Max = 7, /// Mask for interpolation codes.\n      WarpFillOutliers = 8, /// Fills all of the destination image pixels.\n      WarpInverseMap = 16 /// Inverse transformation.\n    }\n\n    // Native functions\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern void au_cv_imgproc_initUndistortRectifyMap(IntPtr cameraMatrix, IntPtr distCoeffs, IntPtr R,\n      IntPtr newCameraMatrix, IntPtr size, int m1type, out IntPtr map1, out IntPtr map2, IntPtr exception);\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern void au_cv_imgproc_remap(IntPtr src, IntPtr dst, IntPtr map1, IntPtr map2, int interpolation,\n      int borderType, IntPtr borderValue, IntPtr exception);\n\n    [DllImport(\"ArucoUnityPlugin\")]\n    static extern void au_cv_imgproc_undistort(IntPtr rotationVector, out IntPtr rotationMatrix, IntPtr cameraMatrix,\n      IntPtr distCoeffs, IntPtr newCameraMatrix, IntPtr exception);\n\n    // Methods\n\n    public static void InitUndistortRectifyMap(Mat cameraMatrix, Mat distCoeffs, Mat R, Mat newCameraMatrix, Size size, Type m1type, out Mat map1,\n      out Mat map2)\n    {\n      Exception exception = new Exception();\n      IntPtr map1Ptr, map2Ptr;\n\n      au_cv_imgproc_initUndistortRectifyMap(cameraMatrix.CppPtr, distCoeffs.CppPtr, R.CppPtr, newCameraMatrix.CppPtr, size.CppPtr, (int)m1type,\n        out map1Ptr, out map2Ptr, exception.CppPtr);\n      map1 = new Mat(map1Ptr);\n      map2 = new Mat(map2Ptr);\n\n      exception.Check();\n    }\n\n    public static void Remap(Mat src, Mat dst, Mat map1, Mat map2, InterpolationFlags interpolation, BorderTypes borderType, Scalar borderValue)\n    {\n      Exception exception = new Exception();\n      au_cv_imgproc_remap(src.CppPtr, dst.CppPtr, map1.CppPtr, map2.CppPtr, (int)interpolation, (int)borderType, borderValue.CppPtr,\n        exception.CppPtr);\n      exception.Check();\n    }\n\n    public static void Remap(Mat src, Mat dst, Mat map1, Mat map2, InterpolationFlags interpolation, BorderTypes borderType = BorderTypes.Constant)\n    {\n      Scalar borderValue = new Scalar(0, 0, 0);\n      Remap(src, dst, map1, map2, interpolation, borderType, borderValue);\n    }\n\n    public static void Undistort(Mat inputImage, out Mat outputImage, Mat cameraMatrix, Mat distCoeffs, Mat newCameraMatrix)\n    {\n      Exception exception = new Exception();\n      IntPtr outputImagePtr;\n\n      au_cv_imgproc_undistort(inputImage.CppPtr, out outputImagePtr, cameraMatrix.CppPtr, distCoeffs.CppPtr, newCameraMatrix.CppPtr,\n        exception.CppPtr);\n      outputImage = new Mat(outputImagePtr);\n\n      exception.Check();\n    }\n\n    public static void Undistort(Mat inputImage, out Mat outputImage, Mat cameraMatrix, Mat distCoeffs)\n    {\n      Mat newCameraMatrix = new Mat();\n      Undistort(inputImage, out outputImage, cameraMatrix, distCoeffs, newCameraMatrix);\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Imgproc.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 8836f295d6d4c65429ae7939ed5608fd\r\ntimeCreated: 1484166017\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Mat.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public class Mat : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Mat_new1();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Mat_new2(int rows, int cols, int type);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Mat_new3(IntPtr size, int type);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Mat_new8_uchar(int rows, int cols, int type, byte[] data);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Mat_new8_double(int rows, int cols, int type, double[] data);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Mat_delete(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Mat_at_int_get(IntPtr mat, int i0, int i1, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Mat_at_int_set(IntPtr mat, int i0, int i1, int value, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_cv_Mat_at_double_get(IntPtr mat, int i0, int i1, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Mat_at_double_set(IntPtr mat, int i0, int i1, double value, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Mat_channels(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Mat_clone(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Mat_create(IntPtr mat, int rows, int cols, int type, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_cv_Mat_total(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Mat_type(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_cv_Mat_elemSize(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_cv_Mat_elemSize1(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Mat_getCols(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Mat_getData_void(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Mat_setData_void(IntPtr mat, IntPtr data);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern byte[] au_cv_Mat_getData_uchar(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Mat_setData_uchar(IntPtr mat, byte[] data);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Mat_getRows(IntPtr mat);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Mat_getSize(IntPtr mat);\n\n      // Constructors & destructor\n\n      public Mat() : base(au_cv_Mat_new1())\n      {\n      }\n\n      public Mat(int rows, int cols, Type type) : base(au_cv_Mat_new2(rows, cols, (int)type))\n      {\n      }\n\n      public Mat(Size size, Type type) : base(au_cv_Mat_new3(size.CppPtr, (int)type))\n      {\n      }\n\n      public Mat(int rows, int cols, Type type, byte[] data) : base(au_cv_Mat_new8_uchar(rows, cols, (int)type, data))\n      {\n      }\n\n      public Mat(int rows, int cols, Type type, double[] data) : base(au_cv_Mat_new8_double(rows, cols, (int)type, data))\n      {\n      }\n\n      internal Mat(IntPtr matPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(matPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_cv_Mat_delete(CppPtr);\n      }\n\n      // Properties\n\n      public int Cols\n      {\n        get { return au_cv_Mat_getCols(CppPtr); }\n      }\n\n      public IntPtr DataIntPtr\n      {\n        get { return au_cv_Mat_getData_void(CppPtr); }\n        set { au_cv_Mat_setData_void(CppPtr, value); }\n      }\n\n      public byte[] DataByte\n      {\n        get { return au_cv_Mat_getData_uchar(CppPtr); }\n        set { au_cv_Mat_setData_uchar(CppPtr, value); }\n      }\n\n      public int Rows\n      {\n        get { return au_cv_Mat_getRows(CppPtr); }\n      }\n\n      public Size Size\n      {\n        get { return new Size(au_cv_Mat_getSize(CppPtr)); }\n      }\n\n      // Methods\n\n      public int Channels()\n      {\n        return au_cv_Mat_channels(CppPtr);\n      }\n\n      public Mat Clone()\n      {\n        return new Mat(au_cv_Mat_clone(CppPtr));\n      }\n\n      public void Create(int rows, int cols, Type type)\n      {\n        Exception exception = new Exception();\n        au_cv_Mat_create(CppPtr, rows, cols, (int)type, exception.CppPtr);\n        exception.Check();\n      }\n\n      public int AtInt(int i0, int i1)\n      {\n        Exception exception = new Exception();\n        int value = au_cv_Mat_at_int_get(CppPtr, i0, i1, exception.CppPtr);\n        exception.Check();\n        return value;\n      }\n\n      public void AtInt(int i0, int i1, int value)\n      {\n        Exception exception = new Exception();\n        au_cv_Mat_at_int_set(CppPtr, i0, i1, value, exception.CppPtr);\n        exception.Check();\n      }\n\n      public double AtDouble(int i0, int i1)\n      {\n        Exception exception = new Exception();\n        double value = au_cv_Mat_at_double_get(CppPtr, i0, i1, exception.CppPtr);\n        exception.Check();\n        return value;\n      }\n\n      public void AtDouble(int i0, int i1, double value)\n      {\n        Exception exception = new Exception();\n        au_cv_Mat_at_double_set(CppPtr, i0, i1, value, exception.CppPtr);\n        exception.Check();\n      }\n\n      public uint ElemSize()\n      {\n        return au_cv_Mat_elemSize(CppPtr);\n      }\n\n      public uint ElemSize1()\n      {\n        return au_cv_Mat_elemSize1(CppPtr);\n      }\n\n      public uint Total()\n      {\n        return au_cv_Mat_total(CppPtr);\n      }\n\n      public Type Type()\n      {\n        return (Type)au_cv_Mat_type(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Mat.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 1b2dfb39b25b1f74daa38ba5620d9b46\r\ntimeCreated: 1473799894\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Point2f.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\nusing UnityEngine;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public class Point2f : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Point2f_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Point2f_delete(IntPtr point2f);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern float au_cv_Point2f_getX(IntPtr point2f);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Point2f_setX(IntPtr point2f, float x);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern float au_cv_Point2f_getY(IntPtr point2f);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Point2f_setY(IntPtr point2f, float y);\n\n      // Constructors & destructor\n\n      public Point2f() : base(au_cv_Point2f_new())\n      {\n      }\n\n      public Point2f(IntPtr point2fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(point2fPtr, deleteResponsibility)\n      {\n      }\n\n      public static implicit operator Vector2(Point2f point2f)\n      {\n        return new Vector2(point2f.X, point2f.Y);\n      }\n\n      public static implicit operator Vector3(Point2f point2f)\n      {\n        return new Vector3(point2f.X, point2f.Y, 0);\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_cv_Point2f_delete(CppPtr);\n      }\n\n      // Properties\n\n      public float X\n      {\n        get { return au_cv_Point2f_getX(CppPtr); }\n        set { au_cv_Point2f_setX(CppPtr, value); }\n      }\n\n      public float Y\n      {\n        get { return au_cv_Point2f_getY(CppPtr); }\n        set { au_cv_Point2f_setY(CppPtr, value); }\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Point2f.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 0990a30a6e3e33f45bf62e674f99ecd9\r\ntimeCreated: 1475185641\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Point3f.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\nusing UnityEngine;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public class Point3f : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Point3f_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Point3f_delete(IntPtr point3f);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern float au_cv_Point3f_getX(IntPtr point3f);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Point3f_setX(IntPtr point3f, float x);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern float au_cv_Point3f_getY(IntPtr point3f);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Point3f_setY(IntPtr point3f, float y);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern float au_cv_Point3f_getZ(IntPtr point3f);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Point3f_setZ(IntPtr point3f, float z);\n\n      // Constructors & destructor\n\n      public Point3f() : base(au_cv_Point3f_new())\n      {\n      }\n\n      public Point3f(IntPtr point3fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(point3fPtr, deleteResponsibility)\n      {\n      }\n\n      public static implicit operator Vector3(Point3f point3f)\n      {\n        return new Vector3(point3f.X, point3f.Y, point3f.Z);\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_cv_Point3f_delete(CppPtr);\n      }\n\n      // Properties\n\n      public float X\n      {\n        get { return au_cv_Point3f_getX(CppPtr); }\n        set { au_cv_Point3f_setX(CppPtr, value); }\n      }\n\n      public float Y\n      {\n        get { return au_cv_Point3f_getY(CppPtr); }\n        set { au_cv_Point3f_setY(CppPtr, value); }\n      }\n\n      public float Z\n      {\n        get { return au_cv_Point3f_getZ(CppPtr); }\n        set { au_cv_Point3f_setZ(CppPtr, value); }\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Point3f.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 847ac7c13477a3b4387f5c2b57bef4d1\r\ntimeCreated: 1476143477\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Rect.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public class Rect : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Rect_new1();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Rect_new2(int x, int y, int width, int height);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Rect_delete(IntPtr Rect);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Rect_getX(IntPtr Rect);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Rect_setX(IntPtr Rect, int x);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Rect_getY(IntPtr Rect);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Rect_setY(IntPtr Rect, int y);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Rect_getWidth(IntPtr Rect);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Rect_setWidth(IntPtr Rect, int width);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Rect_getHeight(IntPtr Rect);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Rect_setHeight(IntPtr Rect, int height);\n\n      // Constructors & destructor\n\n      public Rect() : base(au_cv_Rect_new1())\n      {\n      }\n\n      public Rect(int x, int y, int width, int height) : base(au_cv_Rect_new2(x, y, width, height))\n      {\n      }\n\n      public Rect(IntPtr RectPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(RectPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_cv_Rect_delete(CppPtr);\n      }\n\n      // Properties\n\n      public int X\n      {\n        get { return au_cv_Rect_getX(CppPtr); }\n        set { au_cv_Rect_setX(CppPtr, value); }\n      }\n\n      public int Y\n      {\n        get { return au_cv_Rect_getY(CppPtr); }\n        set { au_cv_Rect_setY(CppPtr, value); }\n      }\n\n      public int Width\n      {\n        get { return au_cv_Rect_getWidth(CppPtr); }\n        set { au_cv_Rect_setWidth(CppPtr, value); }\n      }\n\n      public int Height\n      {\n        get { return au_cv_Rect_getHeight(CppPtr); }\n        set { au_cv_Rect_setHeight(CppPtr, value); }\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Rect.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: d9d4333436970994b9c644933ff87f83\r\ntimeCreated: 1490979343\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Scalar.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\nusing UnityEngine;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public class Scalar : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Scalar_new(double v0, double v1, double v2);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Scalar_delete(IntPtr scalar);\n\n      // Constructors & destructor\n\n      public Scalar(double v0, double v1, double v2) : base(au_cv_Scalar_new(v0, v1, v2))\n      {\n      }\n\n      public static implicit operator Scalar(Color color)\n      {\n        return new Scalar(color.r, color.g, color.b);\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_cv_Scalar_delete(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Scalar.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: f06d1d8bdcab1d34ca216c5addeb1e62\r\ntimeCreated: 1475871810\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Size.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public class Size : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Size_new1();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Size_new2(int width, int height);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Size_delete(IntPtr size);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Size_area(IntPtr size);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Size_getHeight(IntPtr size);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Size_setHeight(IntPtr size, int height);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Size_getWidth(IntPtr size);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Size_setWidth(IntPtr size, int width);\n\n      // Constructors & destructor\n\n      public Size() : base(au_cv_Size_new1())\n      {\n      }\n\n      public Size(int width, int height) : base(au_cv_Size_new2(width, height))\n      {\n      }\n\n      public Size(IntPtr sizePtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(sizePtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_cv_Size_delete(CppPtr);\n      }\n\n      // Properties\n\n      public int Height\n      {\n        get { return au_cv_Size_getHeight(CppPtr); }\n        set { au_cv_Size_setHeight(CppPtr, value); }\n      }\n\n      public int Width\n      {\n        get { return au_cv_Size_getWidth(CppPtr); }\n        set { au_cv_Size_setWidth(CppPtr, value); }\n      }\n\n      // Methods\n\n      public int Area()\n      {\n        return au_cv_Size_area(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Size.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: b64a74fd00c3be54bb19a2265f81d5b5\r\ntimeCreated: 1476154441\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/TermCriteria.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public class TermCriteria : HandleCppPtr\n    {\n      // Enums\n\n      public enum Type\n      {\n        Count = 0,\n        MaxIter = Count,\n        Eps = 2\n      }\n\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_TermCriteria_new1();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_TermCriteria_new2(int type, int maxCount, double epsilon);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_TermCriteria_delete(IntPtr termCriteria);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_cv_TermCriteria_getEpsilon(IntPtr termCriteria);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_TermCriteria_setEpsilon(IntPtr termCriteria, double epsilon);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_TermCriteria_getMaxCount(IntPtr termCriteria);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_TermCriteria_setMaxCount(IntPtr termCriteria, int maxCount);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_TermCriteria_getType(IntPtr termCriteria);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_TermCriteria_setType(IntPtr termCriteria, int type);\n\n      // Constructors & destructor\n\n      public TermCriteria() : base(au_cv_TermCriteria_new1())\n      {\n      }\n\n      public TermCriteria(Type type, int maxCount, double epsilon) : base(au_cv_TermCriteria_new2((int)type, maxCount, epsilon))\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_cv_TermCriteria_delete(CppPtr);\n      }\n\n      // Properties\n\n      public double Epsilon\n      {\n        get { return au_cv_TermCriteria_getEpsilon(CppPtr); }\n        set { au_cv_TermCriteria_setEpsilon(CppPtr, value); }\n      }\n\n      public int MaxCount\n      {\n        get { return au_cv_TermCriteria_getMaxCount(CppPtr); }\n        set { au_cv_TermCriteria_setMaxCount(CppPtr, value); }\n      }\n\n      public int TypeValue\n      {\n        get { return au_cv_TermCriteria_getType(CppPtr); }\n        set { au_cv_TermCriteria_setType(CppPtr, value); }\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/TermCriteria.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: c31026d104464484abd47c8fb3d208c8\r\ntimeCreated: 1476243863\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Vec3d.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\nusing UnityEngine;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public class Vec3d : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Vec3d_new(double v0, double v1, double v2);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Vec3d_delete(IntPtr vec3d);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern double au_cv_Vec3d_get(IntPtr vec3d, int i, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Vec3d_set(IntPtr vec3d, int i, double value, IntPtr exception);\n\n      // Constructors & destructor\n\n      public Vec3d(double v0 = 0, double v1 = 0, double v2 = 0) : base(au_cv_Vec3d_new(v0, v1, v2))\n      {\n      }\n\n      public Vec3d(IntPtr vec3dPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vec3dPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_cv_Vec3d_delete(CppPtr);\n      }\n\n      // Methods\n\n      public double Get(int i)\n      {\n        Exception exception = new Exception();\n        double value = au_cv_Vec3d_get(CppPtr, i, exception.CppPtr);\n        exception.Check();\n        return value;\n      }\n\n      public void Set(int i, double value)\n      {\n        Exception exception = new Exception();\n        au_cv_Vec3d_set(CppPtr, i, value, exception.CppPtr);\n        exception.Check();\n      }\n\n      /// <summary>\n      /// Converts the Vec3d as an OpenCV's translation vector to a Vector3.\n      /// </summary>\n      /// <returns>The converted vector.</returns>\n      public Vector3 ToPosition()\n      {\n        return new Vector3((float)Get(0), -(float)Get(1), (float)Get(2)); // Convert the vector from left-handed to right-handed\n      }\n\n      /// <summary>\n      /// Converts the Vec3d as an OpenCV's rotation vector to a Quaternion.\n      /// Based on: http://www.euclideanspace.com/maths/geometry/rotations/conversions/angleToQuaternion/\n      /// </summary>\n      /// <returns>The converted quaternion.</returns>\n      public Quaternion ToRotation()\n      {\n        // Convert the vector from left-handed to right-handed\n        Vector3 angleAxis = new Vector3((float)Get(0), -(float)Get(1), (float)Get(2));\n        Vector3 unitVector = angleAxis.normalized;\n        float angle = -angleAxis.magnitude;\n\n        // Convert from axis-angle to quaternion\n        Quaternion rotation;\n        float sinHalfAngle = Mathf.Sin(angle / 2);\n        rotation.x = unitVector.x * sinHalfAngle;\n        rotation.y = unitVector.y * sinHalfAngle;\n        rotation.z = unitVector.z * sinHalfAngle;\n        rotation.w = Mathf.Cos(angle / 2);\n\n        // Re-orient to put the y axis up\n        rotation *= Quaternion.Euler(90f, 0f, 0f);\n\n        return rotation;\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Vec3d.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 5fca78d7a7953224b9ad3a40ee5d72c9\r\ntimeCreated: 1477513240\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Vec4i.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Cv\n  {\n    public class Vec4i : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_cv_Vec4i_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Vec4i_delete(IntPtr vec4i);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_cv_Vec4i_get(IntPtr vec4i, int i, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_cv_Vec4i_set(IntPtr vec4i, int i, int value, IntPtr exception);\n\n      // Constructors & destructor\n\n      public Vec4i() : base(au_cv_Vec4i_new())\n      {\n      }\n\n      public Vec4i(IntPtr vec4iPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vec4iPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_cv_Vec4i_delete(CppPtr);\n      }\n\n      // Methods\n\n      public int Get(int i)\n      {\n        Exception exception = new Exception();\n        int value = au_cv_Vec4i_get(CppPtr, i, exception.CppPtr);\n        exception.Check();\n        return value;\n      }\n\n      public void Set(int i, int value)\n      {\n        Exception exception = new Exception();\n        au_cv_Vec4i_set(CppPtr, i, value, exception.CppPtr);\n        exception.Check();\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv/Vec4i.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: dc04c145ff0d6bb4e8c196b47ff9827d\r\ntimeCreated: 1476731429\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Cv.meta",
    "content": "fileFormatVersion: 2\r\nguid: e8851f331b599e94c8ee7169d66e4cb6\r\nfolderAsset: yes\r\ntimeCreated: 1484338982\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/HandleCppPtr.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n    public enum DeleteResponsibility\n    {\n      True,\n      False\n    }\n\n    public abstract class HandleCppPtr\n    {\n      // Constructors & destructor\n\n      public HandleCppPtr(DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n      {\n        CppPtr = IntPtr.Zero;\n        DeleteResponsibility = deleteResponsibility;\n      }\n\n      public HandleCppPtr(IntPtr cppPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n      {\n        CppPtr = cppPtr;\n        DeleteResponsibility = deleteResponsibility;\n      }\n\n      ~HandleCppPtr()\n      {\n        if (DeleteResponsibility == DeleteResponsibility.True)\n        {\n          DeleteCppPtr();\n        }\n      }\n\n      // Properties\n\n      public DeleteResponsibility DeleteResponsibility { get; set; }\n\n      public IntPtr CppPtr\n      {\n        get { return handle.Handle; }\n        set { handle = new HandleRef(this, value); }\n      }\n\n      // Variables\n\n      HandleRef handle;\n\n      // Methods\n\n      protected abstract void DeleteCppPtr();\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/HandleCppPtr.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 73ee605a10ec8294283381049ef23538\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorDouble.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorDouble : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorDouble_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorDouble_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_std_vectorDouble_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe double* au_std_vectorDouble_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorDouble_push_back(IntPtr vector, double value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorDouble_reserve(IntPtr vector, uint new_cap, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorDouble_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorDouble() : base(au_std_vectorDouble_new())\n      {\n      }\n\n      public VectorDouble(IntPtr vectorDoublePtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorDoublePtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorDouble_delete(CppPtr);\n      }\n\n      // Methods\n\n      public double At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        double element = au_std_vectorDouble_at(CppPtr, pos, exception.CppPtr);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe double[] Data()\n      {\n        double* dataPtr = au_std_vectorDouble_data(CppPtr);\n        uint size = Size();\n\n        double[] data = new double[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = dataPtr[i];\n        }\n\n        return data;\n      }\n\n      public void PushBack(double value)\n      {\n        au_std_vectorDouble_push_back(CppPtr, value);\n      }\n\n      public void Reserve(uint newCap)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        au_std_vectorDouble_reserve(CppPtr, newCap, exception.CppPtr);\n        exception.Check();\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorDouble_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorDouble.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 176d1893582b60e4584cdd13bb187474\r\ntimeCreated: 1490986450\r\nlicenseType: Free\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorInt.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorInt : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorInt_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorInt_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern int au_std_vectorInt_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe int* au_std_vectorInt_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorInt_push_back(IntPtr vector, int value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorInt_reserve(IntPtr vector, uint new_cap, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorInt_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorInt() : base(au_std_vectorInt_new())\n      {\n      }\n\n      public VectorInt(IntPtr vectorIntPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorIntPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorInt_delete(CppPtr);\n      }\n\n      // Methods\n\n      public int At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        int element = au_std_vectorInt_at(CppPtr, pos, exception.CppPtr);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe int[] Data()\n      {\n        int* dataPtr = au_std_vectorInt_data(CppPtr);\n        uint size = Size();\n\n        int[] data = new int[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = dataPtr[i];\n        }\n\n        return data;\n      }\n\n      public void PushBack(int value)\n      {\n        au_std_vectorInt_push_back(CppPtr, value);\n      }\n\n      public void Reserve(uint newCap)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        au_std_vectorInt_reserve(CppPtr, newCap, exception.CppPtr);\n        exception.Check();\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorInt_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorInt.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: f13417444cd376b41a7af347fbfaad74\r\ntimeCreated: 1475528492\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorMat.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorMat : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorMat_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorMat_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorMat_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe IntPtr* au_std_vectorMat_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorMat_push_back(IntPtr vector, IntPtr value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorMat_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorMat() : base(au_std_vectorMat_new())\n      {\n      }\n\n      public VectorMat(IntPtr vectorMatPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorMatPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorMat_delete(CppPtr);\n      }\n\n      // Methods\n\n      public Cv.Mat At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        Cv.Mat element = new Cv.Mat(au_std_vectorMat_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe Cv.Mat[] Data()\n      {\n        IntPtr* dataPtr = au_std_vectorMat_data(CppPtr);\n        uint size = Size();\n\n        Cv.Mat[] data = new Cv.Mat[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = new Cv.Mat(dataPtr[i], DeleteResponsibility.False);\n        }\n\n        return data;\n      }\n\n      public void PushBack(Cv.Mat value)\n      {\n        au_std_vectorMat_push_back(CppPtr, value.CppPtr);\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorMat_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorMat.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 693fa64560a3b6b42a4dd030b052c482\r\ntimeCreated: 1476240973\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorPoint2f.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorPoint2f : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorPoint2f_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorPoint2f_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorPoint2f_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe IntPtr* au_std_vectorPoint2f_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorPoint2f_push_back(IntPtr vector, IntPtr value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorPoint2f_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorPoint2f() : base(au_std_vectorPoint2f_new())\n      {\n      }\n\n      public VectorPoint2f(IntPtr vectorPoint2fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorPoint2fPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorPoint2f_delete(CppPtr);\n      }\n\n      // Methods\n\n      public Cv.Point2f At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        Cv.Point2f element = new Cv.Point2f(au_std_vectorPoint2f_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe Cv.Point2f[] Data()\n      {\n        IntPtr* dataPtr = au_std_vectorPoint2f_data(CppPtr);\n        uint size = Size();\n\n        Cv.Point2f[] data = new Cv.Point2f[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = new Cv.Point2f(dataPtr[i], DeleteResponsibility.False);\n        }\n\n        return data;\n      }\n\n      public void PushBack(Cv.Point2f value)\n      {\n        au_std_vectorPoint2f_push_back(CppPtr, value.CppPtr);\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorPoint2f_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorPoint2f.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 3f0d1b8cc426b8f438aaf3e27911fb30\r\ntimeCreated: 1476292879\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorPoint3f.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorPoint3f : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorPoint3f_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorPoint3f_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorPoint3f_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe IntPtr* au_std_vectorPoint3f_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorPoint3f_push_back(IntPtr vector, IntPtr value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorPoint3f_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorPoint3f() : base(au_std_vectorPoint3f_new())\n      {\n      }\n\n      public VectorPoint3f(IntPtr vectorPoint3fPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorPoint3fPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorPoint3f_delete(CppPtr);\n      }\n\n      // Methods\n\n      public Cv.Point3f At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        Cv.Point3f element = new Cv.Point3f(au_std_vectorPoint3f_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe Cv.Point3f[] Data()\n      {\n        IntPtr* dataPtr = au_std_vectorPoint3f_data(CppPtr);\n        uint size = Size();\n\n        Cv.Point3f[] data = new Cv.Point3f[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = new Cv.Point3f(dataPtr[i], DeleteResponsibility.False);\n        }\n\n        return data;\n      }\n\n      public void PushBack(Cv.Point3f value)\n      {\n        au_std_vectorPoint3f_push_back(CppPtr, value.CppPtr);\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorPoint3f_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorPoint3f.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 65cc52ffe2abee54f87f94ddf569fac5\r\ntimeCreated: 1476293081\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVec3d.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorVec3d : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVec3d_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVec3d_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVec3d_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe IntPtr* au_std_vectorVec3d_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVec3d_push_back(IntPtr vector, IntPtr value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorVec3d_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorVec3d() : base(au_std_vectorVec3d_new())\n      {\n      }\n\n      public VectorVec3d(IntPtr vectorVec3dPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorVec3dPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorVec3d_delete(CppPtr);\n      }\n\n      // Methods\n\n      public Cv.Vec3d At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        Cv.Vec3d element = new Cv.Vec3d(au_std_vectorVec3d_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe Cv.Vec3d[] Data()\n      {\n        IntPtr* dataPtr = au_std_vectorVec3d_data(CppPtr);\n        uint size = Size();\n\n        Cv.Vec3d[] data = new Cv.Vec3d[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = new Cv.Vec3d(dataPtr[i], DeleteResponsibility.False);\n        }\n\n        return data;\n      }\n\n      public void PushBack(Cv.Vec3d value)\n      {\n        au_std_vectorVec3d_push_back(CppPtr, value.CppPtr);\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorVec3d_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVec3d.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 6789dfec4047b3a4a85f238c58d3a1d6\r\ntimeCreated: 1477513240\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVec4i.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorVec4i : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVec4i_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVec4i_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVec4i_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe IntPtr* au_std_vectorVec4i_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVec4i_push_back(IntPtr vector, IntPtr value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorVec4i_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorVec4i() : base(au_std_vectorVec4i_new())\n      {\n      }\n\n      public VectorVec4i(IntPtr vectorVec4iPtr, DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorVec4iPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorVec4i_delete(CppPtr);\n      }\n\n      // Methods\n\n      public Cv.Vec4i At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        Cv.Vec4i element = new Cv.Vec4i(au_std_vectorVec4i_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe Cv.Vec4i[] Data()\n      {\n        IntPtr* dataPtr = au_std_vectorVec4i_data(CppPtr);\n        uint size = Size();\n\n        Cv.Vec4i[] data = new Cv.Vec4i[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = new Cv.Vec4i(dataPtr[i], DeleteResponsibility.False);\n        }\n\n        return data;\n      }\n\n      public void PushBack(Cv.Vec4i value)\n      {\n        au_std_vectorVec4i_push_back(CppPtr, value.CppPtr);\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorVec4i_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVec4i.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 1e8a0d903b54ab4449dd5aad0fc76aae\r\ntimeCreated: 1476735900\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorInt.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorVectorInt : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVectorInt_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVectorInt_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVectorInt_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe IntPtr* au_std_vectorVectorInt_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVectorInt_push_back(IntPtr vector, IntPtr value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorVectorInt_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorVectorInt() : base(au_std_vectorVectorInt_new())\n      {\n      }\n\n      public VectorVectorInt(IntPtr vectorVectorIntPtr,\n        DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorVectorIntPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorVectorInt_delete(CppPtr);\n      }\n\n      // Methods\n\n      public VectorInt At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        VectorInt element = new VectorInt(au_std_vectorVectorInt_at(CppPtr, pos, exception.CppPtr), DeleteResponsibility.False);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe VectorInt[] Data()\n      {\n        IntPtr* dataPtr = au_std_vectorVectorInt_data(CppPtr);\n        uint size = Size();\n\n        VectorInt[] data = new VectorInt[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = new VectorInt(dataPtr[i], DeleteResponsibility.False);\n        }\n\n        return data;\n      }\n\n      public void PushBack(VectorInt value)\n      {\n        au_std_vectorVectorInt_push_back(CppPtr, value.CppPtr);\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorVectorInt_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorInt.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: df24ba53523991b4bb93f61bff66f910\r\ntimeCreated: 1476293081\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorPoint2f.cs",
    "content": "﻿using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorVectorPoint2f : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVectorPoint2f_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVectorPoint2f_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVectorPoint2f_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe IntPtr* au_std_vectorVectorPoint2f_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVectorPoint2f_push_back(IntPtr vector, IntPtr value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorVectorPoint2f_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorVectorPoint2f() : base(au_std_vectorVectorPoint2f_new())\n      {\n      }\n\n      public VectorVectorPoint2f(IntPtr vectorVectorPoint2fPtr,\n        DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorVectorPoint2fPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorVectorPoint2f_delete(CppPtr);\n      }\n\n      // Methods\n\n      public VectorPoint2f At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        VectorPoint2f element = new VectorPoint2f(au_std_vectorVectorPoint2f_at(CppPtr, pos, exception.CppPtr),\n          DeleteResponsibility.False);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe VectorPoint2f[] Data()\n      {\n        IntPtr* dataPtr = au_std_vectorVectorPoint2f_data(CppPtr);\n        uint size = Size();\n\n        VectorPoint2f[] data = new VectorPoint2f[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = new VectorPoint2f(dataPtr[i], DeleteResponsibility.False);\n        }\n\n        return data;\n      }\n\n      public void PushBack(VectorPoint2f value)\n      {\n        au_std_vectorVectorPoint2f_push_back(CppPtr, value.CppPtr);\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorVectorPoint2f_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorPoint2f.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 372877bd69903b245a1722cba9bb96d8\r\ntimeCreated: 1475695635\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorPoint3f.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorVectorPoint3f : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVectorPoint3f_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVectorPoint3f_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVectorPoint3f_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe IntPtr* au_std_vectorVectorPoint3f_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVectorPoint3f_push_back(IntPtr vector, IntPtr value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorVectorPoint3f_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorVectorPoint3f() : base(au_std_vectorVectorPoint3f_new())\n      {\n      }\n\n      public VectorVectorPoint3f(IntPtr vectorVectorPoint3fPtr,\n        DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorVectorPoint3fPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorVectorPoint3f_delete(CppPtr);\n      }\n\n      // Methods\n\n      public VectorPoint3f At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        VectorPoint3f element = new VectorPoint3f(au_std_vectorVectorPoint3f_at(CppPtr, pos, exception.CppPtr),\n          DeleteResponsibility.False);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe VectorPoint3f[] Data()\n      {\n        IntPtr* dataPtr = au_std_vectorVectorPoint3f_data(CppPtr);\n        uint size = Size();\n\n        VectorPoint3f[] data = new VectorPoint3f[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = new VectorPoint3f(dataPtr[i], DeleteResponsibility.False);\n        }\n\n        return data;\n      }\n\n      public void PushBack(VectorPoint3f value)\n      {\n        au_std_vectorVectorPoint3f_push_back(CppPtr, value.CppPtr);\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorVectorPoint3f_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorPoint3f.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 0fa452cfe16fdd9448253f0e925d523d\r\ntimeCreated: 1476143477\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorVectorPoint2f.cs",
    "content": "using System;\nusing System.Runtime.InteropServices;\n\nnamespace ArucoUnity.Plugin\n{\n  public static partial class Std\n  {\n    public class VectorVectorVectorPoint2f : HandleCppPtr\n    {\n      // Native functions\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVectorVectorPoint2f_new();\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVectorVectorPoint2f_delete(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern IntPtr au_std_vectorVectorVectorPoint2f_at(IntPtr vector, uint pos, IntPtr exception);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern unsafe IntPtr* au_std_vectorVectorVectorPoint2f_data(IntPtr vector);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern void au_std_vectorVectorVectorPoint2f_push_back(IntPtr vector, IntPtr value);\n\n      [DllImport(\"ArucoUnityPlugin\")]\n      static extern uint au_std_vectorVectorVectorPoint2f_size(IntPtr vector);\n\n      // Constructors & destructor\n\n      public VectorVectorVectorPoint2f() : base(au_std_vectorVectorVectorPoint2f_new())\n      {\n      }\n\n      public VectorVectorVectorPoint2f(IntPtr vectorVectorVectorPoint2fPtr,\n        DeleteResponsibility deleteResponsibility = DeleteResponsibility.True)\n        : base(vectorVectorVectorPoint2fPtr, deleteResponsibility)\n      {\n      }\n\n      protected override void DeleteCppPtr()\n      {\n        au_std_vectorVectorVectorPoint2f_delete(CppPtr);\n      }\n\n      // Methods\n\n      public VectorVectorPoint2f At(uint pos)\n      {\n        Cv.Exception exception = new Cv.Exception();\n        VectorVectorPoint2f element = new VectorVectorPoint2f(au_std_vectorVectorVectorPoint2f_at(CppPtr, pos, exception.CppPtr),\n          DeleteResponsibility.False);\n        exception.Check();\n        return element;\n      }\n\n      public unsafe VectorVectorPoint2f[] Data()\n      {\n        IntPtr* dataPtr = au_std_vectorVectorVectorPoint2f_data(CppPtr);\n        uint size = Size();\n\n        VectorVectorPoint2f[] data = new VectorVectorPoint2f[size];\n        for (int i = 0; i < size; i++)\n        {\n          data[i] = new VectorVectorPoint2f(dataPtr[i], DeleteResponsibility.False);\n        }\n\n        return data;\n      }\n\n      public void PushBack(VectorVectorPoint2f value)\n      {\n        au_std_vectorVectorVectorPoint2f_push_back(CppPtr, value.CppPtr);\n      }\n\n      public uint Size()\n      {\n        return au_std_vectorVectorVectorPoint2f_size(CppPtr);\n      }\n    }\n  }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std/VectorVectorVectorPoint2f.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 43e1f4673e5d2cc48a18fdfdceb51bfc\r\ntimeCreated: 1476294936\r\nlicenseType: Pro\r\nMonoImporter:\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins/Std.meta",
    "content": "fileFormatVersion: 2\r\nguid: c2b80e746fc70a041ba131978ea2137b\r\nfolderAsset: yes\r\ntimeCreated: 1484338987\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Plugins.meta",
    "content": "fileFormatVersion: 2\r\nguid: eaa29c1eae8e26c429c8fa321ad18c37\r\nfolderAsset: yes\r\ntimeCreated: 1473370524\r\nlicenseType: Pro\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Utilities/ArucoCameraSeparateThread.cs",
    "content": "﻿using ArucoUnity.Cameras;\nusing ArucoUnity.Plugin;\nusing System;\nusing System.Threading;\n\nnamespace ArucoUnity.Utilities\n{\n    public class ArucoCameraSeparateThread\n    {\n        private const int BuffersCount = 3;\n\n        public ArucoCameraSeparateThread(IArucoCamera arucoCamera, Action<Cv.Mat[]> threadWork)\n        {\n            this.arucoCamera = arucoCamera;\n            this.threadWork = threadWork;\n            CopyBackImages = false;\n\n            for (int bufferId = 0; bufferId < BuffersCount; bufferId++)\n            {\n                imageBuffers[bufferId] = new Cv.Mat[arucoCamera.CameraNumber];\n                imageDataBuffers[bufferId] = new byte[arucoCamera.CameraNumber][];\n\n                for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)\n                {\n                    imageBuffers[bufferId][cameraId] = new Cv.Mat(arucoCamera.Textures[cameraId].height, arucoCamera.Textures[cameraId].width,\n                      CvMatExtensions.ImageType(arucoCamera.Textures[cameraId].format));\n\n                    imageDataBuffers[bufferId][cameraId] = new byte[arucoCamera.ImageDataSizes[cameraId]];\n                    imageBuffers[bufferId][cameraId].DataByte = imageDataBuffers[bufferId][cameraId];\n                }\n            }\n        }\n\n        public bool CopyBackImages { get; set; }\n        public bool IsStarted { get; protected set; }\n        public bool ImagesUpdated { get; protected set; }\n\n        protected IArucoCamera arucoCamera;\n        protected Action<Cv.Mat[]> threadWork;\n\n        protected uint currentBuffer = 0;\n        protected Cv.Mat[][] imageBuffers = new Cv.Mat[BuffersCount][];\n        protected byte[][][] imageDataBuffers = new byte[BuffersCount][][];\n\n        protected Thread thread;\n        protected Mutex mutex = new Mutex();\n        protected Exception threadException, exception;\n        protected bool threadUpdated, imagesUpdated;\n\n        public void Start()\n        {\n            IsStarted = true;\n            ImagesUpdated = false;\n\n            thread = new Thread(() =>\n            {\n                try\n                {\n                    while (IsStarted)\n                    {\n                        mutex.WaitOne();\n                        {\n                            imagesUpdated = ImagesUpdated;\n                        }\n                        mutex.ReleaseMutex();\n\n                        if (imagesUpdated)\n                        {\n                            threadWork(imageBuffers[currentBuffer]);\n\n                            mutex.WaitOne();\n                            {\n                                currentBuffer = NextBuffer();\n                                ImagesUpdated = false;\n                            }\n                            mutex.ReleaseMutex();\n                        }\n                    }\n                }\n                catch (Exception e)\n                {\n                    threadException = e;\n                    mutex.ReleaseMutex();\n                }\n            });\n            thread.Start();\n        }\n\n        public void Stop()\n        {\n            IsStarted = false;\n        }\n\n        /// <summary>\n        /// Swaps the images with the copy used by the thread, and re-throw the thread exceptions.\n        /// </summary>\n        public void Update(byte[][] cameraImageDatas)\n        {\n            if (IsStarted)\n            {\n                mutex.WaitOne();\n                {\n                    exception = threadException;\n                    threadUpdated = !ImagesUpdated;\n                }\n                mutex.ReleaseMutex();\n\n                if (exception != null)\n                {\n                    Stop();\n                    throw exception;\n                }\n                else\n                {\n                    if (threadUpdated)\n                    {\n                        for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)\n                        {\n                            Array.Copy(cameraImageDatas[cameraId], imageDataBuffers[NextBuffer()][cameraId], arucoCamera.ImageDataSizes[cameraId]);\n                        }\n                    }\n\n                    if (CopyBackImages)\n                    {\n                        for (int cameraId = 0; cameraId < arucoCamera.CameraNumber; cameraId++)\n                        {\n                            Array.Copy(imageDataBuffers[PreviousBuffer()][cameraId], cameraImageDatas[cameraId], arucoCamera.ImageDataSizes[cameraId]);\n                        }\n                    }\n\n                    if (threadUpdated)\n                    {\n                        mutex.WaitOne();\n                        {\n                            ImagesUpdated = true;\n                        }\n                        mutex.ReleaseMutex();\n                    }\n                }\n            }\n        }\n\n        /// <summary>\n        /// Returns the index of the next buffer.\n        /// </summary>\n        protected uint NextBuffer()\n        {\n            return (currentBuffer + 1) % BuffersCount;\n        }\n\n        /// <summary>\n        /// Returns the index of the previous buffer.\n        /// </summary>\n        protected uint PreviousBuffer()\n        {\n            return (currentBuffer + BuffersCount - 1) % BuffersCount;\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Utilities/ArucoCameraSeparateThread.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 8aea764e75f515b4fb34deb755945159\r\ntimeCreated: 1519160857\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Utilities/CvMatExtensions.cs",
    "content": "﻿using ArucoUnity.Plugin;\nusing System;\nusing UnityEngine;\n\nnamespace ArucoUnity.Utilities\n{\n    /// <summary>\n    /// Extensions methods for <see cref=\"ArucoUnity.Plugin.Cv\"/>.\n    /// </summary>\n    public static class CvMatExtensions\n    {\n        /// <summary>\n        /// Gets the camera focal lengths in a camera matrix, expressed in pixels units. Equals to\n        /// <c>F = (AtDouble(0, 0), AtDouble(1, 1))</c>\n        /// </summary>\n        public static Vector2 GetCameraFocalLengths(this Cv.Mat mat)\n        {\n            return new Vector2((float)mat.AtDouble(0, 0), (float)mat.AtDouble(1, 1));\n        }\n\n        /// <summary>\n        /// Gets the camera principal point in a camera matrix, expressed in pixels units. Equals to\n        /// <c>C = (AtDouble(0, 2), AtDouble(1, 2))</c>\n        /// </summary>\n        public static Vector2 GetCameraPrincipalPoint(this Cv.Mat mat)\n        {\n            return new Vector2((float)mat.AtDouble(0, 2), (float)mat.AtDouble(1, 2));\n        }\n\n        /// <summary>\n        /// Returns the OpenCV type equivalent to a texture format.\n        /// </summary>\n        /// <param name=\"textureFormat\">The Unity texture format.</param>\n        /// <returns>The equivalent OpenCV type.</returns>\n        public static Cv.Type ImageType(TextureFormat textureFormat)\n        {\n            Cv.Type type;\n            switch (textureFormat)\n            {\n                case TextureFormat.RGB24:\n                    type = Cv.Type.CV_8UC3;\n                    break;\n                case TextureFormat.BGRA32:\n                case TextureFormat.ARGB32:\n                case TextureFormat.RGBA32:\n                    type = Cv.Type.CV_8UC4;\n                    break;\n                default:\n                    throw new ArgumentException(\"This type of texture is actually not supported: \" + textureFormat\n                        + \".\", \"textureFormat\");\n            }\n            return type;\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Utilities/CvMatExtensions.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 4c26a32bb6d84c24f98629918b51e169\r\ntimeCreated: 1510447995\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Utilities/WebcamController.cs",
    "content": "﻿using System;\nusing System.Collections;\nusing System.Collections.Generic;\nusing UnityEngine;\n\nnamespace ArucoUnity.Utilities\n{\n    /// <summary>\n    /// Get images from multiple webcams.\n    /// </summary>\n    /// <remarks>\n    /// Based on: http://answers.unity3d.com/answers/1155328/view.html\n    /// </remarks>\n    public class WebcamController : MonoBehaviour\n    {\n        /// <summary>\n        /// Called when the webcams started.\n        /// </summary>\n        public event Action<WebcamController> Started = delegate { };\n\n        /// <summary>\n        /// Gets the ids of the webcams to use.\n        /// </summary>\n        public List<int> Ids { get; private set; }\n\n        /// <summary>\n        /// Gets the used webcams.\n        /// </summary>\n        public List<WebCamDevice> Devices { get; private set; }\n\n        /// <summary>\n        /// Gets the textures of the used webcams.\n        /// </summary>\n        public List<WebCamTexture> Textures { get; private set; }\n\n        /// <summary>\n        /// Gets <see cref=\"Textures\"/> converted in Texture2D.\n        /// </summary>\n        public List<Texture2D> Textures2D\n        {\n            get\n            {\n                for (int cameraId = 0; cameraId < Textures.Count; cameraId++)\n                {\n                    textures2D[cameraId].SetPixels32(Textures[cameraId].GetPixels32());\n                }\n                return textures2D;\n            }\n        }\n\n        /// <summary>\n        /// Gets or sets the format of <see cref=\"Textures2D\"/>, by default <see cref=\"TextureFormat.RGB24\"/>.\n        /// </summary>\n        public TextureFormat Textures2DFormat { get { return textures2DFormat; } set { textures2DFormat = value; } }\n\n        /// <summary>\n        /// Gets if the controller is configured.\n        /// </summary>\n        public bool IsConfigured { get; private set; }\n\n        /// <summary>\n        /// Gets if the webcams started.\n        /// </summary>\n        public bool IsStarted { get; private set; }\n\n        protected bool starting = false;\n        private List<Texture2D> textures2D = new List<Texture2D>();\n        private TextureFormat textures2DFormat = TextureFormat.RGB24;\n\n        /// <summary>\n        /// Initializes the properties.\n        /// </summary>\n        protected void Awake()\n        {\n            IsStarted = false;\n            IsConfigured = false;\n\n            Ids = new List<int>();\n            Devices = new List<WebCamDevice>();\n            Textures = new List<WebCamTexture>();\n        }\n\n        /// <summary>\n        /// Configures <see cref=\"Devices\"/> and <see cref=\"Textures\"/> from <see cref=\"Ids\"/>.\n        /// </summary>\n        public void Configure()\n        {\n            IsStarted = false;\n            IsConfigured = true;\n\n            Devices.Clear();\n            Textures.Clear();\n            Textures2D.Clear();\n\n            foreach (int webcamId in Ids)\n            {\n                var webcamDevice = WebCamTexture.devices[webcamId];\n                Devices.Add(webcamDevice);\n                Textures.Add(new WebCamTexture(webcamDevice.name));\n            }\n        }\n\n        /// <summary>\n        /// Starts the webcams.\n        /// </summary>\n        public void StartWebcams()\n        {\n            if (!IsConfigured || starting || IsStarted)\n            {\n                throw new Exception(\"Configure the controller, wait the webcams to start or stop the controller.\");\n            }\n            StartCoroutine(StartingAsync());\n        }\n\n        /// <summary>\n        /// Stops the webcams.\n        /// </summary>\n        public void StopWebcams()\n        {\n            if (!IsConfigured || !IsStarted)\n            {\n                throw new Exception(\"Configure the controller and start the controller.\");\n            }\n\n            IsStarted = false;\n            if (starting)\n            {\n                StopCoroutine(StartingAsync());\n            }\n\n            foreach (var webcam in Textures)\n            {\n                webcam.Stop();\n            }\n        }\n\n        /// <summary>\n        /// Waits for Unity to start the webcams to set <see cref=\"Textures2D\"/>, <see cref=\"Textures\"/> and call\n        /// <see cref=\"ConfigurableController.OnStarted\"/>.\n        /// </summary>\n        protected IEnumerator StartingAsync()\n        {\n            starting = true;\n            foreach (var webcam in Textures)\n            {\n                webcam.Play();\n            }\n\n            bool webcamsStarted;\n            do\n            {\n                webcamsStarted = true;\n                foreach (var texture in Textures)\n                {\n                    webcamsStarted &= texture.width > 100;\n                }\n\n                if (webcamsStarted)\n                {\n                    foreach (var webcam in Textures)\n                    {\n                        textures2D.Add(new Texture2D(webcam.width, webcam.height, Textures2DFormat, false));\n                    }\n\n                    starting = false;\n                    IsStarted = true;\n                    Started(this);\n                }\n                else\n                {\n                    yield return null;\n                }\n            }\n            while (!webcamsStarted);\n\n            starting = false;\n        }\n    }\n}"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Utilities/WebcamController.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: 1e86a6b70d7e2154a8a0f84a2ad36f6e\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts/Utilities.meta",
    "content": "fileFormatVersion: 2\r\nguid: d5a529f4a417c344dab6474f95677a06\r\nfolderAsset: yes\r\ntimeCreated: 1493224889\r\nlicenseType: Pro\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Scripts.meta",
    "content": "fileFormatVersion: 2\r\nguid: 143c4d0c3aeb1c747a58682ae6469252\r\nfolderAsset: yes\r\ntimeCreated: 1472228400\r\nlicenseType: Pro\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Textures/BlackPixel.png.meta",
    "content": "fileFormatVersion: 2\r\nguid: d263dba086ea0a8469cbf24719fc7002\r\ntimeCreated: 1511562096\r\nlicenseType: Free\r\nTextureImporter:\r\n  fileIDToRecycleName: {}\r\n  externalObjects: {}\r\n  serializedVersion: 4\r\n  mipmaps:\r\n    mipMapMode: 0\r\n    enableMipMap: 1\r\n    sRGBTexture: 1\r\n    linearTexture: 0\r\n    fadeOut: 0\r\n    borderMipMap: 0\r\n    mipMapsPreserveCoverage: 0\r\n    alphaTestReferenceValue: 0.5\r\n    mipMapFadeDistanceStart: 1\r\n    mipMapFadeDistanceEnd: 3\r\n  bumpmap:\r\n    convertToNormalMap: 0\r\n    externalNormalMap: 0\r\n    heightScale: 0.25\r\n    normalMapFilter: 0\r\n  isReadable: 0\r\n  grayScaleToAlpha: 0\r\n  generateCubemap: 6\r\n  cubemapConvolution: 0\r\n  seamlessCubemap: 0\r\n  textureFormat: 1\r\n  maxTextureSize: 2048\r\n  textureSettings:\r\n    serializedVersion: 2\r\n    filterMode: -1\r\n    aniso: -1\r\n    mipBias: -1\r\n    wrapU: -1\r\n    wrapV: -1\r\n    wrapW: -1\r\n  nPOTScale: 1\r\n  lightmap: 0\r\n  compressionQuality: 50\r\n  spriteMode: 0\r\n  spriteExtrude: 1\r\n  spriteMeshType: 1\r\n  alignment: 0\r\n  spritePivot: {x: 0.5, y: 0.5}\r\n  spriteBorder: {x: 0, y: 0, z: 0, w: 0}\r\n  spritePixelsToUnits: 100\r\n  alphaUsage: 1\r\n  alphaIsTransparency: 0\r\n  spriteTessellationDetail: -1\r\n  textureType: 0\r\n  textureShape: 1\r\n  maxTextureSizeSet: 0\r\n  compressionQualitySet: 0\r\n  textureFormatSet: 0\r\n  platformSettings:\r\n  - buildTarget: DefaultTexturePlatform\r\n    maxTextureSize: 2048\r\n    resizeAlgorithm: 0\r\n    textureFormat: -1\r\n    textureCompression: 1\r\n    compressionQuality: 50\r\n    crunchedCompression: 0\r\n    allowsAlphaSplitting: 0\r\n    overridden: 0\r\n  spriteSheet:\r\n    serializedVersion: 2\r\n    sprites: []\r\n    outline: []\r\n    physicsShape: []\r\n  spritePackingTag: \r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity/Textures.meta",
    "content": "fileFormatVersion: 2\r\nguid: 74b907760cd1c1c4eaf2333a3c020299\r\nfolderAsset: yes\r\ntimeCreated: 1511562096\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/ArucoUnity.meta",
    "content": "fileFormatVersion: 2\r\nguid: c17fe530e0452fa4689710a3f611192a\r\nfolderAsset: yes\r\ntimeCreated: 1472228400\r\nlicenseType: Pro\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/Editor/ExportArucoUnityPackage.cs",
    "content": "﻿using UnityEditor;\n\n/// <summary>\n/// Exports ArucoUnity as a Unity package.\n/// </summary>\npublic static class ExportArucoUnityPackage\n{\n    /// <summary>\n    /// Returns the assets list of ArucoUnity.\n    /// </summary>\n    private static string[] assets = new string[]\n    {\n        \"Assets/ArucoUnity\",\n        \"Assets/StreamingAssets/ArucoUnity\",\n        \"Assets/csc.rsp\",\n        \"Assets/gmcs.rsp\",\n        \"Assets/mcs.rsp\",\n        \"Assets/smcs.rsp\",\n        \"ProjectSettings/TagManager.asset\",\n    };\n\n    /// <summary>\n    /// Exports the ArucoUnity package.\n    /// </summary>\n    [MenuItem(\"ArucoUnity/Export package\")]\n    public static void ExportPackage()\n    {\n        AssetDatabase.ExportPackage(assets, \"ArucoUnity.unitypackage\", ExportPackageOptions.Interactive | ExportPackageOptions.Recurse);\n    }\n}\n"
  },
  {
    "path": "Assets/Editor/ExportArucoUnityPackage.cs.meta",
    "content": "fileFormatVersion: 2\r\nguid: a957c6e5b67f18b4a8fe5a9e20885365\r\ntimeCreated: 1512419036\r\nlicenseType: Free\r\nMonoImporter:\r\n  externalObjects: {}\r\n  serializedVersion: 2\r\n  defaultReferences: []\r\n  executionOrder: 0\r\n  icon: {instanceID: 0}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/Editor.meta",
    "content": "fileFormatVersion: 2\r\nguid: e9926be021d99d34cbe11679f99a6aba\r\nfolderAsset: yes\r\ntimeCreated: 1512418971\r\nlicenseType: Free\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/StreamingAssets/ArucoUnity/ArucoWebcamExample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ArucoCameraParameters xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <CalibrationDateTime>2018-04-27T10:33:51.8533927+02:00</CalibrationDateTime>\n  <CameraNumber>1</CameraNumber>\n  <ImageHeights>\n    <int>480</int>\n  </ImageHeights>\n  <ImageWidths>\n    <int>640</int>\n  </ImageWidths>\n  <CalibrationFlagsValue>256</CalibrationFlagsValue>\n  <FixAspectRatioValue>0</FixAspectRatioValue>\n  <ReprojectionErrors>\n    <double>0.23313121492458597</double>\n  </ReprojectionErrors>\n  <CameraMatricesType>CV_64F</CameraMatricesType>\n  <CameraMatricesValues>\n    <ArrayOfArrayOfDouble>\n      <ArrayOfDouble>\n        <double>813.27384399463506</double>\n        <double>0</double>\n        <double>320.71681236471477</double>\n      </ArrayOfDouble>\n      <ArrayOfDouble>\n        <double>0</double>\n        <double>813.56026498007554</double>\n        <double>246.80160109579035</double>\n      </ArrayOfDouble>\n      <ArrayOfDouble>\n        <double>0</double>\n        <double>0</double>\n        <double>1</double>\n      </ArrayOfDouble>\n    </ArrayOfArrayOfDouble>\n  </CameraMatricesValues>\n  <DistCoeffsType>CV_64F</DistCoeffsType>\n  <DistCoeffsValues>\n    <ArrayOfArrayOfDouble>\n      <ArrayOfDouble>\n        <double>0.0</double>\n        <double>0.0</double>\n        <double>0.0</double>\n        <double>0.0</double>\n        <double>0.0</double>\n      </ArrayOfDouble>\n    </ArrayOfArrayOfDouble>\n  </DistCoeffsValues>\n  <OmnidirXisType>CV_8UC1</OmnidirXisType>\n  <OmnidirXisValues>\n    <ArrayOfArrayOfDouble />\n  </OmnidirXisValues>\n</ArucoCameraParameters>"
  },
  {
    "path": "Assets/StreamingAssets/ArucoUnity/ArucoWebcamExample.xml.meta",
    "content": "fileFormatVersion: 2\r\nguid: 5733b62ed38c1534db868a3b4835d4de\r\nTextScriptImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/StreamingAssets/ArucoUnity/StereoArucoWebcamExample.xml",
    "content": "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ArucoCameraParameters xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n  <CalibrationDateTime>2018-05-07T15:08:23.2461442+02:00</CalibrationDateTime>\n  <CameraNumber>2</CameraNumber>\n  <ImageHeights>\n    <int>480</int>\n    <int>480</int>\n  </ImageHeights>\n  <ImageWidths>\n    <int>640</int>\n    <int>640</int>\n  </ImageWidths>\n  <CalibrationFlagsValue>256</CalibrationFlagsValue>\n  <FixAspectRatioValue>0</FixAspectRatioValue>\n  <ReprojectionErrors>\n    <double>0.28655114000475146</double>\n    <double>0.26335779362039791</double>\n  </ReprojectionErrors>\n  <CameraMatricesType>CV_64F</CameraMatricesType>\n  <CameraMatricesValues>\n    <ArrayOfArrayOfDouble>\n      <ArrayOfDouble>\n        <double>815.41897256880657</double>\n        <double>0</double>\n        <double>335.13401922989948</double>\n      </ArrayOfDouble>\n      <ArrayOfDouble>\n        <double>0</double>\n        <double>814.40194707322314</double>\n        <double>240.35508275468794</double>\n      </ArrayOfDouble>\n      <ArrayOfDouble>\n        <double>0</double>\n        <double>0</double>\n        <double>1</double>\n      </ArrayOfDouble>\n    </ArrayOfArrayOfDouble>\n    <ArrayOfArrayOfDouble>\n      <ArrayOfDouble>\n        <double>813.89123355616232</double>\n        <double>0</double>\n        <double>344.00053550713574</double>\n      </ArrayOfDouble>\n      <ArrayOfDouble>\n        <double>0</double>\n        <double>814.893020911039</double>\n        <double>224.63391155251512</double>\n      </ArrayOfDouble>\n      <ArrayOfDouble>\n        <double>0</double>\n        <double>0</double>\n        <double>1</double>\n      </ArrayOfDouble>\n    </ArrayOfArrayOfDouble>\n  </CameraMatricesValues>\n  <DistCoeffsType>CV_64F</DistCoeffsType>\n  <DistCoeffsValues>\n    <ArrayOfArrayOfDouble>\n      <ArrayOfDouble>\n        <double>0.0074405166348916266</double>\n        <double>0.30509218899253232</double>\n        <double>-0.0021811911481404438</double>\n        <double>0.01225694113001902</double>\n        <double>0.063293334888655683</double>\n      </ArrayOfDouble>\n    </ArrayOfArrayOfDouble>\n    <ArrayOfArrayOfDouble>\n      <ArrayOfDouble>\n        <double>0.17986394785112808</double>\n        <double>-3.0873083180701881</double>\n        <double>0.0014571948911823332</double>\n        <double>0.003200623852790616</double>\n        <double>14.588793135132526</double>\n      </ArrayOfDouble>\n    </ArrayOfArrayOfDouble>\n  </DistCoeffsValues>\n  <OmnidirXisType>CV_8UC1</OmnidirXisType>\n  <OmnidirXisValues>\n    <ArrayOfArrayOfDouble />\n    <ArrayOfArrayOfDouble />\n  </OmnidirXisValues>\n  <StereoCameraParameters>\n    <CalibrationFlagsValue>256</CalibrationFlagsValue>\n    <RotationVectorValues>\n      <double>-0.01292102021299946</double>\n      <double>0.012199954393375801</double>\n      <double>-0.0047738406858097221</double>\n    </RotationVectorValues>\n    <TranslationVectorValues>\n      <double>0.078994959596292144</double>\n      <double>0.000989742418190844</double>\n      <double>0.0021052472302004769</double>\n    </TranslationVectorValues>\n    <ReprojectionError>0.30436502472872112</ReprojectionError>\n  </StereoCameraParameters>\n</ArucoCameraParameters>"
  },
  {
    "path": "Assets/StreamingAssets/ArucoUnity/StereoArucoWebcamExample.xml.meta",
    "content": "fileFormatVersion: 2\r\nguid: fdac39afa7835b04fb98800b708f6ea3\r\nTextScriptImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/StreamingAssets/ArucoUnity.meta",
    "content": "fileFormatVersion: 2\r\nguid: d86d2db90ebc08b4caddedb0afe8f338\r\nfolderAsset: yes\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/StreamingAssets.meta",
    "content": "fileFormatVersion: 2\r\nguid: 056196931b219d049904115019b10780\r\nfolderAsset: yes\r\nDefaultImporter:\r\n  externalObjects: {}\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/csc.rsp",
    "content": "-unsafe"
  },
  {
    "path": "Assets/csc.rsp.meta",
    "content": "fileFormatVersion: 2\r\nguid: 8f1f5139ae17d534fb7a921fba0af5f2\r\ntimeCreated: 1483722456\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/gmcs.rsp",
    "content": "-unsafe"
  },
  {
    "path": "Assets/gmcs.rsp.meta",
    "content": "fileFormatVersion: 2\r\nguid: e097e83b41388494f925a75cc5ce274a\r\ntimeCreated: 1483722456\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/mcs.rsp",
    "content": "-unsafe"
  },
  {
    "path": "Assets/mcs.rsp.meta",
    "content": "fileFormatVersion: 2\r\nguid: 1f3d8f1f1f3ac48468db2fdf7ba15824\r\ntimeCreated: 1483722710\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Assets/smcs.rsp",
    "content": "-unsafe"
  },
  {
    "path": "Assets/smcs.rsp.meta",
    "content": "fileFormatVersion: 2\r\nguid: 1484223de2caeb543a88f0741724116c\r\ntimeCreated: 1483722456\r\nlicenseType: Free\r\nDefaultImporter:\r\n  userData: \r\n  assetBundleName: \r\n  assetBundleVariant: \r\n"
  },
  {
    "path": "Documentation/docfx.json",
    "content": "{\n  \"metadata\": [\n    {\n      \"src\": [\n        {\n          \"src\": \"../\",\n          \"files\": [ \"*.csproj\" ]\n        }\n      ],\n      \"dest\": \"api/\",\n      \"filter\": \"filterConfig.yml\"\n    }\n  ],\n  \"build\": {\n    \"globalMetadata\":\n    {\n      \"_appTitle\": \"Aruco Unity documentation\",\n      \"_appFooter\": \"<a href=\\\"https://github.com/NormandErwan/ArucoUnity\\\">Aruco Unity</a> - <a href=\\\"https://twitter.com/NormandErwan\\\">Erwan Normand</a>\",\n      \"_enableSearch\": true\n    },\n    \"xref\": [ \"xrefmap.yml\" ],\n    \"xrefService\": [ \"https://xref.docs.microsoft.com/query?uid={uid}\" ],\n    \"content\": [\n      {\n        \"src\": \"manual/\",\n        \"dest\": \"manual/\",\n        \"files\": [ \"toc.yml\", \"*.md\" ]\n      },\n      {\n        \"files\": [ \"toc.yml\", \"index.md\", \"api/*.yml\" ]\n      }\n    ],\n    \"resource\": [\n      {\n        \"files\": [ \"images/*\" ]\n      }\n    ],\n    \"dest\": \"../_site\"\n  }\n}"
  },
  {
    "path": "Documentation/filterConfig.yml",
    "content": "apiRules:\n- exclude:\n    uidRegex: ^UnityEngine\\.Behaviour\n    type: Type\n- exclude:\n    uidRegex: ^UnityEngine\\.Component\n    type: Type\n- exclude:\n    uidRegex: ^UnityEngine\\.MonoBehaviour\n    type: Type\n- exclude:\n    uidRegex: ^UnityEngine\\.NetworkBehaviour\n    type: Type\n- exclude:\n    uidRegex: ^UnityEngine\\.Object\n    type: Type\n- exclude:\n    uidRegex: ^UnityEngine\\.ScriptableObject\n    type: Type\n- exclude:\n    uidRegex: ^System\\.Object\n    type: Type"
  },
  {
    "path": "Documentation/manual/aruco-unity-architecture.md",
    "content": "# ArucoUnity Architecture\n\nArucoUnity is made of three parts:\n\n1. A [plugin](https://github.com/NormandErwan/ArucoUnityPlugin/) that wraps into a C interface the aruco, calib3d and ccalib modules of OpenCV.\n2. A C# interface ([ArucoUnity.Plugin namespace](https://github.com/NormandErwan/ArucoUnity/blob/master/Assets/ArucoUnity/Scripts/Plugin/)) using the plugin to reproduce the OpenCV modules classes and functions.\n3. [Unity C# scripts](~/api/ArucoUnity.Calibration.yml) to calibrate cameras and to track markers directly in the editor with good performances.\n\nYou can code directly with the OpenCV C# equivalent interface but we advise you to work with and extend the Unity scripts. The Unity scripts were originally one camera display and tracking script and one calibration script. For performances and to support multiple types of camera (fisheye, stereoscopic) we decoupled these scripts (*Fig.1*).\n\n![Class diagram](http://www.plantuml.com/plantuml/svg/ZLF1Ri8m3BtdAw8U9nLfTmviHTDssWxZ0znYKBRG8CSze8r_NrbGC12FtIhxFVizvtKM6OY7ZJTRw3vXZVQ1XYuiUiSx-vMB2tRUiSCurbpFI2leqBuqeL-vzK3GUXo_cOBtI6PlCh613HASitutf8OWASFizBkkLOues-c8g-uh3Qie-F_UawcvYriFkwZQEWBEz2cZ9LuUxWreR37InPPdY89uGadkeb-wo87OXLuNAL4tb2eaLSmjthLryNeAQIyTlhOVsF716xIH2JgsdOSOKtfJrnHxZm5eQGGiQHMzlEITne_I0yoHHsAWRFWwN4U18dzoPLq7MzrL6jQgyuwIZ49CNigCacuThmT29wYFMYRihtweT6k1pVMqLtGQGk104fot5GUSvwS1xrg2Gx2K32KZ0gTVP39HAFeFyYVhbCLiIK5UAXUz9m_hQ2uBDmQcAysmNmuR_mC0)\n\n*Fig.1: Overview class diagram of the Unity scripts.*"
  },
  {
    "path": "Documentation/manual/build-from-sources.md",
    "content": "# Build From Sources\n\n## Preparation\n\nWe clone two repository: ArucoUnity which contains the Unity project with C# scripts, and [ArucoUnityPlugin](https://github.com/NormandErwan/ArucoUnityPlugin/) which contains the C interface of the OpenCV modules (see [ArucoUnity Architecture](aruco-unity-architecture.md) for details).\n\nRun the following commands:\n\n```bash\ngit clone https://github.com/NormandErwan/ArucoUnity\ngit clone https://github.com/NormandErwan/ArucoUnityPlugin\nmkdir -p ArucoUnityPlugin/build/opencv/\n```\n\n## Build OpenCV\n\nWe need a build of OpenCV (3.3 ⩽ version ⩽ 3.4) with the calib3d module and the aruco and ccalib *contrib* modules. These two contrib modules are not included in the official OpenCV releases.\n\nA CMake project is already configured ready to be build. Run the following commands:\n\n```bash\ncd ArucoUnityPlugin/build/opencv/\ncmake -DCMAKE_INSTALL_PREFIX=install/ -G <generator_name> ../../3rdparty/opencv_contrib/\ncmake --build . --config Release\n```\n\nIf you're not familiar with CMake generators, see this [list of generators](https://cmake.org/cmake/help/latest/manual/cmake-generators.7.html) to set the `<generator_name>` variable above. For example, use use \"Visual Studio 15 2017 Win64\" with Visual Studio 2017 installed.\n\nAlternatively, you can follow the [opencv_contrib instructions](https://github.com/opencv/opencv_contrib).\n\n## Build ArucoUnityPlugin\n\nFirst, make sure Unity is closed during the installation, unless the plugin installation will fail. Configure the building solution of the ArucoUnityPlugin, compile and install it by running the following commands:\n\n```bash\ncd ArucoUnityPlugin/build/\ncmake -DCMAKE_INSTALL_PREFIX=.. -DOpenCV_DIR=build/opencv/install/ -DArucoUnity_DIR=../../ArucoUnity/ -G <generator_name> ..\ncmake --build . --config Release --target INSTALL\n```\n\nThe installation will copy the plugin into the `bin/` and `lib/` folders. It will also copy the plugin and the OpenCV libraries to the `ArucoUnity/Assets/Plugins/<platform>` folder.\n\nOn Linux the correct path to the `-DOpenCV_DIR` option above may be set to `build/opencv/install/share/OpenCV/`.\n\n## Export the ArucoUnity package\n\nOpen the `ArucoUnity/` folder in Unity. No errors should be displayed in the Console panel.\n\nA new entry named \"ArucoUnity\" is in the menu bar. Open it and select \"Export package\".\n\n![Export ArucoUnity package](~/images/export_package.jpg)\n\n## Generate Documentation\n\nInstall the documentation generator [DocFX](http://dotnet.github.io/docfx/tutorial/docfx_getting_started.html).\n\nRun the following commands:\n\n```bash\ncd ArucoUnity\ncp README.md Documentation/index.md\ndocfx Documentation/docfx.json\ndocfx serve _site\n```\n\nOpen the generated website on [http://localhost:8080](http://localhost:8080)."
  },
  {
    "path": "Documentation/manual/calibrate-a-camera.md",
    "content": "# Calibrate a Camera\n\n## Motivation\n\nIn order to be able to track markers you need to calibrate your camera, i.e. measure the camera parameters.\n\nThe calibration process may seems long but it's only because there is lots of customization options. The principle is straightforward: (1) print a calibration board and (2) take images with your camera of the board in different positions and orientations. ArucoUnity will generate XML file containing the camera parameters.\n\nTo understand the algorithms used, read these tutorials: [Calibration with ArUco and ChArUco](https://docs.opencv.org/3.4/da/d13/tutorial_aruco_calibration.html) and [Camera calibration With OpenCV](https://docs.opencv.org/3.4/d4/d94/tutorial_camera_calibration.html).\n\n## Calibrate a camera\n\nMost of the cameras we use today on our smartphones or laptops are called in ArucoUnity pinhole cameras (camera using a [rectilinear lens](https://en.wikipedia.org/wiki/Rectilinear_lens)) in contrast with cameras using a [fisheye lens](https://en.wikipedia.org/wiki/Fisheye_lens). So if you want to calibrate your webcam or smartphone, read this section.\n\n- Make a calibration board.\n  1. Create a charuco board or a grid board. See the [Create Markers](create-markers.md) page for details.\n  2. Print the generated image on paper. Stick it on a hard cardboard: the paper must remains as flat as possible during the calibration (*Fig.1*).\n\n![Calibration board](https://docs.opencv.org/3.4/charucocalibration.png)\n*Fig.1: Different viewpoints of a charuco calibration board. From OpenCV: [https://docs.opencv.org/3.4/da/d13/tutorial_aruco_calibration.html](https://docs.opencv.org/3.4/da/d13/tutorial_aruco_calibration.html)*\n\n- Open the `Assets/ArucoUnity/Scenes/CalibrateCamera.unity` scene.\n- Configure the `ArucoWebcam` game object (*Fig.2*).\n  - Set the `WebcamId` to select the camera you want to use. The first camera's id is `0`. You can list the available webcams with [WebCamTexture.devices](https://docs.unity3d.com/ScriptReference/WebCamTexture-devices.html).\n  - `MonoArucoCameraDisplay.AutoStart` is uncheck because the video stream is displayed by the `ArucoCameraCalibrationGUI` object.\n\n![Calibration camera configuration](~/images/calibration_aruco_webcam.jpg)\n\n*Fig.2: Default configuration of `ArucoWebcam` using the first webcam (id=`0`).*\n\n- Configure the calibration board on the `PinholeCameraCalibration` game object (*Fig.3*).\n  - Set the `CalibrationBoard` with a charuco board or a grid board. Both are already created in the scene to help you.\n  - Configure the calibration board object by measuring the one you just printed : units are in meters this time. The `ArucoObjectDisplayer` helps you visualize the configured board to see if it's match with the printed one. Don't switch x and y values.\n- Optionally adjust parameters on the `PinholeCameraCalibration` game object.\n  - Set the output camera parameters file with `CameraParametersController`:\n    - The folder is relative to [persistentDataPath](https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html) in builds or to the \"Asset\" folder of your projet in the editor.\n    - If the filename is empty, it will be automatically generated from the camera used.\n    - If you want to refine a previous calibration, set the filename of the camera parameters XML file (with the .xml extension).\n  - Configure the board detection with `DetectorParametersController` parameters. They are described on the Detector Parameters section of the [ArUco camera calibration tutorial](https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html).\n  - Configure the calibration flags with `PinholeCameraCalibrationFlags`. They are described on the [calib3d::calibrateCamera() function](https://docs.opencv.org/3.4/d9/d0c/group__calib3d.html#ga3207604e4b1a1758aa66acb6ed5aa65d) documentation.\n\n![Calibration configuration](~/images/calibration_pinhole_camera.jpg)\n\n*Fig.3: `PinholeCameraCalibration` configured with a charuco board.*\n\n- Run the scene and interact with the UI to calibrate your camera (*Fig.4*).\n  1. Hold the calibration board in front of your camera and click on the `Add Image` button. Think to deactivate the autofocus of your camera: a calibration is done for only one focal length at the time.\n  2. Take at least 10 images of you calibration board in different positions and orientations without moving the camera between each snapshot. See this [example of images](https://upload.wikimedia.org/wikipedia/commons/0/05/Multiple_chessboard_views.png).\n  3. Reset the image list if you want to start over with the `Reset` button.\n  4. Calibrate your camera with the image list with the `Calibrate` button. The reprojection error is displayed to score the calibration precision: it should be close to 0 px. Read the responses of this [stackoverflow question](https://stackoverflow.com/q/12794876) to improve your calibrations.\n\n![Calibration scene running](~/images/calibration_running.jpg)\n\n*Fig.4: Calibration scene running.*\n\n## Calibrate a stereoscopic camera\n\nThe process is the same as in the [Calibrate a camera](#calibrate-a-camera-1) section but we use differents camera and calibration scripts.\n\n- Make a calibration board.\n- Open the `Assets/ArucoUnity/Scenes/CalibrateCamera.unity` scene.\n- Configure the camera:\n   1. Deactivate the `ArucoWebcam` game object.\n   2. Drag `Assets/ArucoUnity/Prefabs/Cameras/StereoArucoWebcam.prefab` into the scene.\n   3. Set `StereoArucoWebcam.WebcamId1`, `StereoArucoWebcam.WebcamId2` and uncheck `StereoArucoCameraDisplay.AutoStart` (*Fig.5*).\n\n![Calibration camera configuration](~/images/stereo_calibration_aruco_webcam.jpg)\n\n*Fig.5: Stereo webcam configured to use the first (id1=`0`) and the second webcam (id2=`1`)*\n\n- Configure the calibration:\n  1. Deactivate the `PinholeCameraCalibration` game object.\n  2. Drag `Assets/ArucoUnity/Prefabs/Calibration/StereoPinholeCameraCalibration.prefab` into the scene.\n  3. Set `StereoPinholeCameraCalibration.ArucoCamera` with `StereoArucoWebcam` (*Fig.6*).\n  4. Set `ArucoCameraCalibrationGUI.ArucoCameraCalibration` with `StereoPinholeCameraCalibration` (*Fig.7*).\n  5. Optionally adjust detection and calibration parameters.\n\n![Calibration configuration](~/images/stereo_calibration_pinhole_camera.jpg)\n\n*Fig.6: `StereoPinholeCameraCalibration` configured with a charuco board.*\n\n![Calibration GUI configuration](~/images/stereo_calibration_gui.jpg)\n\n*Fig.7: `ArucoCameraCalibrationGUI` configured with `StereoPinholeCameraCalibration`.*\n\n- Run the scene and calibration your camera (*Fig.8*).\n\n![Calibration scene running](~/images/stereo_calibration_running.jpg)\n\n*Fig.8: Calibration scene running.*\n\n## Calibrate a fisheye camera\n\nFollow the [Calibrate a stereoscopic camera](#calibrate-a-stereoscopic-camera) section but use `OmnidirCameraCalibration` prefab for a monoscopic camera or `StereoOmnidirCameraCalibration` prefab for a stereoscopic camera (*Fig.9*).\n\n![Calibration scene running](~/images/stereo_fisheye_calibration_running.jpg)\n\n*Fig.9: Calibration scene running for a stereoscopic fisheye camera.*\n\nThe algorithms used are described in this tutorial: [Omnidirectional Cameara [sic] Calibration](https://docs.opencv.org/3.4/dd/d12/tutorial_omnidir_calib_main.html).\n\n## Reuse calibration data\n\nYou may already have calibrated your camera and want to directly reuse your calibration data. ArucoUnity doesn't use the YAML format used by OpenCV to store these data but use XML files. Therefore you need to create by hand calibration file for ArucoUnity.\n\nMake a copy of `Assets/ArucoUnity/CameraParameters/<CameraType>Example.xml` and transfer your calibration data."
  },
  {
    "path": "Documentation/manual/create-markers.md",
    "content": "# Create Markers\n\n## Motivation\n\nBefore tracking markers with your camera, you need to create, print and place them in the environment. You can use four type of Aruco objects: [markers](https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html), [grid boards](https://docs.opencv.org/3.4/db/da9/tutorial_aruco_board_detection.html), [charuco boards](https://docs.opencv.org/3.4/df/d4a/tutorial_charuco_detection.html) and [diamond markers](https://docs.opencv.org/3.4/d5/d07/tutorial_charuco_diamond_detection.html).\n\n![Aruco Objects](../images/aruco_objects.png)\n\n*From left to right: a marker, a diamond marker, a grid board, a charuco board.*\n\n## `CreateMarkers` scene\n\nOpen the `Assets/ArucoUnity/Scenes/CreateMarkers.unity` scene to visualize the Aruco objects. Play this scene to create them. You can find the created images in `Assets/ArucoUnity/Images/`.\n\n## Manual creation\n\n### Marker\n\n![Create a marker](../images/create_marker.gif)\n\n*Manual creation and configuration of a marker.*\n\n1. Create an empty object.\n2. Add a `ArucoMarker` script. Configure it:\n     - Select a dictionary of markers. It determines the marker size (for example 4x4 bits) and had a size (for example 50 markers). A lower dictionary size is better to avoid detection errors. For more details, see \"Markers and Dictionaries\" and \"Selection a dictionary\" sections of this [tutorial](https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html).\n     - Set `MarkerSideLength` in pixels. It controls the image size.\n     - Set `MarkerBorderBits` with a minimum of 1. It controls the width of the black border of the marker, helping its detection.\n     - Set `MarkerId`, from 0 to the dictionary size.\n3. Add a `ArucoObjectCreator` script. Configure it:\n     - Add the `ArucoMarker` script to the `ArucoObject` field.\n     - Check `DisplayInPlayMode` if you want to display the marker in play mode.\n     - Check `SaveImage` to save the marker in an image file in play mode.\n     - Set the `OutputFolder` path to save the image, relative to the [persistentDataPath](https://docs.unity3d.com/ScriptReference/Application-persistentDataPath.html) in builds or to the \"Assets\" folder of your project in the editor.\n     - Check `AutomaticFilename` for an automatic image filename based on the `ArucoObject` property values.\n     - Set the image filename in `OptionalImageFilename` if `AutomaticFilename` is not checked.\n4. Play the scene. The marker is automatically created on a child plane of our object and saved on the project folder.\n\n### Grid board\n\n![Create a grid board](../images/create_grid_board.jpg)\n\n*Example of a grid board with the corresponding configuration.*\n\nThe process is the same as in the [marker](#marker) subsection.\n\nThe additional configurable parameters are:\n\n- `MarkersNumberX`: The number of markers on the board X axis.\n- `MarkersNumberY`: The number of markers on the board Y axis.\n- `MarkerSeparation`: The margin between markers in pixels.\n\n### Charuco board\n\n![Create a charuco board](~/images/create_charuco_board.jpg)\n\n*Example of a charuco board with the corresponding configuration.*\n\nThe process is the same as in the [marker](#marker) subsection.\n\nThe additional configurable parameters are:\n\n- `MarginLength`: The markers margin on the white squares.\n- `SquaresNumberX`: The number of squares on the board X axis.\n- `SquaresNumberY`: The number of squares on the board Y axis.\n- `SquareSideLength`: The width in pixels of each square.\n\n### Diamond marker\n\n![Create a diamond marker](~/images/create_diamond.jpg)\n\n*Example of a diamond marker with the corresponding configuration.*\n\nThe process is the same as in the [marker](#marker) subsection.\n\nThe additional configurable parameters are:\n\n- `SquareSideLength`: The width in pixels of each square.\n- `MarkersXId`: The ids of the four markers."
  },
  {
    "path": "Documentation/manual/toc.yml",
    "content": "- name: Create Markers\n  href: create-markers.md\n- name: Calibrate a Camera\n  href: calibrate-a-camera.md\n- name: Track Markers\n  href: track-markers.md\n- name: Aruco Unity Architecture\n  href: aruco-unity-architecture.md\n- name: Build From Sources\n  href: build-from-sources.md"
  },
  {
    "path": "Documentation/manual/track-markers.md",
    "content": "# Track Markers\n\nFirst, make sure you have calibrated your camera: read the [Calibrate a Camera](calibrate-a-camera.md) page. You **need to have a calibration file** to track some aruco objects.\n\nAlso, print and place in the environment the aruco objects you want to track. Read the [Create Markers](create-markers.md) page for details.\n\nTo track your aruco objects:\n\n- Open the `Assets/ArucoUnity/Scenes/TrackMarkers.unity` scene.\n- Configure the camera:\n  1. For a webcam, use the `ArucoWebcamCalibrated` object already in the scene. Otherwise, drag the prefab corresponding to your camera : `Assets/ArucoUnity/Prefabs/Cameras/<CameraType>Calibrated.prefab`.\n  2. Fill `CameraParametersFilename` with the camera parameters XML file from the calibration of the camera (*Fig.1*).\n\n![Camera configuration](~/images/track_markers_camera.jpg)\n\n*Fig.1: `ArucoWebcamCalibrated` configured with camera parameters from a calibration.*\n\n- Create each aruco objects to track:\n  - Configure it with what you measure on the printed aruco object. Units are in meters for tracking, not in pixels.\n  - Use a `ArucoObjectDisplayer` to visualize the aruco object, not a ArucoObjectCreator.\n  - Simply add any game object as child of the aruco object e.g. the red cube in *Fig.2*.\n\n![Marker configuration](~/images/track_markers_marker.jpg)\n\n*Fig.2: `ArucoMarker` configured to track a physical aruco marker with a 5.4 cm side length. The `ArucoObjectDisplayer` helps to visualize in the editor the physical object that will be tracked.*\n\n- Configure the tracker `ArucoObjectsTracker`:\n  1. Drag all the aruco objects to track in `ArucoObjects`.\n  2. Set `ArucoCameraDisplay` with the camera prefab you use (*Fig.3*).\n\n![Tracker configuration](~/images/track_markers_tracker.jpg)\n\n*Fig.3: `ArucoObjectsTracker` configured to track three objects for the `ArucoCameraCalibrated` we configured.*\n\n- Run the scene! The `ArucoTracker` will place (position, rotation, scale) any detected aruco object in the `ArucoObjects` list relative to the camera (*Fig.4*).\n\n![AR roll a ball](~/images/ar_roll_a_ball.gif)\n\n*Fig.4: [Roll a ball](https://unity3d.com/fr/learn/tutorials/s/roll-ball-tutorial) set as child of an aruco board: the game follows the board movements.*\n\nTo understand the algorithm used, read this tutorial: [Detection of ArUco Markers](https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html)."
  },
  {
    "path": "Documentation/toc.yml",
    "content": "- name: Manual\n  href: manual/\n- name: Scripting API\n  href: api/"
  },
  {
    "path": "Documentation/xrefmap.yml",
    "content": "### YamlMime:XRefMap\nreferences:\n- uid: UnityEngine.Behaviour\n  name: Behaviour\n  href: https://docs.unity3d.com/Documentation/ScriptReference/Behaviour.html\n- uid: UnityEngine.Color\n  name: Color\n  href: https://docs.unity3d.com/Documentation/ScriptReference/Color.html\n- uid: UnityEngine.Component\n  name: Component\n  href: https://docs.unity3d.com/Documentation/ScriptReference/Component.html\n- uid: UnityEngine.MonoBehaviour\n  name: MonoBehaviour\n  href: https://docs.unity3d.com/Documentation/ScriptReference/MonoBehaviour.html\n- uid: UnityEngine.Object\n  name: Object\n  href: https://docs.unity3d.com/Documentation/ScriptReference/Object.html\n- uid: UnityEngine.ScriptableObject\n  name: Object\n  href: https://docs.unity3d.com/Documentation/ScriptReference/ScriptableObject.html\n- uid: UnityEngine.Texture2D\n  name: Texture2D\n  href: https://docs.unity3d.com/Documentation/ScriptReference/Texture2D.html\n- uid: UnityEngine.TextureFormat\n  name: TextureFormat\n  href: https://docs.unity3d.com/Documentation/ScriptReference/TextureFormat.html\n- uid: UnityEngine.Vector2\n  name: Vector2\n  href: https://docs.unity3d.com/Documentation/ScriptReference/Vector2.html\n- uid: UnityEngine.Vector2Int\n  name: Vector2Int\n  href: https://docs.unity3d.com/Documentation/ScriptReference/Vector2Int.html\n- uid: UnityEngine.Vector3\n  name: Vector3\n  href: https://docs.unity3d.com/Documentation/ScriptReference/Vector3.html\n"
  },
  {
    "path": "LICENSE",
    "content": "BSD 3-Clause License\n\nCopyright (c) 2017, Erwan Normand\nAll rights reserved.\n\nRedistribution and use in source and binary forms, with or without\nmodification, are permitted provided that the following conditions are met:\n\n* Redistributions of source code must retain the above copyright notice, this\n  list of conditions and the following disclaimer.\n\n* Redistributions in binary form must reproduce the above copyright notice,\n  this list of conditions and the following disclaimer in the documentation\n  and/or other materials provided with the distribution.\n\n* Neither the name of the copyright holder nor the names of its\n  contributors may be used to endorse or promote products derived from\n  this software without specific prior written permission.\n\nTHIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS \"AS IS\"\nAND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE\nIMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE\nDISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE\nFOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL\nDAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR\nSERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER\nCAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,\nOR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE\nOF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.\n"
  },
  {
    "path": "ProjectSettings/AudioManager.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!11 &1\r\nAudioManager:\r\n  m_ObjectHideFlags: 0\r\n  m_Volume: 1\r\n  Rolloff Scale: 1\r\n  Doppler Factor: 1\r\n  Default Speaker Mode: 2\r\n  m_SampleRate: 0\r\n  m_DSPBufferSize: 0\r\n  m_VirtualVoiceCount: 512\r\n  m_RealVoiceCount: 32\r\n  m_SpatializerPlugin: \r\n  m_AmbisonicDecoderPlugin: \r\n  m_DisableAudio: 0\r\n  m_VirtualizeEffects: 1\r\n"
  },
  {
    "path": "ProjectSettings/ClusterInputManager.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!236 &1\r\nClusterInputManager:\r\n  m_ObjectHideFlags: 0\r\n  m_Inputs: []\r\n"
  },
  {
    "path": "ProjectSettings/DynamicsManager.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!55 &1\r\nPhysicsManager:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 3\r\n  m_Gravity: {x: 0, y: -9.81, z: 0}\r\n  m_DefaultMaterial: {fileID: 0}\r\n  m_BounceThreshold: 2\r\n  m_SleepThreshold: 0.005\r\n  m_DefaultContactOffset: 0.01\r\n  m_DefaultSolverIterations: 6\r\n  m_DefaultSolverVelocityIterations: 1\r\n  m_QueriesHitBackfaces: 0\r\n  m_QueriesHitTriggers: 1\r\n  m_EnableAdaptiveForce: 0\r\n  m_EnablePCM: 1\r\n  m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\n  m_AutoSimulation: 1\r\n  m_AutoSyncTransforms: 1\r\n"
  },
  {
    "path": "ProjectSettings/EditorBuildSettings.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1045 &1\r\nEditorBuildSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 2\r\n  m_Scenes: []\r\n"
  },
  {
    "path": "ProjectSettings/EditorSettings.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!159 &1\r\nEditorSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 5\r\n  m_ExternalVersionControlSupport: Visible Meta Files\r\n  m_SerializationMode: 2\r\n  m_DefaultBehaviorMode: 0\r\n  m_SpritePackerMode: 2\r\n  m_SpritePackerPaddingPower: 1\r\n  m_EtcTextureCompressorBehavior: 0\r\n  m_EtcTextureFastCompressor: 0\r\n  m_EtcTextureNormalCompressor: 2\r\n  m_EtcTextureBestCompressor: 5\r\n  m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd\r\n  m_ProjectGenerationRootNamespace: \r\n  m_UserGeneratedProjectSuffix: \r\n  m_CollabEditorSettings:\r\n    inProgressEnabled: 1\r\n"
  },
  {
    "path": "ProjectSettings/GraphicsSettings.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!30 &1\r\nGraphicsSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 12\r\n  m_Deferred:\r\n    m_Mode: 1\r\n    m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_DeferredReflections:\r\n    m_Mode: 1\r\n    m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_ScreenSpaceShadows:\r\n    m_Mode: 1\r\n    m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_LegacyDeferred:\r\n    m_Mode: 1\r\n    m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_DepthNormals:\r\n    m_Mode: 1\r\n    m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_MotionVectors:\r\n    m_Mode: 1\r\n    m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_LightHalo:\r\n    m_Mode: 1\r\n    m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_LensFlare:\r\n    m_Mode: 1\r\n    m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_AlwaysIncludedShaders:\r\n  - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0}\r\n  - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0}\r\n  - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0}\r\n  - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0}\r\n  - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0}\r\n  - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0}\r\n  - {fileID: 10782, guid: 0000000000000000f000000000000000, type: 0}\r\n  - {fileID: 17000, guid: 0000000000000000f000000000000000, type: 0}\r\n  - {fileID: 16000, guid: 0000000000000000f000000000000000, type: 0}\r\n  m_PreloadedShaders: []\r\n  m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000,\r\n    type: 0}\r\n  m_CustomRenderPipeline: {fileID: 0}\r\n  m_TransparencySortMode: 0\r\n  m_TransparencySortAxis: {x: 0, y: 0, z: 1}\r\n  m_DefaultRenderingPath: 1\r\n  m_DefaultMobileRenderingPath: 1\r\n  m_TierSettings: []\r\n  m_LightmapStripping: 0\r\n  m_FogStripping: 0\r\n  m_InstancingStripping: 0\r\n  m_LightmapKeepPlain: 1\r\n  m_LightmapKeepDirCombined: 1\r\n  m_LightmapKeepDynamicPlain: 1\r\n  m_LightmapKeepDynamicDirCombined: 1\r\n  m_LightmapKeepShadowMask: 1\r\n  m_LightmapKeepSubtractive: 1\r\n  m_FogKeepLinear: 1\r\n  m_FogKeepExp: 1\r\n  m_FogKeepExp2: 1\r\n  m_AlbedoSwatchInfos: []\r\n  m_LightsUseLinearIntensity: 0\r\n  m_LightsUseColorTemperature: 0\r\n"
  },
  {
    "path": "ProjectSettings/InputManager.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!13 &1\r\nInputManager:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 2\r\n  m_Axes:\r\n  - serializedVersion: 3\r\n    m_Name: Horizontal\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: left\r\n    positiveButton: right\r\n    altNegativeButton: a\r\n    altPositiveButton: d\r\n    gravity: 3\r\n    dead: 0.001\r\n    sensitivity: 3\r\n    snap: 1\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Vertical\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: down\r\n    positiveButton: up\r\n    altNegativeButton: s\r\n    altPositiveButton: w\r\n    gravity: 3\r\n    dead: 0.001\r\n    sensitivity: 3\r\n    snap: 1\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Fire1\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: left ctrl\r\n    altNegativeButton: \r\n    altPositiveButton: mouse 0\r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Fire2\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: left alt\r\n    altNegativeButton: \r\n    altPositiveButton: mouse 1\r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Fire3\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: left shift\r\n    altNegativeButton: \r\n    altPositiveButton: mouse 2\r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Jump\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: space\r\n    altNegativeButton: \r\n    altPositiveButton: \r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Mouse X\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: \r\n    altNegativeButton: \r\n    altPositiveButton: \r\n    gravity: 0\r\n    dead: 0\r\n    sensitivity: 0.1\r\n    snap: 0\r\n    invert: 0\r\n    type: 1\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Mouse Y\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: \r\n    altNegativeButton: \r\n    altPositiveButton: \r\n    gravity: 0\r\n    dead: 0\r\n    sensitivity: 0.1\r\n    snap: 0\r\n    invert: 0\r\n    type: 1\r\n    axis: 1\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Mouse ScrollWheel\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: \r\n    altNegativeButton: \r\n    altPositiveButton: \r\n    gravity: 0\r\n    dead: 0\r\n    sensitivity: 0.1\r\n    snap: 0\r\n    invert: 0\r\n    type: 1\r\n    axis: 2\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Horizontal\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: \r\n    altNegativeButton: \r\n    altPositiveButton: \r\n    gravity: 0\r\n    dead: 0.19\r\n    sensitivity: 1\r\n    snap: 0\r\n    invert: 0\r\n    type: 2\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Vertical\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: \r\n    altNegativeButton: \r\n    altPositiveButton: \r\n    gravity: 0\r\n    dead: 0.19\r\n    sensitivity: 1\r\n    snap: 0\r\n    invert: 1\r\n    type: 2\r\n    axis: 1\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Fire1\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: joystick button 0\r\n    altNegativeButton: \r\n    altPositiveButton: \r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Fire2\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: joystick button 1\r\n    altNegativeButton: \r\n    altPositiveButton: \r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Fire3\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: joystick button 2\r\n    altNegativeButton: \r\n    altPositiveButton: \r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Jump\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: joystick button 3\r\n    altNegativeButton: \r\n    altPositiveButton: \r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Submit\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: return\r\n    altNegativeButton: \r\n    altPositiveButton: joystick button 0\r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Submit\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: enter\r\n    altNegativeButton: \r\n    altPositiveButton: space\r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n  - serializedVersion: 3\r\n    m_Name: Cancel\r\n    descriptiveName: \r\n    descriptiveNegativeName: \r\n    negativeButton: \r\n    positiveButton: escape\r\n    altNegativeButton: \r\n    altPositiveButton: joystick button 1\r\n    gravity: 1000\r\n    dead: 0.001\r\n    sensitivity: 1000\r\n    snap: 0\r\n    invert: 0\r\n    type: 0\r\n    axis: 0\r\n    joyNum: 0\r\n"
  },
  {
    "path": "ProjectSettings/NavMeshAreas.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!126 &1\r\nNavMeshProjectSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 2\r\n  areas:\r\n  - name: Walkable\r\n    cost: 1\r\n  - name: Not Walkable\r\n    cost: 1\r\n  - name: Jump\r\n    cost: 2\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  - name: \r\n    cost: 1\r\n  m_LastAgentTypeID: -887442657\r\n  m_Settings:\r\n  - serializedVersion: 2\r\n    agentTypeID: 0\r\n    agentRadius: 0.5\r\n    agentHeight: 2\r\n    agentSlope: 45\r\n    agentClimb: 0.75\r\n    ledgeDropHeight: 0\r\n    maxJumpAcrossDistance: 0\r\n    minRegionArea: 2\r\n    manualCellSize: 0\r\n    cellSize: 0.16666667\r\n    manualTileSize: 0\r\n    tileSize: 256\r\n    accuratePlacement: 0\r\n    debug:\r\n      m_Flags: 0\r\n  m_SettingNames:\r\n  - Humanoid\r\n"
  },
  {
    "path": "ProjectSettings/NetworkManager.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!149 &1\r\nNetworkManager:\r\n  m_ObjectHideFlags: 0\r\n  m_DebugLevel: 0\r\n  m_Sendrate: 15\r\n  m_AssetToPrefab: {}\r\n"
  },
  {
    "path": "ProjectSettings/Physics2DSettings.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!19 &1\r\nPhysics2DSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 3\r\n  m_Gravity: {x: 0, y: -9.81}\r\n  m_DefaultMaterial: {fileID: 0}\r\n  m_VelocityIterations: 8\r\n  m_PositionIterations: 3\r\n  m_VelocityThreshold: 1\r\n  m_MaxLinearCorrection: 0.2\r\n  m_MaxAngularCorrection: 8\r\n  m_MaxTranslationSpeed: 100\r\n  m_MaxRotationSpeed: 360\r\n  m_BaumgarteScale: 0.2\r\n  m_BaumgarteTimeOfImpactScale: 0.75\r\n  m_TimeToSleep: 0.5\r\n  m_LinearSleepTolerance: 0.01\r\n  m_AngularSleepTolerance: 2\r\n  m_DefaultContactOffset: 0.01\r\n  m_AutoSimulation: 1\r\n  m_QueriesHitTriggers: 1\r\n  m_QueriesStartInColliders: 1\r\n  m_ChangeStopsCallbacks: 0\r\n  m_CallbacksOnDisable: 1\r\n  m_AutoSyncTransforms: 1\r\n  m_AlwaysShowColliders: 0\r\n  m_ShowColliderSleep: 1\r\n  m_ShowColliderContacts: 0\r\n  m_ShowColliderAABB: 0\r\n  m_ContactArrowScale: 0.2\r\n  m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412}\r\n  m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432}\r\n  m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745}\r\n  m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804}\r\n  m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff\r\n"
  },
  {
    "path": "ProjectSettings/PresetManager.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!1386491679 &1\r\nPresetManager:\r\n  m_ObjectHideFlags: 0\r\n  m_DefaultList: []\r\n"
  },
  {
    "path": "ProjectSettings/ProjectSettings.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!129 &1\r\nPlayerSettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 15\r\n  productGUID: c82aefa811a5f4a4e98a08c4cb7ca35b\r\n  AndroidProfiler: 0\r\n  AndroidFilterTouchesWhenObscured: 0\r\n  AndroidEnableSustainedPerformanceMode: 0\r\n  defaultScreenOrientation: 4\r\n  targetDevice: 2\r\n  useOnDemandResources: 0\r\n  accelerometerFrequency: 60\r\n  companyName: Erwan Normand\r\n  productName: ArucoUnity\r\n  defaultCursor: {fileID: 0}\r\n  cursorHotspot: {x: 0, y: 0}\r\n  m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1}\r\n  m_ShowUnitySplashScreen: 1\r\n  m_ShowUnitySplashLogo: 1\r\n  m_SplashScreenOverlayOpacity: 1\r\n  m_SplashScreenAnimation: 1\r\n  m_SplashScreenLogoStyle: 1\r\n  m_SplashScreenDrawMode: 0\r\n  m_SplashScreenBackgroundAnimationZoom: 1\r\n  m_SplashScreenLogoAnimationZoom: 1\r\n  m_SplashScreenBackgroundLandscapeAspect: 1\r\n  m_SplashScreenBackgroundPortraitAspect: 1\r\n  m_SplashScreenBackgroundLandscapeUvs:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 1\r\n    height: 1\r\n  m_SplashScreenBackgroundPortraitUvs:\r\n    serializedVersion: 2\r\n    x: 0\r\n    y: 0\r\n    width: 1\r\n    height: 1\r\n  m_SplashScreenLogos: []\r\n  m_VirtualRealitySplashScreen: {fileID: 0}\r\n  m_HolographicTrackingLossScreen: {fileID: 0}\r\n  defaultScreenWidth: 1024\r\n  defaultScreenHeight: 768\r\n  defaultScreenWidthWeb: 960\r\n  defaultScreenHeightWeb: 600\r\n  m_StereoRenderingPath: 0\r\n  m_ActiveColorSpace: 0\r\n  m_MTRendering: 1\r\n  m_StackTraceTypes: 010000000100000001000000010000000100000001000000\r\n  iosShowActivityIndicatorOnLoading: -1\r\n  androidShowActivityIndicatorOnLoading: -1\r\n  tizenShowActivityIndicatorOnLoading: -1\r\n  iosAppInBackgroundBehavior: 0\r\n  displayResolutionDialog: 1\r\n  iosAllowHTTPDownload: 1\r\n  allowedAutorotateToPortrait: 1\r\n  allowedAutorotateToPortraitUpsideDown: 1\r\n  allowedAutorotateToLandscapeRight: 1\r\n  allowedAutorotateToLandscapeLeft: 1\r\n  useOSAutorotation: 1\r\n  use32BitDisplayBuffer: 1\r\n  preserveFramebufferAlpha: 0\r\n  disableDepthAndStencilBuffers: 0\r\n  androidBlitType: 0\r\n  defaultIsNativeResolution: 1\r\n  macRetinaSupport: 1\r\n  runInBackground: 0\r\n  captureSingleScreen: 0\r\n  muteOtherAudioSources: 0\r\n  Prepare IOS For Recording: 0\r\n  Force IOS Speakers When Recording: 0\r\n  deferSystemGesturesMode: 0\r\n  hideHomeButton: 0\r\n  submitAnalytics: 1\r\n  usePlayerLog: 1\r\n  bakeCollisionMeshes: 0\r\n  forceSingleInstance: 0\r\n  resizableWindow: 0\r\n  useMacAppStoreValidation: 0\r\n  macAppStoreCategory: public.app-category.games\r\n  gpuSkinning: 0\r\n  graphicsJobs: 0\r\n  xboxPIXTextureCapture: 0\r\n  xboxEnableAvatar: 0\r\n  xboxEnableKinect: 0\r\n  xboxEnableKinectAutoTracking: 0\r\n  xboxEnableFitness: 0\r\n  visibleInBackground: 0\r\n  allowFullscreenSwitch: 1\r\n  graphicsJobMode: 0\r\n  fullscreenMode: 1\r\n  xboxSpeechDB: 0\r\n  xboxEnableHeadOrientation: 0\r\n  xboxEnableGuest: 0\r\n  xboxEnablePIXSampling: 0\r\n  metalFramebufferOnly: 0\r\n  n3dsDisableStereoscopicView: 0\r\n  n3dsEnableSharedListOpt: 1\r\n  n3dsEnableVSync: 0\r\n  xboxOneResolution: 0\r\n  xboxOneSResolution: 0\r\n  xboxOneXResolution: 3\r\n  xboxOneMonoLoggingLevel: 0\r\n  xboxOneLoggingLevel: 1\r\n  xboxOneDisableEsram: 0\r\n  xboxOnePresentImmediateThreshold: 0\r\n  switchQueueCommandMemory: 0\r\n  videoMemoryForVertexBuffers: 0\r\n  psp2PowerMode: 0\r\n  psp2AcquireBGM: 1\r\n  m_SupportedAspectRatios:\r\n    4:3: 1\r\n    5:4: 1\r\n    16:10: 1\r\n    16:9: 1\r\n    Others: 1\r\n  bundleVersion: 2.0\r\n  preloadedAssets: []\r\n  metroInputSource: 0\r\n  wsaTransparentSwapchain: 0\r\n  m_HolographicPauseOnTrackingLoss: 1\r\n  xboxOneDisableKinectGpuReservation: 0\r\n  xboxOneEnable7thCore: 0\r\n  vrSettings:\r\n    cardboard:\r\n      depthFormat: 0\r\n      enableTransitionView: 0\r\n    daydream:\r\n      depthFormat: 0\r\n      useSustainedPerformanceMode: 0\r\n      enableVideoLayer: 0\r\n      useProtectedVideoMemory: 0\r\n      minimumSupportedHeadTracking: 0\r\n      maximumSupportedHeadTracking: 1\r\n    hololens:\r\n      depthFormat: 1\r\n      depthBufferSharingEnabled: 0\r\n    enable360StereoCapture: 0\r\n    oculus:\r\n      sharedDepthBuffer: 0\r\n      dashSupport: 0\r\n  protectGraphicsMemory: 0\r\n  useHDRDisplay: 0\r\n  m_ColorGamuts: 00000000\r\n  targetPixelDensity: 30\r\n  resolutionScalingMode: 0\r\n  androidSupportedAspectRatio: 1\r\n  androidMaxAspectRatio: 2.1\r\n  applicationIdentifier:\r\n    Android: com.Company.ProductName\r\n    Standalone: fr.normanderwan.arucounity\r\n    Tizen: com.Company.ProductName\r\n    iOS: com.Company.ProductName\r\n    tvOS: com.Company.ProductName\r\n  buildNumber:\r\n    iOS: 0\r\n  AndroidBundleVersionCode: 1\r\n  AndroidMinSdkVersion: 16\r\n  AndroidTargetSdkVersion: 0\r\n  AndroidPreferredInstallLocation: 1\r\n  aotOptions: \r\n  stripEngineCode: 1\r\n  iPhoneStrippingLevel: 0\r\n  iPhoneScriptCallOptimization: 0\r\n  ForceInternetPermission: 0\r\n  ForceSDCardPermission: 0\r\n  CreateWallpaper: 0\r\n  APKExpansionFiles: 0\r\n  keepLoadedShadersAlive: 0\r\n  StripUnusedMeshComponents: 0\r\n  VertexChannelCompressionMask: 214\r\n  iPhoneSdkVersion: 988\r\n  iOSTargetOSVersionString: 8.0\r\n  tvOSSdkVersion: 0\r\n  tvOSRequireExtendedGameController: 0\r\n  tvOSTargetOSVersionString: 9.0\r\n  uIPrerenderedIcon: 0\r\n  uIRequiresPersistentWiFi: 0\r\n  uIRequiresFullScreen: 1\r\n  uIStatusBarHidden: 1\r\n  uIExitOnSuspend: 0\r\n  uIStatusBarStyle: 0\r\n  iPhoneSplashScreen: {fileID: 0}\r\n  iPhoneHighResSplashScreen: {fileID: 0}\r\n  iPhoneTallHighResSplashScreen: {fileID: 0}\r\n  iPhone47inSplashScreen: {fileID: 0}\r\n  iPhone55inPortraitSplashScreen: {fileID: 0}\r\n  iPhone55inLandscapeSplashScreen: {fileID: 0}\r\n  iPhone58inPortraitSplashScreen: {fileID: 0}\r\n  iPhone58inLandscapeSplashScreen: {fileID: 0}\r\n  iPadPortraitSplashScreen: {fileID: 0}\r\n  iPadHighResPortraitSplashScreen: {fileID: 0}\r\n  iPadLandscapeSplashScreen: {fileID: 0}\r\n  iPadHighResLandscapeSplashScreen: {fileID: 0}\r\n  appleTVSplashScreen: {fileID: 0}\r\n  appleTVSplashScreen2x: {fileID: 0}\r\n  tvOSSmallIconLayers: []\r\n  tvOSSmallIconLayers2x: []\r\n  tvOSLargeIconLayers: []\r\n  tvOSLargeIconLayers2x: []\r\n  tvOSTopShelfImageLayers: []\r\n  tvOSTopShelfImageLayers2x: []\r\n  tvOSTopShelfImageWideLayers: []\r\n  tvOSTopShelfImageWideLayers2x: []\r\n  iOSLaunchScreenType: 0\r\n  iOSLaunchScreenPortrait: {fileID: 0}\r\n  iOSLaunchScreenLandscape: {fileID: 0}\r\n  iOSLaunchScreenBackgroundColor:\r\n    serializedVersion: 2\r\n    rgba: 0\r\n  iOSLaunchScreenFillPct: 100\r\n  iOSLaunchScreenSize: 100\r\n  iOSLaunchScreenCustomXibPath: \r\n  iOSLaunchScreeniPadType: 0\r\n  iOSLaunchScreeniPadImage: {fileID: 0}\r\n  iOSLaunchScreeniPadBackgroundColor:\r\n    serializedVersion: 2\r\n    rgba: 0\r\n  iOSLaunchScreeniPadFillPct: 100\r\n  iOSLaunchScreeniPadSize: 100\r\n  iOSLaunchScreeniPadCustomXibPath: \r\n  iOSUseLaunchScreenStoryboard: 0\r\n  iOSLaunchScreenCustomStoryboardPath: \r\n  iOSDeviceRequirements: []\r\n  iOSURLSchemes: []\r\n  iOSBackgroundModes: 0\r\n  iOSMetalForceHardShadows: 0\r\n  metalEditorSupport: 1\r\n  metalAPIValidation: 1\r\n  iOSRenderExtraFrameOnPause: 1\r\n  appleDeveloperTeamID: \r\n  iOSManualSigningProvisioningProfileID: \r\n  tvOSManualSigningProvisioningProfileID: \r\n  iOSManualSigningProvisioningProfileType: 0\r\n  tvOSManualSigningProvisioningProfileType: 0\r\n  appleEnableAutomaticSigning: 0\r\n  iOSRequireARKit: 0\r\n  appleEnableProMotion: 0\r\n  clonedFromGUID: 00000000000000000000000000000000\r\n  templatePackageId: \r\n  templateDefaultScene: \r\n  AndroidTargetArchitectures: 5\r\n  AndroidSplashScreenScale: 0\r\n  androidSplashScreen: {fileID: 0}\r\n  AndroidKeystoreName: \r\n  AndroidKeyaliasName: \r\n  AndroidTVCompatibility: 1\r\n  AndroidIsGame: 1\r\n  AndroidEnableTango: 0\r\n  androidEnableBanner: 1\r\n  androidUseLowAccuracyLocation: 0\r\n  m_AndroidBanners:\r\n  - width: 320\r\n    height: 180\r\n    banner: {fileID: 0}\r\n  androidGamepadSupportLevel: 0\r\n  resolutionDialogBanner: {fileID: 0}\r\n  m_BuildTargetIcons: []\r\n  m_BuildTargetPlatformIcons: []\r\n  m_BuildTargetBatching: []\r\n  m_BuildTargetGraphicsAPIs: []\r\n  m_BuildTargetVRSettings:\r\n  - m_BuildTarget: Android\r\n    m_Enabled: 0\r\n    m_Devices:\r\n    - Oculus\r\n  - m_BuildTarget: Metro\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: N3DS\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: PS3\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: PS4\r\n    m_Enabled: 0\r\n    m_Devices:\r\n    - PlayStationVR\r\n  - m_BuildTarget: PSM\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: PSP2\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: SamsungTV\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: Standalone\r\n    m_Enabled: 0\r\n    m_Devices:\r\n    - Oculus\r\n  - m_BuildTarget: Tizen\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: WebGL\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: WebPlayer\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: WiiU\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: Xbox360\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: XboxOne\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: iOS\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  - m_BuildTarget: tvOS\r\n    m_Enabled: 0\r\n    m_Devices: []\r\n  m_BuildTargetEnableVuforiaSettings: []\r\n  openGLRequireES31: 0\r\n  openGLRequireES31AEP: 0\r\n  m_TemplateCustomTags: {}\r\n  mobileMTRendering:\r\n    iPhone: 1\r\n    tvOS: 1\r\n  m_BuildTargetGroupLightmapEncodingQuality:\r\n  - m_BuildTarget: Standalone\r\n    m_EncodingQuality: 1\r\n  - m_BuildTarget: XboxOne\r\n    m_EncodingQuality: 1\r\n  - m_BuildTarget: PS4\r\n    m_EncodingQuality: 1\r\n  playModeTestRunnerEnabled: 0\r\n  runPlayModeTestAsEditModeTest: 0\r\n  actionOnDotNetUnhandledException: 1\r\n  enableInternalProfiler: 0\r\n  logObjCUncaughtExceptions: 1\r\n  enableCrashReportAPI: 0\r\n  cameraUsageDescription: \r\n  locationUsageDescription: \r\n  microphoneUsageDescription: \r\n  switchNetLibKey: \r\n  switchSocketMemoryPoolSize: 6144\r\n  switchSocketAllocatorPoolSize: 128\r\n  switchSocketConcurrencyLimit: 14\r\n  switchScreenResolutionBehavior: 2\r\n  switchUseCPUProfiler: 0\r\n  switchApplicationID: 0x01004b9000490000\r\n  switchNSODependencies: \r\n  switchTitleNames_0: \r\n  switchTitleNames_1: \r\n  switchTitleNames_2: \r\n  switchTitleNames_3: \r\n  switchTitleNames_4: \r\n  switchTitleNames_5: \r\n  switchTitleNames_6: \r\n  switchTitleNames_7: \r\n  switchTitleNames_8: \r\n  switchTitleNames_9: \r\n  switchTitleNames_10: \r\n  switchTitleNames_11: \r\n  switchTitleNames_12: \r\n  switchTitleNames_13: \r\n  switchTitleNames_14: \r\n  switchPublisherNames_0: \r\n  switchPublisherNames_1: \r\n  switchPublisherNames_2: \r\n  switchPublisherNames_3: \r\n  switchPublisherNames_4: \r\n  switchPublisherNames_5: \r\n  switchPublisherNames_6: \r\n  switchPublisherNames_7: \r\n  switchPublisherNames_8: \r\n  switchPublisherNames_9: \r\n  switchPublisherNames_10: \r\n  switchPublisherNames_11: \r\n  switchPublisherNames_12: \r\n  switchPublisherNames_13: \r\n  switchPublisherNames_14: \r\n  switchIcons_0: {fileID: 0}\r\n  switchIcons_1: {fileID: 0}\r\n  switchIcons_2: {fileID: 0}\r\n  switchIcons_3: {fileID: 0}\r\n  switchIcons_4: {fileID: 0}\r\n  switchIcons_5: {fileID: 0}\r\n  switchIcons_6: {fileID: 0}\r\n  switchIcons_7: {fileID: 0}\r\n  switchIcons_8: {fileID: 0}\r\n  switchIcons_9: {fileID: 0}\r\n  switchIcons_10: {fileID: 0}\r\n  switchIcons_11: {fileID: 0}\r\n  switchIcons_12: {fileID: 0}\r\n  switchIcons_13: {fileID: 0}\r\n  switchIcons_14: {fileID: 0}\r\n  switchSmallIcons_0: {fileID: 0}\r\n  switchSmallIcons_1: {fileID: 0}\r\n  switchSmallIcons_2: {fileID: 0}\r\n  switchSmallIcons_3: {fileID: 0}\r\n  switchSmallIcons_4: {fileID: 0}\r\n  switchSmallIcons_5: {fileID: 0}\r\n  switchSmallIcons_6: {fileID: 0}\r\n  switchSmallIcons_7: {fileID: 0}\r\n  switchSmallIcons_8: {fileID: 0}\r\n  switchSmallIcons_9: {fileID: 0}\r\n  switchSmallIcons_10: {fileID: 0}\r\n  switchSmallIcons_11: {fileID: 0}\r\n  switchSmallIcons_12: {fileID: 0}\r\n  switchSmallIcons_13: {fileID: 0}\r\n  switchSmallIcons_14: {fileID: 0}\r\n  switchManualHTML: \r\n  switchAccessibleURLs: \r\n  switchLegalInformation: \r\n  switchMainThreadStackSize: 1048576\r\n  switchPresenceGroupId: \r\n  switchLogoHandling: 0\r\n  switchReleaseVersion: 0\r\n  switchDisplayVersion: 1.0.0\r\n  switchStartupUserAccount: 0\r\n  switchTouchScreenUsage: 0\r\n  switchSupportedLanguagesMask: 0\r\n  switchLogoType: 0\r\n  switchApplicationErrorCodeCategory: \r\n  switchUserAccountSaveDataSize: 0\r\n  switchUserAccountSaveDataJournalSize: 0\r\n  switchApplicationAttribute: 0\r\n  switchCardSpecSize: -1\r\n  switchCardSpecClock: -1\r\n  switchRatingsMask: 0\r\n  switchRatingsInt_0: 0\r\n  switchRatingsInt_1: 0\r\n  switchRatingsInt_2: 0\r\n  switchRatingsInt_3: 0\r\n  switchRatingsInt_4: 0\r\n  switchRatingsInt_5: 0\r\n  switchRatingsInt_6: 0\r\n  switchRatingsInt_7: 0\r\n  switchRatingsInt_8: 0\r\n  switchRatingsInt_9: 0\r\n  switchRatingsInt_10: 0\r\n  switchRatingsInt_11: 0\r\n  switchLocalCommunicationIds_0: \r\n  switchLocalCommunicationIds_1: \r\n  switchLocalCommunicationIds_2: \r\n  switchLocalCommunicationIds_3: \r\n  switchLocalCommunicationIds_4: \r\n  switchLocalCommunicationIds_5: \r\n  switchLocalCommunicationIds_6: \r\n  switchLocalCommunicationIds_7: \r\n  switchParentalControl: 0\r\n  switchAllowsScreenshot: 1\r\n  switchAllowsVideoCapturing: 1\r\n  switchAllowsRuntimeAddOnContentInstall: 0\r\n  switchDataLossConfirmation: 0\r\n  switchSupportedNpadStyles: 3\r\n  switchSocketConfigEnabled: 0\r\n  switchTcpInitialSendBufferSize: 32\r\n  switchTcpInitialReceiveBufferSize: 64\r\n  switchTcpAutoSendBufferSizeMax: 256\r\n  switchTcpAutoReceiveBufferSizeMax: 256\r\n  switchUdpSendBufferSize: 9\r\n  switchUdpReceiveBufferSize: 42\r\n  switchSocketBufferEfficiency: 4\r\n  switchSocketInitializeEnabled: 1\r\n  switchNetworkInterfaceManagerInitializeEnabled: 1\r\n  switchPlayerConnectionEnabled: 1\r\n  ps4NPAgeRating: 12\r\n  ps4NPTitleSecret: \r\n  ps4NPTrophyPackPath: \r\n  ps4ParentalLevel: 1\r\n  ps4ContentID: ED1633-NPXX51362_00-0000000000000000\r\n  ps4Category: 0\r\n  ps4MasterVersion: 01.00\r\n  ps4AppVersion: 01.00\r\n  ps4AppType: 0\r\n  ps4ParamSfxPath: \r\n  ps4VideoOutPixelFormat: 0\r\n  ps4VideoOutInitialWidth: 1920\r\n  ps4VideoOutBaseModeInitialWidth: 1920\r\n  ps4VideoOutReprojectionRate: 60\r\n  ps4PronunciationXMLPath: \r\n  ps4PronunciationSIGPath: \r\n  ps4BackgroundImagePath: \r\n  ps4StartupImagePath: \r\n  ps4StartupImagesFolder: \r\n  ps4IconImagesFolder: \r\n  ps4SaveDataImagePath: \r\n  ps4SdkOverride: \r\n  ps4BGMPath: \r\n  ps4ShareFilePath: \r\n  ps4ShareOverlayImagePath: \r\n  ps4PrivacyGuardImagePath: \r\n  ps4NPtitleDatPath: \r\n  ps4RemotePlayKeyAssignment: -1\r\n  ps4RemotePlayKeyMappingDir: \r\n  ps4PlayTogetherPlayerCount: 0\r\n  ps4EnterButtonAssignment: 1\r\n  ps4ApplicationParam1: 0\r\n  ps4ApplicationParam2: 0\r\n  ps4ApplicationParam3: 0\r\n  ps4ApplicationParam4: 0\r\n  ps4DownloadDataSize: 0\r\n  ps4GarlicHeapSize: 2048\r\n  ps4ProGarlicHeapSize: 2560\r\n  ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ\r\n  ps4pnSessions: 1\r\n  ps4pnPresence: 1\r\n  ps4pnFriends: 1\r\n  ps4pnGameCustomData: 1\r\n  playerPrefsSupport: 0\r\n  enableApplicationExit: 0\r\n  restrictedAudioUsageRights: 0\r\n  ps4UseResolutionFallback: 0\r\n  ps4ReprojectionSupport: 0\r\n  ps4UseAudio3dBackend: 0\r\n  ps4SocialScreenEnabled: 0\r\n  ps4ScriptOptimizationLevel: 0\r\n  ps4Audio3dVirtualSpeakerCount: 14\r\n  ps4attribCpuUsage: 0\r\n  ps4PatchPkgPath: \r\n  ps4PatchLatestPkgPath: \r\n  ps4PatchChangeinfoPath: \r\n  ps4PatchDayOne: 0\r\n  ps4attribUserManagement: 0\r\n  ps4attribMoveSupport: 0\r\n  ps4attrib3DSupport: 0\r\n  ps4attribShareSupport: 0\r\n  ps4attribExclusiveVR: 0\r\n  ps4disableAutoHideSplash: 0\r\n  ps4videoRecordingFeaturesUsed: 0\r\n  ps4contentSearchFeaturesUsed: 0\r\n  ps4attribEyeToEyeDistanceSettingVR: 0\r\n  ps4IncludedModules: []\r\n  monoEnv: \r\n  psp2Splashimage: {fileID: 0}\r\n  psp2NPTrophyPackPath: \r\n  psp2NPSupportGBMorGJP: 0\r\n  psp2NPAgeRating: 12\r\n  psp2NPTitleDatPath: \r\n  psp2NPCommsID: \r\n  psp2NPCommunicationsID: \r\n  psp2NPCommsPassphrase: \r\n  psp2NPCommsSig: \r\n  psp2ParamSfxPath: \r\n  psp2ManualPath: \r\n  psp2LiveAreaGatePath: \r\n  psp2LiveAreaBackroundPath: \r\n  psp2LiveAreaPath: \r\n  psp2LiveAreaTrialPath: \r\n  psp2PatchChangeInfoPath: \r\n  psp2PatchOriginalPackage: \r\n  psp2PackagePassword: F69AzBlax3CF3EDNhm3soLBPh71Yexui\r\n  psp2KeystoneFile: \r\n  psp2MemoryExpansionMode: 0\r\n  psp2DRMType: 0\r\n  psp2StorageType: 0\r\n  psp2MediaCapacity: 0\r\n  psp2DLCConfigPath: \r\n  psp2ThumbnailPath: \r\n  psp2BackgroundPath: \r\n  psp2SoundPath: \r\n  psp2TrophyCommId: \r\n  psp2TrophyPackagePath: \r\n  psp2PackagedResourcesPath: \r\n  psp2SaveDataQuota: 10240\r\n  psp2ParentalLevel: 1\r\n  psp2ShortTitle: Not Set\r\n  psp2ContentID: IV0000-ABCD12345_00-0123456789ABCDEF\r\n  psp2Category: 0\r\n  psp2MasterVersion: 01.00\r\n  psp2AppVersion: 01.00\r\n  psp2TVBootMode: 0\r\n  psp2EnterButtonAssignment: 2\r\n  psp2TVDisableEmu: 0\r\n  psp2AllowTwitterDialog: 1\r\n  psp2Upgradable: 0\r\n  psp2HealthWarning: 0\r\n  psp2UseLibLocation: 0\r\n  psp2InfoBarOnStartup: 0\r\n  psp2InfoBarColor: 0\r\n  psp2ScriptOptimizationLevel: 0\r\n  splashScreenBackgroundSourceLandscape: {fileID: 0}\r\n  splashScreenBackgroundSourcePortrait: {fileID: 0}\r\n  spritePackerPolicy: \r\n  webGLMemorySize: 256\r\n  webGLExceptionSupport: 1\r\n  webGLNameFilesAsHashes: 0\r\n  webGLDataCaching: 0\r\n  webGLDebugSymbols: 0\r\n  webGLEmscriptenArgs: \r\n  webGLModulesDirectory: \r\n  webGLTemplate: APPLICATION:Default\r\n  webGLAnalyzeBuildSize: 0\r\n  webGLUseEmbeddedResources: 0\r\n  webGLCompressionFormat: 1\r\n  webGLLinkerTarget: 0\r\n  scriptingDefineSymbols: {}\r\n  platformArchitecture: {}\r\n  scriptingBackend:\r\n    Android: 0\r\n    Metro: 2\r\n    Standalone: 0\r\n    WebPlayer: 0\r\n  il2cppCompilerConfiguration: {}\r\n  incrementalIl2cppBuild: {}\r\n  allowUnsafeCode: 1\r\n  additionalIl2CppArgs: \r\n  scriptingRuntimeVersion: 1\r\n  apiCompatibilityLevelPerPlatform: {}\r\n  m_RenderingPath: 1\r\n  m_MobileRenderingPath: 1\r\n  metroPackageName: ArucoUnity\r\n  metroPackageVersion: \r\n  metroCertificatePath: \r\n  metroCertificatePassword: \r\n  metroCertificateSubject: \r\n  metroCertificateIssuer: \r\n  metroCertificateNotAfter: 0000000000000000\r\n  metroApplicationDescription: ArucoUnity\r\n  wsaImages: {}\r\n  metroTileShortName: \r\n  metroCommandLineArgsFile: \r\n  metroTileShowName: 0\r\n  metroMediumTileShowName: 0\r\n  metroLargeTileShowName: 0\r\n  metroWideTileShowName: 0\r\n  metroDefaultTileSize: 1\r\n  metroTileForegroundText: 1\r\n  metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0}\r\n  metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628,\r\n    a: 1}\r\n  metroSplashScreenUseBackgroundColor: 0\r\n  platformCapabilities: {}\r\n  metroFTAName: \r\n  metroFTAFileTypes: []\r\n  metroProtocolName: \r\n  metroCompilationOverrides: 1\r\n  tizenProductDescription: \r\n  tizenProductURL: \r\n  tizenSigningProfileName: \r\n  tizenGPSPermissions: 0\r\n  tizenMicrophonePermissions: 0\r\n  tizenDeploymentTarget: \r\n  tizenDeploymentTargetType: -1\r\n  tizenMinOSVersion: 1\r\n  n3dsUseExtSaveData: 0\r\n  n3dsCompressStaticMem: 1\r\n  n3dsExtSaveDataNumber: 0x12345\r\n  n3dsStackSize: 131072\r\n  n3dsTargetPlatform: 2\r\n  n3dsRegion: 7\r\n  n3dsMediaSize: 0\r\n  n3dsLogoStyle: 3\r\n  n3dsTitle: GameName\r\n  n3dsProductCode: \r\n  n3dsApplicationId: 0xFF3FF\r\n  XboxOneProductId: \r\n  XboxOneUpdateKey: \r\n  XboxOneSandboxId: \r\n  XboxOneContentId: \r\n  XboxOneTitleId: \r\n  XboxOneSCId: \r\n  XboxOneGameOsOverridePath: \r\n  XboxOnePackagingOverridePath: \r\n  XboxOneAppManifestOverridePath: \r\n  XboxOnePackageEncryption: 0\r\n  XboxOnePackageUpdateGranularity: 2\r\n  XboxOneDescription: \r\n  XboxOneLanguage:\r\n  - enus\r\n  XboxOneCapability: []\r\n  XboxOneGameRating: {}\r\n  XboxOneIsContentPackage: 0\r\n  XboxOneEnableGPUVariability: 0\r\n  XboxOneSockets: {}\r\n  XboxOneSplashScreen: {fileID: 0}\r\n  XboxOneAllowedProductIds: []\r\n  XboxOnePersistentLocalStorageSize: 0\r\n  XboxOneXTitleMemory: 8\r\n  xboxOneScriptCompiler: 0\r\n  vrEditorSettings:\r\n    daydream:\r\n      daydreamIconForeground: {fileID: 0}\r\n      daydreamIconBackground: {fileID: 0}\r\n  cloudServicesEnabled:\r\n    Analytics: 0\r\n    Build: 0\r\n    Collab: 0\r\n    ErrorHub: 0\r\n    Game_Performance: 0\r\n    Hub: 0\r\n    Purchasing: 0\r\n    UNet: 0\r\n    Unity_Ads: 0\r\n  facebookSdkVersion: 7.9.4\r\n  apiCompatibilityLevel: 2\r\n  cloudProjectId: \r\n  projectName: \r\n  organizationId: \r\n  cloudEnabled: 0\r\n  enableNativePlatformBackendsForNewInputSystem: 0\r\n  disableOldInputManagerSupport: 0\r\n"
  },
  {
    "path": "ProjectSettings/ProjectVersion.txt",
    "content": "m_EditorVersion: 2017.4.14f1\n"
  },
  {
    "path": "ProjectSettings/QualitySettings.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!47 &1\r\nQualitySettings:\r\n  m_ObjectHideFlags: 0\r\n  serializedVersion: 5\r\n  m_CurrentQuality: 5\r\n  m_QualitySettings:\r\n  - serializedVersion: 2\r\n    name: Fastest\r\n    pixelLightCount: 0\r\n    shadows: 0\r\n    shadowResolution: 0\r\n    shadowProjection: 1\r\n    shadowCascades: 1\r\n    shadowDistance: 15\r\n    shadowNearPlaneOffset: 2\r\n    shadowCascade2Split: 0.33333334\r\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\r\n    shadowmaskMode: 0\r\n    blendWeights: 1\r\n    textureQuality: 1\r\n    anisotropicTextures: 0\r\n    antiAliasing: 0\r\n    softParticles: 0\r\n    softVegetation: 0\r\n    realtimeReflectionProbes: 0\r\n    billboardsFaceCameraPosition: 0\r\n    vSyncCount: 0\r\n    lodBias: 0.3\r\n    maximumLODLevel: 0\r\n    particleRaycastBudget: 4\r\n    asyncUploadTimeSlice: 2\r\n    asyncUploadBufferSize: 4\r\n    resolutionScalingFixedDPIFactor: 1\r\n    excludedTargetPlatforms: []\r\n  - serializedVersion: 2\r\n    name: Fast\r\n    pixelLightCount: 0\r\n    shadows: 0\r\n    shadowResolution: 0\r\n    shadowProjection: 1\r\n    shadowCascades: 1\r\n    shadowDistance: 20\r\n    shadowNearPlaneOffset: 2\r\n    shadowCascade2Split: 0.33333334\r\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\r\n    shadowmaskMode: 0\r\n    blendWeights: 2\r\n    textureQuality: 0\r\n    anisotropicTextures: 0\r\n    antiAliasing: 0\r\n    softParticles: 0\r\n    softVegetation: 0\r\n    realtimeReflectionProbes: 0\r\n    billboardsFaceCameraPosition: 0\r\n    vSyncCount: 0\r\n    lodBias: 0.4\r\n    maximumLODLevel: 0\r\n    particleRaycastBudget: 16\r\n    asyncUploadTimeSlice: 2\r\n    asyncUploadBufferSize: 4\r\n    resolutionScalingFixedDPIFactor: 1\r\n    excludedTargetPlatforms: []\r\n  - serializedVersion: 2\r\n    name: Simple\r\n    pixelLightCount: 1\r\n    shadows: 1\r\n    shadowResolution: 0\r\n    shadowProjection: 1\r\n    shadowCascades: 1\r\n    shadowDistance: 20\r\n    shadowNearPlaneOffset: 2\r\n    shadowCascade2Split: 0.33333334\r\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\r\n    shadowmaskMode: 0\r\n    blendWeights: 2\r\n    textureQuality: 0\r\n    anisotropicTextures: 1\r\n    antiAliasing: 0\r\n    softParticles: 0\r\n    softVegetation: 0\r\n    realtimeReflectionProbes: 0\r\n    billboardsFaceCameraPosition: 0\r\n    vSyncCount: 1\r\n    lodBias: 0.7\r\n    maximumLODLevel: 0\r\n    particleRaycastBudget: 64\r\n    asyncUploadTimeSlice: 2\r\n    asyncUploadBufferSize: 4\r\n    resolutionScalingFixedDPIFactor: 1\r\n    excludedTargetPlatforms: []\r\n  - serializedVersion: 2\r\n    name: Good\r\n    pixelLightCount: 2\r\n    shadows: 2\r\n    shadowResolution: 1\r\n    shadowProjection: 1\r\n    shadowCascades: 2\r\n    shadowDistance: 40\r\n    shadowNearPlaneOffset: 2\r\n    shadowCascade2Split: 0.33333334\r\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\r\n    shadowmaskMode: 1\r\n    blendWeights: 2\r\n    textureQuality: 0\r\n    anisotropicTextures: 1\r\n    antiAliasing: 0\r\n    softParticles: 0\r\n    softVegetation: 1\r\n    realtimeReflectionProbes: 1\r\n    billboardsFaceCameraPosition: 1\r\n    vSyncCount: 1\r\n    lodBias: 1\r\n    maximumLODLevel: 0\r\n    particleRaycastBudget: 256\r\n    asyncUploadTimeSlice: 2\r\n    asyncUploadBufferSize: 4\r\n    resolutionScalingFixedDPIFactor: 1\r\n    excludedTargetPlatforms: []\r\n  - serializedVersion: 2\r\n    name: Beautiful\r\n    pixelLightCount: 3\r\n    shadows: 2\r\n    shadowResolution: 2\r\n    shadowProjection: 1\r\n    shadowCascades: 2\r\n    shadowDistance: 70\r\n    shadowNearPlaneOffset: 2\r\n    shadowCascade2Split: 0.33333334\r\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\r\n    shadowmaskMode: 1\r\n    blendWeights: 4\r\n    textureQuality: 0\r\n    anisotropicTextures: 2\r\n    antiAliasing: 2\r\n    softParticles: 1\r\n    softVegetation: 1\r\n    realtimeReflectionProbes: 1\r\n    billboardsFaceCameraPosition: 1\r\n    vSyncCount: 1\r\n    lodBias: 1.5\r\n    maximumLODLevel: 0\r\n    particleRaycastBudget: 1024\r\n    asyncUploadTimeSlice: 2\r\n    asyncUploadBufferSize: 4\r\n    resolutionScalingFixedDPIFactor: 1\r\n    excludedTargetPlatforms: []\r\n  - serializedVersion: 2\r\n    name: Fantastic\r\n    pixelLightCount: 4\r\n    shadows: 2\r\n    shadowResolution: 2\r\n    shadowProjection: 1\r\n    shadowCascades: 4\r\n    shadowDistance: 150\r\n    shadowNearPlaneOffset: 2\r\n    shadowCascade2Split: 0.33333334\r\n    shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667}\r\n    shadowmaskMode: 1\r\n    blendWeights: 4\r\n    textureQuality: 0\r\n    anisotropicTextures: 2\r\n    antiAliasing: 2\r\n    softParticles: 1\r\n    softVegetation: 1\r\n    realtimeReflectionProbes: 1\r\n    billboardsFaceCameraPosition: 1\r\n    vSyncCount: 1\r\n    lodBias: 2\r\n    maximumLODLevel: 0\r\n    particleRaycastBudget: 4096\r\n    asyncUploadTimeSlice: 2\r\n    asyncUploadBufferSize: 4\r\n    resolutionScalingFixedDPIFactor: 1\r\n    excludedTargetPlatforms: []\r\n  m_PerPlatformDefaultQuality:\r\n    Android: 2\r\n    Nintendo 3DS: 5\r\n    PS3: 5\r\n    PS4: 5\r\n    PSM: 5\r\n    PSP2: 2\r\n    Samsung TV: 2\r\n    Standalone: 5\r\n    Tizen: 2\r\n    Web: 5\r\n    WebGL: 3\r\n    WiiU: 5\r\n    Windows Store Apps: 5\r\n    XBOX360: 5\r\n    XboxOne: 5\r\n    iPhone: 2\r\n    tvOS: 5\r\n"
  },
  {
    "path": "ProjectSettings/TagManager.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!78 &1\r\nTagManager:\r\n  serializedVersion: 2\r\n  tags: []\r\n  layers:\r\n  - Default\r\n  - TransparentFX\r\n  - Ignore Raycast\r\n  - \r\n  - Water\r\n  - UI\r\n  - \r\n  - \r\n  - ArucoCameraBackground\r\n  - ArucoCameraStereoBackground1\r\n  - ArucoCameraStereoBackground2\r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  - \r\n  m_SortingLayers:\r\n  - name: Default\r\n    uniqueID: 0\r\n    locked: 0\r\n"
  },
  {
    "path": "ProjectSettings/TimeManager.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!5 &1\r\nTimeManager:\r\n  m_ObjectHideFlags: 0\r\n  Fixed Timestep: 0.02\r\n  Maximum Allowed Timestep: 0.33333334\r\n  m_TimeScale: 1\r\n  Maximum Particle Timestep: 0.03\r\n"
  },
  {
    "path": "ProjectSettings/UnityConnectSettings.asset",
    "content": "%YAML 1.1\r\n%TAG !u! tag:unity3d.com,2011:\r\n--- !u!310 &1\r\nUnityConnectSettings:\r\n  m_ObjectHideFlags: 0\r\n  m_Enabled: 0\r\n  m_TestMode: 0\r\n  m_TestEventUrl: \r\n  m_TestConfigUrl: \r\n  m_TestInitMode: 0\r\n  CrashReportingSettings:\r\n    m_EventUrl: https://perf-events.cloud.unity3d.com/api/events/crashes\r\n    m_NativeEventUrl: https://perf-events.cloud.unity3d.com/symbolicate\r\n    m_Enabled: 0\r\n    m_CaptureEditorExceptions: 1\r\n  UnityPurchasingSettings:\r\n    m_Enabled: 0\r\n    m_TestMode: 0\r\n  UnityAnalyticsSettings:\r\n    m_Enabled: 0\r\n    m_InitializeOnStartup: 1\r\n    m_TestMode: 0\r\n    m_TestEventUrl: \r\n    m_TestConfigUrl: \r\n  UnityAdsSettings:\r\n    m_Enabled: 0\r\n    m_InitializeOnStartup: 1\r\n    m_TestMode: 0\r\n    m_IosGameId: \r\n    m_AndroidGameId: \r\n    m_GameIds: {}\r\n    m_GameId: \r\n  PerformanceReportingSettings:\r\n    m_Enabled: 0\r\n"
  },
  {
    "path": "README.md",
    "content": "# ArucoUnity\n\nBring augmented reality to Unity by tracking [ArUco markers](https://docs.opencv.org/3.4/d5/dae/tutorial_aruco_detection.html)\nin real time. Standard mono cameras, such as webcams, but also stereo cameras and fisheye lenses are supported.\n\n![Demo 1](https://normanderwan.github.io/ArucoUnity/images/ar_roll_a_ball.gif)\n![Demo 2](https://normanderwan.github.io/ArucoUnity/images/extended_phone_screen.gif)\n\n*Left: AR [Roll a ball](https://unity3d.com/fr/learn/tutorials/s/roll-ball-tutorial). Right: The markers tracking*\n*allows to extend the phone's screen.*\n\n## Install\n\nGet ArucoUnity:\n\n1. Download the [latest build release](https://github.com/NormandErwan/ArucoUnity/releases). Or see the\n[Build From Sources](https://normanderwan.github.io/ArucoUnity/manual/build-from-sources.html) documentation page.\n2. Import `ArucoUnity.package` in your Unity project.\n\nGet ArucoUnityPlugin (C bindings to OpenCV):\n\n1. Download the [latest build release](https://github.com/NormandErwan/ArucoUnityPlugin/releases) corresponding to\nyour platform. Windows and Linux x64 only are supported (see issue [#6](https://github.com/NormandErwan/ArucoUnity/issues/6)).\n2. Copy the `Assets/` folder to your Unity project.\n\n## Usage\n\n1. [Create Markers](https://normanderwan.github.io/ArucoUnity/manual/create-markers.html), print and place them in the\nenvironment.\n2. [Calibrate a Camera](https://normanderwan.github.io/ArucoUnity/manual/calibrate-a-camera.html) using a calibration\nboard.\n3. [Track Markers](https://normanderwan.github.io/ArucoUnity/manual/track-markers.html).\n\nSee the documentation online for details: [https://normanderwan.github.io/ArucoUnity/](https://normanderwan.github.io/ArucoUnity).\n\n## Contributing\n\nFor any question or comment, please [open a new issue](https://github.com/NormandErwan/ArucoUnity/issues/new).\n\nIf you'd like to contribute, please [fork the repository](https://github.com/NormandErwan/ArucoUnity/fork) and use a\nfeature branch. Pull requests are warmly welcome.\n\n## Support\n\nThe first version of this project has been developed as part of the master thesis of\n[Erwan Normand](https://linkedin.com/in/normanderwan) and was supported by the\n[ÉTS - École de Technologie Supérieure](https://www.etsmtl.ca).\n\nI'm developing the second version on my own. If this project helped you, please consider buying me a coffee in return :)\n\n[![Buy Me A Coffee](https://www.buymeacoffee.com/assets/img/custom_images/white_img.png)](https://www.buymeacoffee.com/h48VU3fny)\n\n## Licenses\n\nSee the [LICENSE](https://github.com/NormandErwan/ArucoUnity/blob/master/LICENSE) file for license rights and\nlimitations (3-clause BSD license).\n\nSee [https://github.com/NormandErwan/ArucoUnityPlugin/tree/master/3rdparty](https://github.com/NormandErwan/ArucoUnityPlugin/tree/master/3rdparty)\nfor the OpenCV license. ArucoUnity uses the following OpenCV modules:\n\n- [ArUco marker detection (aruco)](http://docs.opencv.org/3.4/d9/d6a/group__aruco.html)\n- [Camera Calibration and 3D Reconstruction (calib3d)](http://docs.opencv.org/3.4/d9/d0c/group__calib3d.html)\n- [Custom Calibration Pattern for 3D reconstruction (ccalib)](http://docs.opencv.org/3.4/d3/ddc/group__ccalib.html)\n"
  }
]