AR2SurfaceSetT *ar2ReadSurfaceSet( const char *filename, const char *ext, ARPattHandle *pattHandle ) { AR2SurfaceSetT *surfaceSet; FILE *fp = NULL; int readMode; char buf[256], name[256]; int i, j, k; if( ext == NULL || *ext == '\0' || strcmp(ext,"fset") == 0 ) { strncpy(name, filename, sizeof(name) - 1); name[sizeof(name) - 1] = '\0'; readMode = 0; } else { char namebuf[512]; sprintf(namebuf, "%s.%s", filename, ext); if ((fp = fopen(namebuf,"r")) == NULL) { ARLOGe("Error opening file '%s': ", filename); ARLOGperror(NULL); return (NULL); } readMode = 1; } arMalloc(surfaceSet, AR2SurfaceSetT, 1); if( readMode ) { if( get_buff(buf, 256, fp) == NULL ) { fclose(fp); free(surfaceSet); return (NULL); } if( sscanf(buf, "%d", &i) != 1 ) { fclose(fp); free(surfaceSet); return (NULL); } if( i < 1 ) { fclose(fp); free(surfaceSet); return (NULL); } surfaceSet->num = i; surfaceSet->contNum = 0; } else { surfaceSet->num = 1; surfaceSet->contNum = 0; } arMalloc(surfaceSet->surface, AR2SurfaceT, surfaceSet->num); for( i = 0; i < surfaceSet->num; i++ ) { ARLOGi("\n### Surface No.%d ###\n", i+1); if( readMode ) { if( get_buff(buf, 256, fp) == NULL ) break; if( sscanf(buf, "%s", name) != 1 ) break; ar2UtilRemoveExt( name ); } ARLOGi(" Read ImageSet.\n"); surfaceSet->surface[i].imageSet = ar2ReadImageSet( name ); if( surfaceSet->surface[i].imageSet == NULL ) { ARLOGe("Error opening file '%s.iset'.\n", name); free(surfaceSet->surface); free(surfaceSet); if (fp) fclose(fp); //COVHI10426 return (NULL); } ARLOGi(" end.\n"); ARLOGi(" Read FeatureSet.\n"); surfaceSet->surface[i].featureSet = ar2ReadFeatureSet( name, "fset" ); if( surfaceSet->surface[i].featureSet == NULL ) { ARLOGe("Error opening file '%s.fset'.\n", name); ar2FreeImageSet(&surfaceSet->surface[i].imageSet); free(surfaceSet->surface); free(surfaceSet); if (fp) fclose(fp); //COVHI10426 return (NULL); } ARLOGi(" end.\n"); if (pattHandle) { ARLOGi(" Read MarkerSet.\n"); ar2UtilRemoveExt( name ); surfaceSet->surface[i].markerSet = ar2ReadMarkerSet( name, "mrk", pattHandle ); if( surfaceSet->surface[i].markerSet == NULL ) { ARLOGe("Error opening file '%s.mrk'.\n", name); ar2FreeFeatureSet(&surfaceSet->surface[i].featureSet); ar2FreeImageSet(&surfaceSet->surface[i].imageSet); free(surfaceSet->surface); free(surfaceSet); if (fp) fclose(fp); //COVHI10426 return (NULL); } ARLOGi(" end.\n"); } else { surfaceSet->surface[i].markerSet = NULL; } if (readMode) { if( get_buff(buf, 256, fp) == NULL ) break; if( sscanf(buf, "%f %f %f %f", &(surfaceSet->surface[i].trans[0][0]), &(surfaceSet->surface[i].trans[0][1]), &(surfaceSet->surface[i].trans[0][2]), &(surfaceSet->surface[i].trans[0][3])) != 4 ) { ARLOGe("Transformation matrix read error!!\n"); fclose(fp); exit(0); } if( get_buff(buf, 256, fp) == NULL ) break; if( sscanf(buf, "%f %f %f %f", &(surfaceSet->surface[i].trans[1][0]), &(surfaceSet->surface[i].trans[1][1]), &(surfaceSet->surface[i].trans[1][2]), &(surfaceSet->surface[i].trans[1][3])) != 4 ) { ARLOGe("Transformation matrix read error!!\n"); fclose(fp); exit(0); } if( get_buff(buf, 256, fp) == NULL ) break; if( sscanf(buf, "%f %f %f %f", &(surfaceSet->surface[i].trans[2][0]), &(surfaceSet->surface[i].trans[2][1]), &(surfaceSet->surface[i].trans[2][2]), &(surfaceSet->surface[i].trans[2][3])) != 4 ) { ARLOGe("Transformation matrix read error!!\n"); fclose(fp); exit(0); } } else { for( j = 0; j < 3; j++ ) { for( k = 0; k < 4; k++ ) { surfaceSet->surface[i].trans[j][k] = (j == k)? 1.0f: 0.0f; } } } arUtilMatInvf( (const float (*)[4])surfaceSet->surface[i].trans, surfaceSet->surface[i].itrans ); ar2UtilReplaceExt( name, 256, "jpg"); arMalloc( surfaceSet->surface[i].jpegName, char, 256); strncpy( surfaceSet->surface[i].jpegName, name, 256 ); } if (fp) fclose(fp); //COVHI10459 if (i < surfaceSet->num) exit(0); return surfaceSet; }
static int init( int argc, char *argv[] ) { ARGViewport viewport; char *filename = NULL; int xmax, ymax; float xzoom, yzoom; float zoom; int i, display_defaults = 1; for( i = 1; i < argc; i++ ) { if (strcmp(argv[i], "-fset") == 0) { display_defaults = 0; display_fset = 1; } else if( strcmp(argv[i], "-fset2") == 0 ) { display_defaults = 0; display_fset2 = 1; } else if( filename == NULL ) filename = argv[i]; else usage(argv[0] ); } if (!filename || !filename[0]) usage(argv[0]); if (display_defaults) display_fset = display_fset2 = 1; ARLOG("Read ImageSet.\n"); ar2UtilRemoveExt( filename ); imageSet = ar2ReadImageSet( filename ); if( imageSet == NULL ) { ARLOGe("file open error: %s.iset\n", filename ); exit(0); } ARLOG(" end.\n"); if (display_fset) { ARLOG("Read FeatureSet.\n"); featureSet = ar2ReadFeatureSet( filename, "fset" ); if( featureSet == NULL ) { ARLOGe("file open error: %s.fset\n", filename ); exit(0); } ARLOG(" end.\n"); } if (display_fset2) { ARLOG("Read FeatureSet2.\n"); kpmLoadRefDataSet( filename, "fset2", &refDataSet ); if( refDataSet == NULL ) { ARLOGe("file open error: %s.fset2\n", filename ); exit(0); } ARLOG(" end.\n"); ARLOG("num = %d\n", refDataSet->num); } arMalloc(vp, ARGViewportHandle *, imageSet->num); xmax = ymax = 0; for( i = 0; i < imageSet->num; i++ ) { if( imageSet->scale[i]->xsize > xmax ) xmax = imageSet->scale[i]->xsize; if( imageSet->scale[i]->ysize > ymax ) ymax = imageSet->scale[i]->ysize; } xzoom = yzoom = 1.0; while( xmax > winXsize*xzoom ) xzoom += 1.0; while( ymax > winYsize*yzoom ) yzoom += 1.0; if( xzoom > yzoom ) zoom = 1.0/xzoom; else zoom = 1.0/yzoom; winXsize = xmax * zoom; winYsize = ymax * zoom; ARLOG("Size = (%d,%d) Zoom = %f\n", xmax, ymax, zoom); argCreateWindow( winXsize, winYsize ); for( i = 0; i < imageSet->num; i++ ) { viewport.sx = viewport.sy = 0; viewport.xsize = imageSet->scale[i]->xsize * zoom; viewport.ysize = imageSet->scale[i]->ysize * zoom; vp[i] = argCreateViewport( &viewport ); argViewportSetImageSize( vp[i], imageSet->scale[i]->xsize, imageSet->scale[i]->ysize ); argViewportSetDispMethod( vp[i], AR_GL_DISP_METHOD_TEXTURE_MAPPING_FRAME ); //argViewportSetDispMethod( vp[i], AR_GL_DISP_METHOD_GL_DRAW_PIXELS ); argViewportSetDispMode( vp[i], AR_GL_DISP_MODE_FIT_TO_VIEWPORT ); argViewportSetDistortionMode( vp[i], AR_GL_DISTORTION_COMPENSATE_DISABLE ); } reportCurrentDPI(); return 0; }