bool ARMarkerSquare::initWithPatternFile(const char* path, ARdouble width, ARPattHandle *arPattHandle) { // Ensure the pattern string is valid if (!path || !arPattHandle) return false; if (m_loaded) unload(); ARController::logv(AR_LOG_LEVEL_INFO, "Loading single AR marker from file '%s', width %f.", path, width); m_arPattHandle = arPattHandle; patt_id = arPattLoad(m_arPattHandle, path); if (patt_id < 0) { ARController::logv(AR_LOG_LEVEL_ERROR, "Error: unable to load single AR marker from file '%s'.", path); arPattHandle = NULL; return false; } patt_type = AR_PATTERN_TYPE_TEMPLATE; m_width = width; visible = visiblePrev = false; // An ARPattern to hold an image of the pattern for display to the user. allocatePatterns(1); patterns[0]->loadTemplate(patt_id, m_arPattHandle, (float)m_width); m_loaded = true; return true; }
bool ARMarkerMulti::load(const char *multiConfig, ARPattHandle *arPattHandle) { if (m_loaded) unload(); config = arMultiReadConfigFile(multiConfig, arPattHandle); if (!config) { ARController::logv("Error loading multimarker config %s", multiConfig); return false; } visible = visiblePrev = false; // ARPatterns to hold images and positions of the patterns for display to the user. allocatePatterns(config->marker_num); for (int i = 0; i < patternCount; i++) { if (config->marker[i].patt_type == AR_MULTI_PATTERN_TYPE_TEMPLATE) { patterns[i]->loadTemplate(config->marker[i].patt_id, arPattHandle, (float)config->marker[i].width); } else { patterns[i]->loadMatrix(config->marker[i].patt_id, AR_MATRIX_CODE_3x3, (float)config->marker[i].width); // TODO: Determine actual matrix code type in use. } patterns[i]->m_matrix[ 0] = config->marker[i].trans[0][0]; patterns[i]->m_matrix[ 1] = config->marker[i].trans[1][0]; patterns[i]->m_matrix[ 2] = config->marker[i].trans[2][0]; patterns[i]->m_matrix[ 3] = _0_0; patterns[i]->m_matrix[ 4] = config->marker[i].trans[0][1]; patterns[i]->m_matrix[ 5] = config->marker[i].trans[1][1]; patterns[i]->m_matrix[ 6] = config->marker[i].trans[2][1]; patterns[i]->m_matrix[ 7] = _0_0; patterns[i]->m_matrix[ 8] = config->marker[i].trans[0][2]; patterns[i]->m_matrix[ 9] = config->marker[i].trans[1][2]; patterns[i]->m_matrix[10] = config->marker[i].trans[2][2]; patterns[i]->m_matrix[11] = _0_0; patterns[i]->m_matrix[12] = config->marker[i].trans[0][3]; patterns[i]->m_matrix[13] = config->marker[i].trans[1][3]; patterns[i]->m_matrix[14] = config->marker[i].trans[2][3]; patterns[i]->m_matrix[15] = _1_0; } m_loaded = true; return true; }
bool ARMarkerSquare::initWithBarcode(int barcodeID, ARdouble width) { if (barcodeID < 0) return false; if (m_loaded) unload(); ARController::logv(AR_LOG_LEVEL_INFO, "Adding single AR marker with barcode %d, width %f.", barcodeID, width); patt_id = barcodeID; patt_type = AR_PATTERN_TYPE_MATRIX; m_width = width; visible = visiblePrev = false; // An ARPattern to hold an image of the pattern for display to the user. allocatePatterns(1); patterns[0]->loadMatrix(patt_id, AR_MATRIX_CODE_3x3, (float)m_width); // FIXME: need to determine actual matrix code type. m_loaded = true; return true; }