arViewerCapi.cpp
Go to the documentation of this file.
00001 /*
00002  * 
00003  * This file is part of ARToolKit.
00004  * 
00005  * ARToolKit is free software; you can redistribute it and/or modify
00006  * it under the terms of the GNU General Public License as published by
00007  * the Free Software Foundation; either version 2 of the License, or
00008  * (at your option) any later version.
00009  * 
00010  * ARToolKit is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00013  * GNU General Public License for more details.
00014  * 
00015  * You should have received a copy of the GNU General Public License
00016  * along with ARToolKit; if not, write to the Free Software
00017  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018  * 
00019  */
00020 
00021 #include <AR/arvrml.h>
00022 #include "arViewer.h"
00023 #include <iostream>
00024 #include <vector>
00025 #include <string>
00026 #ifdef __APPLE__
00027 #  include <GLUT/glut.h>
00028 #else
00029 #  include <GL/glut.h>
00030 #endif
00031 #include <stdio.h>
00032 #include <string.h>
00033 
00034 //extern "C" {
00035 
00036 //}
00037 
00038 
00039 #define  AR_VRML_MAX   100
00040 
00041 static arVrmlViewer    *viewer[AR_VRML_MAX];
00042 static int              init = 1;
00043 static int              vrID = -1;
00044 
00045 static char *get_buff( char *buf, int n, FILE *fp );
00046 
00047 
00048 int arVrmlLoadFile(const char *file)
00049 {
00050   
00051     FILE             *fp;
00052     openvrml::browser * myBrowser = NULL;
00053     char             buf[256], buf1[256];
00054     char             buf2[256];
00055     int              id;
00056     int              i;
00057 
00058     if( init ) {
00059         for( i = 0; i < AR_VRML_MAX; i++ ) viewer[i] = NULL;
00060         init = 0;
00061     }
00062     for( i = 0; i < AR_VRML_MAX; i++ ) {
00063         if( viewer[i] == NULL ) break;
00064     }
00065     if( i == AR_VRML_MAX ) return -1;
00066     id = i;
00067 
00068     if( (fp=fopen(file, "r")) == NULL ) return -1;
00069 
00070     get_buff(buf, 256, fp);
00071     if( sscanf(buf, "%s", buf1) != 1 ) {fclose(fp); return -1;}
00072     for( i = 0; file[i] != '\0'; i++ ) buf2[i] = file[i];
00073     for( ; i >= 0; i-- ) {
00074         if( buf2[i] == '/' ) break;
00075     }
00076     buf2[i+1] = '\0';
00077     sprintf(buf, "%s%s", buf2, buf1);
00078 
00079     myBrowser = new arVrmlBrowser;
00080     if (!myBrowser) {
00081                 fclose(fp);
00082                 return -1;
00083         }
00084 
00085     viewer[id] = new arVrmlViewer();
00086     if (!viewer[id]) {
00087         delete myBrowser;
00088         fclose(fp);
00089         return -1;
00090     }
00091     strcpy(viewer[id]->filename, buf); // Save filename in viewer.
00092         myBrowser->viewer(viewer[id]);
00093         
00094         std::vector<std::string> uri(1, buf);
00095     std::vector<std::string> parameter; 
00096     myBrowser->load_url(uri, parameter);
00097         
00098     
00099     get_buff(buf, 256, fp);
00100     if( sscanf(buf, "%lf %lf %lf", &viewer[id]->translation[0], 
00101         &viewer[id]->translation[1], &viewer[id]->translation[2]) != 3 ) {
00102         delete viewer[id];
00103         viewer[id] = NULL;
00104         fclose(fp);
00105         return -1;
00106     }
00107 
00108     get_buff(buf, 256, fp);
00109     if( sscanf(buf, "%lf %lf %lf %lf", &viewer[id]->rotation[0],
00110         &viewer[id]->rotation[1], &viewer[id]->rotation[2], &viewer[id]->rotation[3]) != 4 ) {
00111         delete viewer[id];
00112         viewer[id] = NULL;
00113         fclose(fp);
00114         return -1;
00115     }
00116 
00117     get_buff(buf, 256, fp);
00118     if( sscanf(buf, "%lf %lf %lf", &viewer[id]->scale[0], &viewer[id]->scale[1],
00119                &viewer[id]->scale[2]) != 3 ) {
00120         delete viewer[id];
00121         viewer[id] = NULL;
00122         fclose(fp);
00123         return -1;
00124     }
00125     fclose(fp);
00126 
00127     return id;
00128 }
00129 
00130 int arVrmlFree( int id )
00131 {
00132     if( viewer[id] == NULL ) return -1;
00133 
00134     delete viewer[id];
00135     viewer[id] = NULL;
00136 
00137     if( vrID == id ) {
00138         vrID = -1;
00139     }
00140 
00141     return 0;
00142 }
00143 
00144 int arVrmlTimerUpdate()
00145 {
00146      int     i;
00147 
00148     for( i = 0; i < AR_VRML_MAX; i++ ) {
00149         if( viewer[i] == NULL ) continue;
00150         viewer[i]->timerUpdate();
00151     }
00152     return 0;
00153 }
00154 
00155 int arVrmlDraw( int id )
00156 {
00157      if( viewer[id] == NULL ) return -1;
00158      viewer[id]->redraw();
00159      return 0;
00160 }
00161 
00162 int arVrmlSetInternalLight( int flag )
00163 {
00164    int     i;
00165 
00166     if( flag ) {
00167         for( i = 0; i < AR_VRML_MAX; i++ ) {
00168             if( viewer[i] == NULL ) continue;
00169             viewer[i]->setInternalLight(true);
00170         }
00171     }
00172     else {
00173         for( i = 0; i < AR_VRML_MAX; i++ ) {
00174             if( viewer[i] == NULL ) continue;
00175             viewer[i]->setInternalLight(false);
00176         }
00177     }
00178   
00179     return 0;
00180 }
00181 
00182 static char *get_buff( char *buf, int n, FILE *fp )
00183 {
00184     char *ret, buf1[256];
00185 
00186     for(;;) {
00187         ret = fgets( buf, n, fp );
00188         if( ret == NULL ) return(NULL);
00189         if( sscanf(buf, "%s", buf1) != 1 ) continue;
00190 
00191         if( buf1[0] != '#' ) return(ret);
00192     }
00193 }
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Defines


ar_recog
Author(s): Graylin Trevor Jay and Christopher Crick
autogenerated on Fri Jan 25 2013 12:14:59