<h1>Switcheable Detection</h1>
<p>Koncept:</p>
<ol>
<li>Při vytváření Enginu je možné zvolit jednu nebo více detekčních metod.
<ol>
<li> Způsob zadání jedné detekční metody
<div style="margin-left:1.75em;">
<pre>
Creator::DesktopArEngineDirector* engineCreator = new Creator::DesktopArEngineDirector(Creator::ConfigFileType_PlainText);
engineCreator->setDetectionMethod("/etc/settings.golay");
engineCreator->setDetectionMethodMarkerDefinition("/etc/markers")
Creator::ArEngineInterface* arEngine
= engineCreator->createArEngine();
delete engineCreator; // Uvolnění engineCreatoru z paměti.
arEngine->start();
</pre>
</div>
</li>
<li>Pokud je konfigurace složitější, například v případě aplikace více detekčních metod, je nutné nejprve definovat definovat metody detekční strategie a poté každou detekční metodu zvlášť. Za tímto účelem vrací metoda <tt>setDetectionMethod</tt> objekt<tt>DetectionMethodBuilder</tt>, v případě přepínání detekčí metod, se jedná o potomka <tt>SwitcheableDetectionMethodBuilder</tt>.
<div style="margin-left:1.75em;">
<pre>
Creator::DesktopArEngineDirector* engineCreator = new Creator::DesktopArEngineDirector(Creator::ConfigFileType_PlainText);
// Nejprve nastavím kořenový detection builder.
SwitcheableDetectionMethodBuilder* detectionMethodBuilder = (SwitcheableDetectionMethodBuilder) engineCreator->setDetectionMethod("/etc/switchMethodSettings");
// Poté přidám metody, které obsahuje.
detectionMethodBuilder->addDetectionMethod("/etc/settings.golay");
detectionMethodBuilder->addDetectionMethod("/etc/settings.surf");
engineCreator->setDetectionMethodMarkerDefinition("/etc/markers")
Creator::ArEngineInterface* arEngine
= engineCreator->createArEngine();
delete engineCreator; // Uvolnění engineCreatoru z paměti.
arEngine->start();
</pre>
</div>
</li>
</ol>
</li>
</ol>
<blockquote>
<blockquote>
<p>Metody <tt>addDetectionMethod</tt> opět vracejí příslušný builder. Je tedy teoreticky možné takto vytvořit stromovou detekční struktu, která je schopná pružně reagovat na změny v obraze.</p>
</blockquote>
</blockquote>
<ol>
<li>Detekční strategie budou implementovány jako potomci abstraktního objektu <tt>AbstractSwitchableMarkerDetection</tt>.<br />
Liší se metodou jako vybírají a používají zvolené detekční metody.
<ol>
<li><tt>PrioritySwitchMarkerDetection</tt> tato třída používá detekční metody podle pořadí, v jakém byli nadefinovány. Nejprve použije vždy první metodu, pokud ta selže (nenajde marker) použije metodu další.</li>
<li><tt>FastSwitchMarkerDetection</tt> tato třída zrychluje detekci. Nejprve se pokusí v najít markery v okolí dříve nalezených, pokud neuspěje (nebo při zpracování každého X-tého snímku) použije druhou metodu na prohledání celého obrazu.</li>
<li><tt>PrecisionMarkerDetection</tt> Metoda používá všechny detekční metody. První metoda prohledává celý obraz, každá další prohledává pouze okolí marketu, která našla předchozí metoda. Cílem je maximalizovat přesnost nalezené pozice a přitom minimalizovat čas.</li>
</ol>
</li>
</ol>