Exemplo n.º 1
0
void CDiff::Seq(int x, int y, int u, int v)
{
	while (x < u && y < v && fVX[x] == fVY[y])
		x++, y++;
	while (u > x && v > y && fVX[u - 1] == fVY[v - 1])
		u--, v--;
	
	if (x == u)
		while (y < v)
			fCY[y++] = true;
	else if (y == v)
		while (x < u)
			fCX[x++] = true;
	else
	{
		int px, py;
		
		int c = MiddleSnake(x, y, u, v, px, py);
		
		if (c == 1)	// should never happen
			abort();
		else
		{
			Seq(x, y, px, py);
			Seq(px, py, u, v);
		}
	}
} /* CDiff::Seq */
Exemplo n.º 2
0
	String rtsS(String s) {
		if (Slen(s)>0)
			if (Seq(" ",Sleft(s,1)))
				return rtsS(Sfrom(s,2));
		if (Seq(" ",Sright(s,1)))
			return rtsS(Sleft(s,Slen(s)-1));
		return s;
	}
Exemplo n.º 3
0
CDiff::CDiff(vector<int>& vx, vector<int>& vy)
{
	fVX = fVY = fD = NULL;

	fN = vx.size();
	fM = vy.size();
	
	fVX = (int *)malloc(fN * sizeof(int));
	FailNil(fVX);
	copy(vx.begin(), vx.end(), fVX);
	
	fVY = (int *)malloc(fM * sizeof(int));
	FailNil(fVY);
	copy(vy.begin(), vy.end(), fVY);

	int diags = fN + fM + 3;
	fD = (int *)malloc(diags * (2 * sizeof(int)));
	FailNil(fD);
	
	fFD = fD + fM + 1;
	fBD = fD + diags + fM + 1;

	fCX.insert(fCX.begin(), fN + 1, false);
	fCY.insert(fCY.begin(), fM + 1, false);
	
	Seq(0, 0, fN, fM);
} /* CDiff::CDiff */
        AutomatedScreenshotController::WaitPredicate AutomatedScreenshotController::SelectedPinSceneSetup(const std::string& query, int searchMenuPinIx) const
        {
            const long long MsToWaitForSearchResults = 7000;
            const long long MsToWaitForCameraToTransitionToPoi = 5000;
            const long long MsWaitForPoiToOpen = 5000;



            m_searchQueryPerformer.PerformSearchQuery(query, false, false);
            return Seq(WaitMs(MsToWaitForSearchResults),
                       Act([=]() {
                           m_messageBus.Publish(SelectMenuItemMessage(searchMenuPinIx));
                       }),
                       WaitMs(MsToWaitForCameraToTransitionToPoi),
                       Act([=]() {
                           const float x =  m_screenProperties.GetScreenWidth()/2.f;
                           const float y = m_screenProperties.GetScreenHeight()*(2.f/3.f);
                           m_worldPinsModule.GetWorldPinsService().HandleTouchTap({x, y});
                       }),
                       WaitMs(MsWaitForPoiToOpen),
                       Act([=]() {
                           m_searchQueryPerformer.RequestClear();
                           m_searchQueryPerformer.RemoveSearchQueryResults();
                       })
            );
        }
Exemplo n.º 5
0
void CSEQ::Main(void)
{
    printf("\n ****************************************");
    printf("\n KOSES GSmatt Led Mounter ");
    printf("\n Serial No : 99-14-0083");
    printf("\n Latest Update : %s", __DATE__);
    printf("\n ****************************************");


    if(FALSE == Init())
    {
        MessageBox(NULL, _T("Failed to init system"), _T("ERROR"), MB_OK);
        return;
    }

    while(!g_bExit)
    {
        g_update.Input();
        g_update.Output();
        g_update.Motor();

        g_err.Seq();
        g_mmi.Communication();
        Seq();

        Sleep(2);
    }

    Sleep(1000);
}
Exemplo n.º 6
0
// ----- GetRows ---------
//
Sequence GetRows(char **s, long int n)
{
  Sequence Q = Seq(n);
  for (long int k=0; k<n; k++) { Q[k+1] = atol(s[k]); if (OFFSET) Q[k+1]--; }
  SeqUnique(Q);
  return Q;
}
Exemplo n.º 7
0
void adddirtoscene(Scene *s,DirRec *dr,V3d pos,V3d up) {
//  printf("Adding directory %s\n",dr->fname);
    s->add(new Cylinder(pos+0.0*up,pos+1.0*up,0.05*up.mod()));
    pos=pos+up;
//  s->add(new TextRend(dr->fname,10,pos,0.3));
    OrderedList<FileRec> ol;
    for (int i=1; i<=dr->fs.len; i++) {
        FileRec *r=dr->fs.num(i);
        ol.add(r,ordering(r));
    }
    V3d x=V3d::normcross(up,V3d::k)*up.mod()*0.8;  // Actually, want y=closest to real z
    V3d y=V3d::normcross(up,x)*up.mod()*0.8;
    for (int i=1; i<=ol.len; i++) {
        FileRec *r=ol.p2num(i);
//    printf("  %s\n",r->fname);
        float ang=((i%2)==0?1:-1)*(pi*(float)(i-1)/(float)(ol.len-1));
        V3d d=up+x*mysin(ang)+y*mycos(ang); // Bad, should do rotation instead.
        if (Seq(r->type(),"file")) {
            //s->add(new Cylinder(pos+0.0*d,pos+0.2*d,0.05*up.mod()));
            s->add(new Sphere(pos+0.1*d,0.02*up.mod()));
//      s->add(new TextRend(r->fname,10,pos+d,0.1));
        } else {
            DirRec *dr2=(DirRec *)r;
            adddirtoscene(s,dr2,pos,d.norm()*up.mod()*0.9);
        }
    }
}
Exemplo n.º 8
0
Arquivo: tree.c Projeto: 10crimes/code
  static List<FileInfo> getfiles(String dir,String pattern,bool subdirs) {

    printf("Getting dir %s\n",dir);
    
    struct ffblk f;
    int ffops=FA_HIDDEN | FA_SYSTEM | FA_DIREC;
    
    List<FileInfo> fs;
    String realpattern=Sconc(tail(dir),pattern);
    // printf("Searching %s\n",realpattern);
    bool done = findfirst(realpattern,&f,ffops);
    while (!done) {

      FileInfo fi=FileInfo(dir,f.ff_name,f.ff_fsize,contains(f.ff_attrib,FA_DIREC),contains(f.ff_attrib,FA_RDONLY),contains(f.ff_attrib,FA_ARCH),contains(f.ff_attrib,FA_SYSTEM),contains(f.ff_attrib,FA_HIDDEN),
      Date((f.ff_fdate & 0x1f),(f.ff_fdate >>  5) & 0x0f,((f.ff_fdate >> 9) & 0x7f) + 1980),
      Time((f.ff_ftime >> 11) & 0x1f,(f.ff_ftime >>  5) & 0x3f,(f.ff_ftime & 0x1f) * 2));
      
      /*FileInfo fi=FileInfo(dir,f.ff_name,f.ff_fsize,contains(f.ff_attrib,FA_DIREC),contains(f.ff_attrib,FA_RDONLY),contains(f.ff_attrib,FA_ARCH),contains(f.ff_attrib,FA_SYSTEM),contains(f.ff_attrib,FA_HIDDEN),
      Date((f.ff_fdate & 0x1f),(f.ff_fdate >>  5) & 0x0f,((f.ff_fdate >> 9) & 0x7f) + 1980),
      Time((f.ff_ftime >> 11) & 0x1f,(f.ff_ftime >>  5) & 0x3f,(f.ff_ftime & 0x1f) * 2));*/
      
      if (!Seq(fi.name,".") && !Seq(fi.name,"..")) {
        
        fs.add(fi);
        
        if (fi.directory && subdirs)
          fs.add(getfiles(Sconc(tail(dir),fi.name),pattern,subdirs));
        
      }
      
      /* printf("%10u %2u:%02u:%02u %2u/%02u/%4u %20s Atrs: %i\n",
         f.ff_fsize,
         (f.ff_ftime >> 11) & 0x1f,
         (f.ff_ftime >>  5) & 0x3f,
         (f.ff_ftime & 0x1f) * 2,
         (f.ff_fdate >>  5) & 0x0f,
         (f.ff_fdate & 0x1f),
         ((f.ff_fdate >> 9) & 0x7f) + 1980,
         f.ff_name,
         (int)f.ff_attrib);*/
      
      done = findnext(&f);
    }
    
    return fs;
  }
Exemplo n.º 9
0
Allegro_reader::Allegro_reader(FILE *a_file)
{
    file = a_file; // save the file
    line_parser_flag = false;
    line_no = 0;
    seq = Seq();
    tsnum = 4; // default time signature
    tsden = 4;
}
Exemplo n.º 10
0
//-----LoadRows-----
//
Sequence LoadRows(char *file)
{
  FileBufferText buffer(file);
  long int n = buffer.CountLines();
  Sequence Q = Seq(n);
  for (long int k=1; k<=n; k++) { Q[k] = atol(buffer.Next()); if (OFFSET) Q[k]--; }
  SeqUnique(Q);
  return Q;
}
Exemplo n.º 11
0
void main(int argc,String *argv) {
  
  ArgParser a=ArgParser(argc,argv);
  String fname=a.arg("HTML file");
  a.done();

  HTMLer h=HTMLer(fname);
  int cnt=0;
  // Find next block
  Pos p=h.find("~open");
  while (p.r>0 && p.c>0) {
    cnt++;
    Pos g=h.findback(">",p);
    //printf("Found > at r%ic%i\n",g.r,g.c);
    String w=h.ls.num(g.r);
    w=Sinsert(w,g.c+1,Sformat("<font color=\"008000\"><u><span id=\"click%i\" class=\"Outline\" style=\"cursor:hand;\">",cnt));
    h.ls.replace(g.r,w);
    String s=h.ls.num(p.r);
    s=Sreplaceall(s,"~open",Sformat("</span></u> <b><span id=\"click%iclosed\">&gt;</span><span id=\"click%iopen\" style=\"display:None\">&lt;</span></b></font> ",cnt,cnt));
    h.ls.replace(p.r,s);
    // Find start and end of blockquote
    Pos q=h.find("<blockquote>",p);
    printf("Found <b> at r%ic%i\n",q.r,q.c);
    Pos r=q;
    int indent=1;
    do {
      //printf("Searching...");
      Pos s=h.find("<blockquote>",r.nextrow());
      Pos e=h.find("</blockquote>",r.nextrow());
      //printf("s r%ic%i e r%ic%i\n",s.r,s.c,r.r,r.c);
      if (s.r==-1 && s.c==-1 && e.r==-1 && e.c==-1)
        error("Could not find <b> or </b> from row %i\n",r.nextrow());
      if (s.r<e.r && s.r>-1) {
        indent++;
        r=s;
      } else {
        indent--;
        r=e;
      }
    } while (indent>0 || (Slen(h.ls.num(r.r+1))==0 && Seq(h.ls.num(r.r+2),"<blockquote>"))); 
    printf("Found corresponding </b> at r%ic%i\n",r.r,r.c);
    String t=h.ls.num(q.r);
    t=Sformat("<span id=\"click%iblock\" style=\"display:None;\">%s",cnt,t);
    h.ls.replace(q.r,t);
    String u=h.ls.num(r.r);
    u=Sformat("%s</span>",u);
    h.ls.replace(r.r,u);
    p=h.find("~open",p.nextrow());

    h.write("einaus.html");
  }
  Pos v=h.find("/body");
  h.ls.insert(v.r,readlinesfromfile("einausinsert.html"));
  h.write("einaus.html");

}
        AutomatedScreenshotController::WaitPredicate AutomatedScreenshotController::SharedLandmarkSceneWaitPredicate(const bool openSearchMenu) const
        {
            const long long MsToWaitForWatermarkToSettle = 3000;
            const long long MsToWaitForSearchResultsToReturn = 3000;
            const long long MsToWaitForSearchMenuToOpen = 2000;

            return Seq(WaitMs(MsToWaitForWatermarkToSettle),
                       Act([=]() { m_messageBus.Publish(SearchMenu::OpenSearchMenuMessage(openSearchMenu)); }),
                       WaitMs(MsToWaitForSearchMenuToOpen),
                       Act([=]() {
                           if (openSearchMenu)
                           {
                               m_messageBus.Publish(OpenSearchMenuSectionMessage([=](const Menu::View::IMenuSectionViewModel& section) {
                                   return openSearchMenu && section.Name() == "Find";
                               }));
                           }
                           else
                           {
                               m_searchQueryPerformer.PerformSearchQuery("", true, false);
                           }
                       }),
                       WaitMs(MsToWaitForSearchResultsToReturn));
        }
Exemplo n.º 13
0
void PDFWindow :: keyPressEvent(QKeyEvent* event)
{
    int Key = event -> key();
    if(Key >= Qt::Key_0 && Key <= Qt::Key_9
       && event -> modifiers() == Qt::NoModifier)
    {                           // The input is a number
        NumPrefix.append(Key);  // Key is also the ascii/unicode of the character.
        std::cerr << "NumPrefix = " << NumPrefix.toStdString() << std::endl;
        return;
    }
        
    QKeySequence Seq(event -> key() + event -> modifiers());
    if(KeyBindings.find(Seq) == KeyBindings.end())
    {
        std::cerr << Seq.toString().toStdString() << " captured.  ";
        defaultAction(*this);
        return;
    }
    
    KeyBindings[Seq](*this);

    NumPrefix.clear();
    return;
}
Exemplo n.º 14
0
 static bool fcalled(FontChar *f,String s) {
   return Seq(f->name,s);
 }
Exemplo n.º 15
0
int main( )
{
    execute( Seq(
        If( True( ), Print( String( "hello " ) ), Print( True( ) ) ),
        If( Or( False( ), Neg( True( ) ) ), Print( Unit( ) ), Print( String( "world!\n" ) ) ) ) );
    execute( Seq(
        When( True( ), Print( String( "hello " ) ) ),
        Unless( False( ), Print( String( "world!\n" ) ) ) ) );
    execute( Print( Print( Seq( Print( True( ) ), Print( False( ) ) ) ) ) );
    execute( Print( Concat( String( "4" ), Show( True( ) ) ) ) );
    assert( value_to_bool( execute( IsDefined( String( "not defined" ) ) ) ) == false );
    execute(
        Seq( Set( String( "SomeVar" ), String( "12" ) ),
             Seq( Print( Get( String( "SomeVar" ) ) ),
                  Seq( Set( Concat( String( "S" ), String( "omeVar" ) ), String( "345\n" ) ),
                       Print( Get( Concat( String( "Some" ), String( "Var" ) ) ) ) ) ) ) );
    execute( Seq(
        If( True( ), Set( String( "hello " ), String( "hellos \n" ) ), Print( True( ) ) ), Print( Get( String( "hello " ) ) ) ) );
    execute( Seq( Scope( Set( String( "hi" ), True( ) ) ), Print( IsDefined( String( "hi" ) ) ) ) );
    assert(
        value_to_bool( execute( Seq( Seq( Set( String( "var" ), False( ) ), Scope( Set( String( "var" ), True( ) ) ) ), Get( String( "var" ) ) ) ) ) );
    execute(
        Seq(
            Seq( Set( String( "b1" ), True( ) ), Set( String( "b2" ), True( ) ) ),
            While(
                Or( Get( String( "b1" ) ), Get( String( "b2" ) ) ),
                If( Get( String( "b1" ) ),
                    Seq( Set( String( "b1" ), False( ) ), Print( String( "Hello" ) ) ),
                    Seq( Set( String( "b2" ), False( ) ), Print( String( "World" ) ) ) ) ) ) );
}
Exemplo n.º 16
0
void main(int argc,String *argv) {

    ArgParser a=ArgParser(argc,argv);
    bool showprogress=a.argexists("-sp","show progress");
    if (argc<3) {
        printf("%s","Syntax: forall <files> do <command>\n");
        printf("%s","The command may use %f as the filename,\n");
        printf("%s","%s as the filename stripped of extensions,\n");
        printf("%s","%l as %s in lower case,\n");
        printf("%s","%w as the whole path of the filename,\n");
        printf("%s","%n as the number of the file being processed,\n");
        printf("%s","%a as '&', %p as '>',\n");
        printf("%s","and : to seperate commands.\n");
        printf("%s","Note: for DOS, use $ instead of %\n");
        a.done();
        exit(0);
    }

    quiet=a.argexists("-s","stealth");

    List<String> fs;
    String s="";
    while (!Seq(s,"do") && a.argsleft()) {
        s=a.getarg(1);
        if (!Seq(s,"do")) {
            if (showprogress)
                printf("%s ",s);
            fs.add(getfiles(s));
        }
    }
    if (showprogress)
        printf("\n");
    List<String> ls;
    while (a.argsleft()) {
        ls.add(a.getarg(1));
        printf("%s ",ls.num(ls.len));
//    printf("Got %s\n",ls.num(ls.len));
    }
    printf("\n");
    a.done();


    FILE *progress;
    progress=fopen("progress.fa","w");
    for (int i=1; i<=fs.len; i++) {
        String whole=fs.num(i);
        String fname;
        int n=max(Sinstrlast(whole,"/"),Sinstrlast(whole,"\\"));
        if (n==0)
            fname=whole;
        else
            fname=Sfrom(whole,n+1);
        String str=fname;
        int k;
        while ((k=Sinstr(str,"."))>0) {
            str=Sleft(str,k-1);
        }
        String strlow=Stolower(str);
        String com="";
        for (int j=1; j<=ls.len; j++) {
            String arg=ls.num(j);
            if (showprogress)
                printf("%s -> ",arg);
#ifdef DOS
            arg=Sreplaceall(arg,"$n",Sformat("%i",i));
            arg=Sreplaceall(arg,"$a","&");
            arg=Sreplaceall(arg,"$f",fname);
            arg=Sreplaceall(arg,"$w",whole);
            arg=Sreplaceall(arg,"$s",str);
            arg=Sreplaceall(arg,"$l",strlow);
            arg=Sreplaceall(arg,"$p",">");
#else
            arg=Sreplaceall(arg,"\%n",Sformat("%i",i));
            arg=Sreplaceall(arg,"\%a","&");
            arg=Sreplaceall(arg,"\%f",fname);
            arg=Sreplaceall(arg,"\%w",whole);
            arg=Sreplaceall(arg,"\%s",str);
            arg=Sreplaceall(arg,"\%l",strlow);
            arg=Sreplaceall(arg,"\%p",">");
#endif
            if (showprogress)
                printf("%s -> ",arg);
            if (Seq(arg,":")) {
                com=Srls(com);
                if (!quiet)
                    printf("-%i/%i- %s\n",i,fs.len,com);
                fprintf(progress,"-%i/%i- %s\n",i,fs.len,com);
                system(com);
                com="";
            } else
                com=Sconc(com," ",arg);
            if (showprogress) {
                printf("%s\n>",com);
                for (int k=1; k<=ls.len; k++)
                    printf("%s ",ls.num(k));
                printf("\n");
            }
        }
        com=Srls(com);
        if (!quiet)
            printf("-%i/%i- %s\n",i,fs.len,com);
        system(com);
    }
    fclose(progress);
#ifdef DOS
    system("del progress.fa");
#else
    system("rm progress.fa");
#endif

}
Exemplo n.º 17
0
Arquivo: tree.c Projeto: 10crimes/code
 static String tail(String dir) {
   if (!Seq(Sright(dir,1),"\\") && !Seq(Sright(dir,1),"/") && Slen(dir)>0)
     return Sconc(dir,"/");
   else
     return dir;
 }
Exemplo n.º 18
0
main(int argc,String *argv) {

	ArgParser a=ArgParser(argc,argv);
	String filename=a.argor("results file","results.txt");
	a.done();

	float realrightangerrsum=0;
	float realdownangerrsum=0;
	int var769=0;
	int var770=0;
	float hvpreldistsum=0;
	float vvpreldistsum=0;
	int hvpreldistcnt=0;
	int vvpreldistcnt=0;

	List<String> lines=readlinesfromfile(filename);
	int lastyaw=-1;
	int lastpitch=-1;
	int i=0;
	String l=lines.get(i);
	if (!Seq(l,"START"))
		fprintf(stderr,"Error 0 line %i\n",i);
	else
		i++;
	while (i<lines.len) {
		if (i<lines.len) l=lines.get(i);
		if (!Seq(l,"SIM:")) {
			fprintf(stderr,"Error A line %i - seeking\n",i);
			i++;
			// break;
		}	else {
			float roll,yaw,pitch;
			V3d gtright,gtdown;
			V3d ppright,ppdown;
			V2d gthvp,gtvvp;
			V2d pphvp,ppvvp;
			float gtU,gtV,gtW;
			float ppU,ppV,ppW;
			i++; if (i<lines.len) l=lines.get(i);
			sscanf(l,"roll = %f",&roll);
			// printf("Got %f for roll\n",roll);
			i++; if (i<lines.len) l=lines.get(i);
			sscanf(l,"yaw = %f",&yaw);
			// printf("Got %f for yaw\n",yaw);
			i++; if (i<lines.len) l=lines.get(i);
			sscanf(l,"pitch = %f",&pitch);
			// printf("Got %f for pitch\n",pitch);
			i++; if (i<lines.len) l=lines.get(i);
			if (Sstarts(l,"right = ")) {
				sscanf(l,"right = (%f,%f,%f)",&gtright.x,&gtright.y,&gtright.z);
				// printf("Got %s for GTr\n",gtright.toString());
				i++; if (i<lines.len) l=lines.get(i);
			} else {
				fprintf(stderr,"Bad gen right %i\n",i);
			}
			if (Sstarts(l,"down = ")) {
				sscanf(l,"down = (%f,%f,%f)",&gtdown.x,&gtdown.y,&gtdown.z);
				// printf("Got %s for GTd\n",gtdown.toString());
				i++; if (i<lines.len) l=lines.get(i);
			} else {
				fprintf(stderr,"Bad gen down %i\n",i);
			}
			if (Sstarts(l,"HVP = ")) {
				sscanf(l,"HVP = (%f,%f)",&gthvp.x,&gthvp.y);
				i++; if (i<lines.len) l=lines.get(i);
			} else {
				fprintf(stderr,"Bad gen HVP %i\n",i);
			}
			if (Sstarts(l,"VVP = ")) {
				sscanf(l,"VVP = (%f,%f)",&gtvvp.x,&gtvvp.y);
				i++; if (i<lines.len) l=lines.get(i);
			} else {
				fprintf(stderr,"Bad gen VVP %i\n",i);
			}
			if (Sstarts(l,"U = ")) {
				sscanf(l,"U = %f",&gtU);
				i++; if (i<lines.len) l=lines.get(i);
			} else {
				// fprintf(stderr,"no gt U line %i r%f y%f p%f\n",i,roll,yaw,pitch);
			}
			if (Sstarts(l,"V = ")) {
				sscanf(l,"V = %f",&gtV);
				i++; if (i<lines.len) l=lines.get(i);
			} else {
				// fprintf(stderr,"no gt V line %i r%f y%f p%f\n",i,roll,yaw,pitch);
			}
			if (Sstarts(l,"W = ")) {
				sscanf(l,"W = %f",&gtW);
				i++; if (i<lines.len) l=lines.get(i);
			} else {
				// fprintf(stderr,"no gt W line %i r%f y%f p%f\n",i,roll,yaw,pitch);
			}
			if (!Seq(l,"PP:"))
				fprintf(stderr,"Error B line %i\n",i);
			i++; if (i<lines.len) l=lines.get(i);
			bool badgen=false;
			bool badhvp=false;
			bool badvvp=false;
			if (Seq(l,"")) {
				fprintf(stderr,"no pp res r%i-y%i-p%i\n",(int)roll,(int)yaw,(int)pitch);
				fprintf(stderr,"  Error D line %i\n",i);
				ppright=gtright;
				ppdown=gtdown;
				badgen=true;
			} else {
				if (sscanf(l,"right = (%f,%f,%f)",&ppright.x,&ppright.y,&ppright.z)) {
					// printf("Got %s for GTr\n",ppright.toString());
					i++; if (i<lines.len) l=lines.get(i);
				} else {
					badgen=true;
				}
				if (sscanf(l,"down = (%f,%f,%f)",&ppdown.x,&ppdown.y,&ppdown.z)) {
					// printf("Got %s for GTr\n",ppdown.toString());
					i++; if (i<lines.len) l=lines.get(i);
				} else {
					badgen=true;
				}
				if (sscanf(l,"HVP = (%f,%f)",&pphvp.x,&pphvp.y)) {
					i++; if (i<lines.len) l=lines.get(i);
				} else {
					fprintf(stderr,"no hvp line %i\n",i);
					badhvp=true;
				}
				if (Sstarts(l,"VVP = ")) {
					sscanf(l,"VVP = (%f,%f)",&ppvvp.x,&ppvvp.y);
					i++; if (i<lines.len) l=lines.get(i);
				} else {
					fprintf(stderr,"no vvp line %i r%f y%f p%f\n",i,roll,yaw,pitch);
					badvvp=true;
				}
				if (Sstarts(l,"U = ")) {
					sscanf(l,"U = %f",&ppU);
					i++; if (i<lines.len) l=lines.get(i);
				} else {
					// fprintf(stderr,"no pp U line %i r%f y%f p%f\n",i,roll,yaw,pitch);
				}
				if (Sstarts(l,"V = ")) {
					sscanf(l,"V = %f",&ppV);
					i++; if (i<lines.len) l=lines.get(i);
				} else {
					// fprintf(stderr,"no pp V line %i r%f y%f p%f\n",i,roll,yaw,pitch);
				}
				if (Sstarts(l,"W = ")) {
					sscanf(l,"W = %f",&ppW);
					i++; if (i<lines.len) l=lines.get(i);
				} else {
					// fprintf(stderr,"no pp W line %i r%f y%f p%f\n",i,roll,yaw,pitch);
				}
			}

			// float corra=myabs(-V3d::normdot(gtright,ppright));
			// float acc=myabs(corra*corrb);
			float corra=-V3d::normdot(gtright,ppright);
			float corrb=-V3d::normdot(gtdown,ppdown);
			float acc=corra*corrb;
			V3d gtnor=V3d::normcross(gtright,gtdown);
			V3d ppnor=V3d::normcross(ppright,ppdown);
			float altacc=V3d::normdot(gtnor,ppnor);
			float faceonness=V3d::normdot(gtnor,V3d::k);
			float maxangle=180*acos(faceonness)/pi;
			float rightdiff=-V3d::normdot(gtright,V3d::k);
			float rightang=180*asin(rightdiff)/pi;

			fprintf(stderr,"%s %s\n",gtright.toString(),ppright.toString());
			float realrightangerr=180.0-180.0*V3d::angBetween(gtright,ppright)/pi;
			float realdownangerr=180.0-180.0*V3d::angBetween(gtdown,ppdown)/pi;
			float realrightangerrzerone=1.0-realrightangerr/180.0;
			float realdownangerrzerone=1.0-realdownangerr/180.0;

			// Bad:
			// float focal=640; // Just seems!
			float focal=2560; // Just seems!
			// float focal=0; // Just seems!
			V3d eye=V3d(320,240,-focal);
			V3d gtrightfromhvp=V3d(gthvp.x,gthvp.y,0)-eye;
			V3d pprightfromhvp=V3d(pphvp.x,pphvp.y,0)-eye;
			V3d gtdownfromvvp=V3d(gtvvp.x,gtvvp.y,0)-eye;
			V3d ppdownfromvvp=V3d(ppvvp.x,ppvvp.y,0)-eye;
			float hvpcorr=V3d::normdot(gtrightfromhvp,pprightfromhvp);
			if (badhvp)
				hvpcorr=-1;
			float vvpcorr=V3d::normdot(gtdownfromvvp,ppdownfromvvp);
			if (badvvp)
				vvpcorr=-1;

			if (!badgen) {
				if (corra<0 && corrb<0) {
					fprintf(stderr,"  double negative correl r%i-y%i-p%i\n",(int)roll,(int)yaw,(int)pitch);
				} else if (corra<0 || corrb<0) {
					fprintf(stderr,"  single -ve r%i-y%i-p%i\n",(int)roll,(int)yaw,(int)pitch);
					altacc=-3;
				}
			}

			// printf("Correlation: %f %f\n",corra,corrb);
			// printf("%f %f %f\n",yaw,pitch,myabs(corra*corrb));
			// printf("%f %f %f\n",yaw,pitch,corra*corrb);
			// printf("%f %f %f %f\n",yaw,pitch,corra,corrb);
			// printf("%f %f %f %f %f\n",yaw,pitch,(myabs(corra*corrb)+1.0)/2.0,corra,corrb);

			if (yaw<lastyaw || pitch<lastpitch)
				printf("\n");
			lastyaw=yaw;
			lastpitch=pitch;

			// This is no longer cheating but it lets us see real errors
			// if (acc<0)
			// acc=1;
			// if (altacc<0)
			// altacc=1;

			if (badgen) {
				acc=-2; altacc=-2;
			}

			float hvpdist=gthvp.dist(pphvp);
			float vvpdist=gtvvp.dist(ppvvp);
			float hvpreldist=hvpdist/gthvp.mag();
			float vvpreldist=vvpdist/gtvvp.mag();

			if (yaw>10 && yaw<80 && pitch>10 && pitch<80) {	
				fprintf(stderr,"--> %f\n",realrightangerr);
				if (myabs(realrightangerr)<123456789.0) {
					realrightangerrsum+=myabs(realrightangerr);
					var769++;
				}
				if (myabs(realdownangerr)<123456789.0) {
					realdownangerrsum+=myabs(realdownangerr);
					var770++;
				}
				float maxreldisterr=15.0;
				if (hvpreldist<maxreldisterr) {
					hvpreldistcnt++;
					hvpreldistsum+=hvpreldist;
				} // else
				// hvpreldist=0;
				if (vvpreldist<maxreldisterr) {
					vvpreldistcnt++;
					vvpreldistsum+=vvpreldist;
				} // else
				// vvpreldist=0;
			}

			if (realrightangerr>45)
				realrightangerr=45;
			if (realdownangerr>45)
				realdownangerr=45;

			gtU=myabs(gtU);
			gtV=myabs(gtV);
			gtW=myabs(gtW);
			ppU=myabs(ppU);
			ppV=myabs(ppV);
			ppW=myabs(ppW);

			float Udiff=ppU-gtU;
			float Vdiff=ppV-gtV;
			float Wdiff=ppW-gtW;

			printf("%f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f %f\n",
				yaw,pitch,acc,corra,corrb,
				gtright.x,gtright.y,gtright.z,ppright.x,ppright.y,ppright.z,
				gtdown.x,gtdown.y,gtdown.z,ppdown.x,ppdown.y,ppdown.z,
				altacc,faceonness,maxangle,rightdiff,rightang,
				hvpcorr,vvpcorr, // 23,24
				hvpdist,vvpdist, // 25,26
				-hvpreldist,-vvpreldist, // 27,28
				-realrightangerr,-realdownangerr, // 29,30
				realrightangerrzerone,realdownangerrzerone, // 31,32
				gtU,gtV,gtW, // 33,34,35
				ppU,ppV,ppW, // 36,37,38
				Udiff,Vdiff,Wdiff // 39,40,41
			);

			// if (!Seq(l,""))
			// fprintf(stderr,"Error C line %i\n",i);
			// i++;
		}
	}
	printf("\n# 1 yaw\n# 2 pitch\n# 3 acc\n# 4 racc\n# 5 dacc\n# 6 gtrx\n# 7 gtry\n# 8 gtrz\n# 9 pprx\n# 10 ppry\n# 11 pprz\n# 12 gtdx\n# 13 gtdy\n# 14 gtdz\n# 15 ppdx\n# 16 ppdy\n# 17 ppdz\n# 18 altacc\n# 19 faceonness 20 maxang\n# 21 rightdiff\n# 22 rightang\n# 23 hvpcorr\n# 24 vvpcorr\n# 25 hvpdist\n# 26 vvpdist\n# 27 relhvpdist\n# 28 relvvpdist\n");
	printf("# 29 realrightangerr\n");
	printf("# 30 realdownangerr\n");
	printf("# 31 realrightangacc0-1\n");
	printf("# 32 realdownangacc0-1\n");
	printf("# 33,34,35 gtU gtV gtW\n");
	printf("# 36,37,38 ppU ppV ppW\n");
	printf("# 39,40,40 diffU diffV diffW\n");

	fprintf(stderr,"realrightangerrave = %f over %i\n",realrightangerrsum/(float)var769,var769);
	fprintf(stderr,"realdownangerrave = %f over %i\n",realdownangerrsum/(float)var770,var770);
	fprintf(stderr,"hvpreldistave = %f over %i\n",hvpreldistsum/(float)hvpreldistcnt,hvpreldistcnt);
	fprintf(stderr,"vvpreldistave = %f over %i\n",vvpreldistsum/(float)vvpreldistcnt,vvpreldistcnt);

}
Exemplo n.º 19
0
void main(int argc,String *argv) {
  
  ArgParser a=ArgParser(argc,argv);
//  float p=a.floatafter("-p","proportion",0.5);
//  int r=a.intafter("-r","radius",20);
  float rp=a.floatafter("-rp","window size proportional to width=sqrt(area of region)",0.5);
  int toosmall=a.intafter("-ts","a region area less than this is too small to make a decision",100);
  bool outputseperate=a.argexists("-all","output all regions seperately");
  int minimumarea=a.intafter("-min","discard incoming regions below this area",60*60);
  bool zoom=a.argexists("-zoom","change size of images");
  int zoomarea=a.intafter("-zoomarea","zoom all outputs to this area",256*128);
  flip=a.argexists("-f","flip region if mostly black");
  float usern=a.floatafter("-mod","modify threshold by scalar",1.0);
  String iname=a.getarg();
  String bname=a.argor("*NONE*");
  a.done();

  RGBmp orig=*RGBmp::readfile(iname);
//  Map2d<float> *map=Map2d<float>::readfile(iname);
  Map2d<float> *map=orig.getgreyscale();
  Map2d<bool> *bin=( Seq(bname,"*NONE*") ?
                     new Map2d<bool>(map->width,map->height,true) :
                     Map2d<bool>::readbinfile(bname)->binscaleto(map->width,map->height) );
	
  regmap=bin->getregionmap(true);
	regs=regmap.collectregions();
	for (int i=1;i<=regs.len;i++) {
	  Region *r=regs.p2num(i);
	  printf("Region size %i scans with window width %.1f\n",r->getlist()->len,rp*sqrt(r->getlist()->len));
	}

  // Create partial sums map
  printf("Creating partial sums\n");
  Map2d<float> *ps=new Map2d<float>(map->width,map->height);
  Map2d<int> *psa=new Map2d<int>(map->width,map->height);
  for (int y=0;y<ps->height;y++) {
  float psrow=0;
  int psrowa=0;
  for (int x=0;x<ps->width;x++) {
      if (bin->getpos(Pixel(x,y))) {
        psrow+=map->pos[x][y];
        psrowa++;
      }
    if (y==0) {
      ps->setpos(x,y,psrow);
      psa->setpos(x,y,psrowa);
    } else {
      ps->setpos(x,y,psrow+ps->getpos(x,y-1));
      psa->setpos(x,y,psrowa+psa->getpos(x,y-1));
    }
  }
  }

  Map2d<bool> *n=new Map2d<bool>(map->width,map->height,false);
  Map2d<float> *ratio=new Map2d<float>(map->width,map->height,0.0);

  // Threshold original
  printf("Thresholding\n");

  for (int i=1;i<=regs.len;i++) {
    Region reg=regs.num(i);
    List<Pixel> pixs=*reg.getlist();

    int left,right,top,bottom;
    left=reg.leftmost();
    right=reg.rightmost();
    top=reg.topmost();
    bottom=reg.bottommost();

    if ((right-left)*(bottom-top)>=minimumarea) {

      Map2d<bool> regimg;
      RGBmp cropimg;
      Pixel corner;
      if (outputseperate) {
        corner=Pixel(left,top);
        regimg=Map2d<bool>(right-left,bottom-top,false);
        cropimg=RGBmp(right-left,bottom-top);
        for (int x=0;x<cropimg.width;x++)
        for (int y=0;y<cropimg.height;y++)
          cropimg.setpos(x,y,orig.getpos(left+x,top+y));
      }

      int countblack=0;
      for (int j=1;j<=pixs.len;j++) {
        Pixel p=pixs.num(j);
        float r=rp*virtualwidth(p.x,p.y);
        float c=ps->getposclip(p.x+r/2,p.y+r/2)-ps->getposclip(p.x+r/2,p.y-r/2)-ps->getposclip(p.x-r/2,p.y+r/2)+ps->getposclip(p.x-r/2,p.y-r/2);
        int b=psa->getposclip(p.x+r/2,p.y+r/2)-psa->getposclip(p.x+r/2,p.y-r/2)-psa->getposclip(p.x-r/2,p.y+r/2)+psa->getposclip(p.x-r/2,p.y-r/2);
        c=c/(float)b; // c=Average
	c=c*usern;
        if (map->getpos(p)<c && b>=toosmall) {
          n->setpos(p,true);
          if (outputseperate)
            regimg.setpos(p-corner,true);
        } else {
          n->setpos(p,false);
          countblack++;
        }
        ratio->setpos(p,map->getpos(i,j)-c);
      }
      if (flip && countblack<0.5*pixs.len) {
        printf("Flipping region because more foreground than background!\n");
        for (int j=1;j<=pixs.len;j++) {
          Pixel p=pixs.num(j);
          float r=rp*virtualwidth(p.x,p.y);
          int b=psa->getposclip(p.x+r/2,p.y+r/2)-psa->getposclip(p.x+r/2,p.y-r/2)-psa->getposclip(p.x-r/2,p.y+r/2)+psa->getposclip(p.x-r/2,p.y-r/2);
          if (b>=toosmall) {
            n->setpos(p,!n->getpos(p));
            regimg.setpos(p-corner,!regimg.getpos(p-corner));
          }
          }
      }
      if (outputseperate) {
        int i=getnextfilenum();
        float scale=sqrt((float)zoomarea/(float)regimg.width/(float)regimg.height);
        regimg=regimg.binscaleby(scale);
        regimg.writefile(Sformat("reg%03i.bmp",i));
        // cropimg=*cropimg.scaledby(scale);
        cropimg.writefile(Sformat("crop%03i.bmp",i));
        regimg.freedom(); // yeah right!
        List<String> cropdata;
        cropdata.add(Sformat("%f",(float)left/(float)orig.width));
        cropdata.add(Sformat("%f",(float)right/(float)orig.width));
        cropdata.add(Sformat("%f",(float)top/(float)orig.height));
        cropdata.add(Sformat("%f",(float)bottom/(float)orig.height));
        writelinestofile(cropdata,Sformat("crop%03i.dat",i));
      }

    }
  }

  n->writefile("total.bmp");
  ratio->writefile("ratio.bmp");

}
Exemplo n.º 20
0
void main(int argc,String *argv) {

  randomise();
  
  ArgParser a=ArgParser(argc,argv);  
  String fname=a.argafter("-i","GF lines filename","ls.gf");
  cdclip=a.floatafter("-ed","Maximum end distance of lines",30);
  creepintoline=a.floatafter("-ic","Intersection can creep in this much of a the line",0.02);
  dotabove=a.floatafter("-pd","Parallelity: dot product must be above this",0.5);
  minlen=a.floatafter("-ml","Minimum length of a line",20);
  bool displaying=!a.argexists("nod","Don't display");
  String imname=a.argafter("-oi","Original image","none");
  oiscale=a.floatafter("-ois","Scale to original image",2);

  // Read list from file and find quads (looks easy!)
  List<QuadsLine2d> ls=readgfset(fname);
  helloworld();
  printf("Finding quads\n");
  jbmp.clear(0);
  for (int i=1;i<=ls.len;i++) {
    QuadsLine2d l=ls.num(i)*1.8;
    jbmp.line(l,255);
    //jbmp.thickline(l,1,255);
  }
  List<Polygon2d> qs=findquads(ls);
  jbmp.writefile("lines.bmp");
  
  // Simple quad map
  Map2d<bool> jb=Map2d<bool>(640,480,15);
  for (int i=1;i<=qs.len && !key[KEY_ESC];i++) {
    // jb.clear();
    Polygon2d p=qs.num(i);
    for (int j=1;j<=p.vs.len;j++) {
      jb.line(p.linefrom(j)*1.8,0);
    }
  }
  jb.writefile("quads.bmp");
  
  if (displaying) {
    jbmp.display();
    jb.display();
    allegroexit();
  }
  
  JFont coolfont=JFont("c:/joey/code/c/gfx2d/jfont/cool.jf",0.5);
  printf("fd...\n");

  if (!Seq(imname,"none")) {
    
    oi=RGBmp::readfile(imname);
    Map2d<float> *gs=oi->getgreyscale();
    
    // Edge detection
    printf("Doing edge detection\n");
    gs->edgedetection(Map2d<float>::sobel(),&mag,&angs);
    // angs->display();
    // exit(0);
    
    qs.applycall(&scalepoly);
    
    // Overlay quads on original
    RGBmp *rgbmp=oi->scaledby(0.5);
    for (int i=1;i<=qs.len && !key[KEY_ESC];i++) {
      Polygon2d p=qs.num(i);
      for (int j=1;j<=p.vs.len;j++) {
        rgbmp->thickline(0.5*p.linefrom(j),myRGB(0,0,0),3);
      }
    }
    for (int i=1;i<=qs.len && !key[KEY_ESC];i++) {
      Polygon2d p=qs.num(i);
      for (int j=1;j<=p.vs.len;j++) {
        rgbmp->line(0.5*p.linefrom(j),myRGB(0,255,255));
      }
    }
    rgbmp->writefile("overlay.bmp");

    RGBmp *detailed=new RGBmp(oi->width/2.0,oi->height/2.0,myRGB(255,255,255));//oi->scaledby(1);
    for (int i=1;i<=qs.len && !key[KEY_ESC];i++) {
      Polygon2d p=qs.num(i);
      for (int j=1;j<=p.vs.len;j++) {
        detailed->thickline(p.linefrom(j)*0.5,myRGB(0,0,0),1);
      }
      if (myrnd()<1.0/4.0) {
      V2d c=p.vs.num(intrnd(1,4));
      V2d t=c+V2d::random()*100;
      //detailed->line(c,t,myRGB(0,0,0));
      String data=Sformat("%.2f",scorefor(qs.p2num(i)));
      coolfont.centerString(data,detailed,t.x,t.y,8,myRGB(0,0,32));
      }
    }
    detailed->writefile("data.bmp");

    List<String> left;
    List<String> right;
    for (int i=1;i<=qs.len;i++) {
      Polygon2d *p=qs.p2num(i);
      String s=Sformat("%.3f",scorefor(p));
      if (p->centroid().x<oi->width/2.0)
        left.add(s);
      else
        right.add(s);
    }
    List<String> data;
    data.add("-- Left:");
    data.add(left);
    data.add("-- Right:");
    data.add(right);
    writelinestofile(data,"data.txt");

    /* printf("Ordering\n");
       qs=qs.qsort(&offness);
       printf("Done ordering.\n");*/
    
    printf("Removing overlapping quads (%i) ...\n",qs.len);
    // Check all containers first
    for (int i=1;i<=qs.len;i++) {
      Polygon2d *quad=qs.p2num(i);
      bool done=false;
      for (int j=1;j<=qs.len && !done;j++) { // Compare to all others (one-directional)
        printf("Comparing (%i/%i) to %i : ",i,qs.len,j);
        if (i!=j) {
          
          Polygon2d *oquad=qs.p2num(j);
          
          bool overlaps=quad->overlaps(oquad,0.99);
          if (overlaps==Polygon2d::container) { // quad envelops oquad
            if (scorefor(quad)>0.8*scorefor(oquad)) {
              qs.remnum(j);
              j--;
              if (i>j)
                i--;
              printf("Contained quad rejected");
            }
          }
          
        }

        printf("\n");
      }
    }
    // Then overlapping in general
    for (int i=1;i<=qs.len;i++) {
      Polygon2d *quad=qs.p2num(i);
      bool done=false;
      for (int j=i+1;j<=qs.len && !done;j++) { // bi-derectional
        printf("Comparing (%i/%i) to %i : ",i,qs.len,j);
        Polygon2d *oquad=qs.p2num(j);
        
        bool overlaps=quad->overlaps(oquad);
        if (overlaps) {
          if (scorefor(quad)>scorefor(oquad)) {
            qs.remnum(j);
            j--;
            printf("Second quad rejected");
          } else {
            qs.remnum(i);
            i--;
            done=true;
            printf("First quad rejected");
          }
        }
        
        printf("\n");
      }
    }
    printf("Done: now (%i) quads.\n",qs.len);
    
    // Overlay again
    RGBmp *rgbmp2=oi->scaledby(0.5);
    for (int i=1;i<=qs.len && !key[KEY_ESC];i++) {
      Polygon2d p=qs.num(i);
      for (int j=1;j<=p.vs.len;j++) {
        rgbmp2->thickline(0.5*p.linefrom(j),myRGB(0,0,0),3);
      }
    }
    for (int i=1;i<=qs.len && !key[KEY_ESC];i++) {
      Polygon2d p=qs.num(i);
      for (int j=1;j<=p.vs.len;j++) {
        rgbmp2->line(0.5*p.linefrom(j),myRGB(0,255,255));
      }
      V2d t=0.5*p.centroid();
      // rgbmp2->line(oiscale*p.num(1),t,V3d(1,0,0));
      String data=Sformat("%.3f",scorefor(qs.p2num(i)));
      //coolfont.centerString(data,rgbmp2,t.x,t.y,9,myRGB(255,0,0));
    }
    rgbmp2->writefile("overlay2.bmp");
    
    // Recover text
    List<RGBmp *> rec;
    // oi->display();
    for (int i=1;i<=qs.len && i<=5;i++) {
      List<V2d> *l=&qs.num(i).vs;
      RGBmp *n=oi->recoverquad(l,1);
      n->writefile(getnextfilename("recquad","bmp"));
      rec.add(n);
    }
    
    if (displaying) {
      waitforkeypress();
      jbmp.display();
      jb.display();
      for (int i=1;i<=rec.len && !key[KEY_ESC];i++)
      rec.num(i)->display();
    }

    data.add("-- Final quads:");
    for (int i=1;i<=qs.len;i++) {
      Polygon2d *p=qs.p2num(i);
      String s=Sformat("%.3f",scorefor(p));
      data.add(s);
    }
    writelinestofile(data,"data.txt");
  
  }

  allegroexit();
  printf("%i quadrilaterals found\n",qs.len);
  
}
Exemplo n.º 21
0
void expect(String a,String b) {
  if (!Seq(a,b))
    error("Got %s expected %s",b,a);
}
Exemplo n.º 22
0
  bool JFont::fcalled(FontChar *f,String s) {
   return Seq(f->name,s);
 }
Exemplo n.º 23
0
List<FontChar> parsefontchars(String fname,float fwgiven) {
  // We parse from
  List<String> lines=readlinesfromfile(fname);
  // into
  List<FontChar> fcs=List<FontChar>();
  float fw=tofloat(lines.num(1));
  if (fwgiven>0)
    fw=fwgiven;
  for(int i=2;i<=lines.len;i++) {
    String current=lines.num(i);
    StringParser s=StringParser(current);
    if (s.someleft() && !Seq("//",Sleft(current,2))) {
    String character=s.getbefore(":");
    FontChar fc=FontChar(character);
    while (s.someleft()) {
      char whatisit=s.getachar();
      if (whatisit=='L') {
        String type=s.getanyof("HVRL");
        float xa=tofloat(s.getbefore(","));
        float ya=tofloat(s.getbefore("_"));
        bool keepgoing=true;
        while (keepgoing) {
          float xb=tofloat(s.getbefore(","));
          float yb=s.getfloat();
//          printf("new line %f %f %f %f\n",xa,ya,xb,yb);
          fc.bs.add(new FLine(xa,-ya,xb,-yb,fw,type));
          xa=xb; ya=yb;
          // printf("one line added\n");
          // printf("From %s we pick off ",s.current);
          char c=s.getachar();
          // printf("%c, to get %s\n",c,s.current);
          if (c==';')
            keepgoing=false;
          else
          if (c!='_')
            s.error(Sformat("Expected _, got %c",c));
        };
      }
      if (whatisit=='C') {
        String type=s.getanyof("TBLRNESWXOr");
        bool anti=Sdoremove(type,"X");
        bool rounded=Sdoremove(type,"r");
        float x=tofloat(s.getbefore(","));
        float y=tofloat(s.getbefore(","));
//        String next=( Seq(type,"O") ? "," : ";" );
        String next;
        if (Seq(type,"O"))
          next=",";
        else
          next=";";
        float r=tofloat(s.getbefore(next));
//        printf("Arc rad %f ",r);
        FArc *fa=new FArc(x,y,r,fw,rounded);
        if (Slen(type)==0) {
          fa->aa=0;
          fa->ab=2*pi;
        }
        if (Seq(type,"O")) {
          fa->aa=tofloat(s.getbefore(","))*2*pi/8.0;
          fa->ab=tofloat(s.getbefore(";"))*2*pi/8.0;
        }
        if (Seq(type,"T")) {
          fa->aa=-pi/2.0;
          fa->ab=pi/2.0;
        }
        if (Seq(type,"B")) {
          fa->aa=pi/2.0;
          fa->ab=2*pi-pi/2.0;
        }
        if (Seq(type,"L")) {
          fa->aa=-pi;
          fa->ab=0;
        }
        if (Seq(type,"R")) {
          fa->aa=0;
          fa->ab=pi;
        }
        if (Seq(type,"NW")) {
          fa->aa=-pi/2.0;
          fa->ab=0;
        }
        if (Seq(type,"NE")) {
          fa->aa=0;
          fa->ab=pi/2.0;
        }
        if (Seq(type,"SE")) {
          fa->aa=pi/2.0;
          fa->ab=pi;
        }
        if (Seq(type,"SW")) {
          fa->aa=-pi;
          fa->ab=-pi/2.0;
        }
        if (anti)
          swap(&fa->aa,&fa->ab);
        /*if (Seq(type,"XSE")) {
          fa->aa=-pi;
          fa->ab=pi/2.0;
        }
        if (Seq(type,"XNW")) {
          fa->aa=0;
          fa->ab=2*pi-pi/2.0;
        }*/
        fc.bs.add(fa);
      }
      if (whatisit=='+') {
        String search=s.getbefore(";");
        int find=0;
        for (int j=1;j<=fcs.len && find==0;j++) {
          if (Seq(search,fcs.p2num(j)->name))
            find=j;
        }
        if (find==0)
          error("You haven't defined character %s before %s",search,character);
        fc.bs.add(fcs.p2num(find)->bs);
        // default:
        // printf("What kind of FontBit is a %s?",toString(whatisit));
      }
    };
    fcs.add(fc);
//    printf("%s (%i) ... ",fc.name,fc.bs.len);
    }
  }
  printf("Parsed %s\n",fname);
  lines.freedom();
  return fcs;
}
        const std::array<AutomatedScreenshotController::SceneSetupFunction, AutomatedScreenshotController::NumScenes> AutomatedScreenshotController::States() const
        {
            return {{
                [this]() {
                    const PlaceJumps::View::PlaceJumpModel London(
                            "London",
                            Eegeo::Space::LatLong::FromDegrees(51.512179, -0.080664),
                            162.2f,
                            1780.1f,
                            "");

                    m_placeJumpController.JumpTo(London);
                    m_weatherController.SetTime("Day");
                    m_weatherController.SetTheme("Summer");

                    return WaitMs(8000);
                },

                [this]() {
                    const long long WaitMsForInteriorToLoad = 4000;
                    const long long MsToWaitForCameraToEnterInterior = 3000;
                    const Eegeo::Resources::Interiors::InteriorId WestportHouseInteriorId("westport_house");
                    const Eegeo::Space::LatLong location(Eegeo::Space::LatLong::FromDegrees(56.460108, -2.978094));
                    const float distanceFromInterest = 200.f;
                    const PlaceJumps::View::PlaceJumpModel WestportHouse(
                            "WestportHouse",
                            location,
                            312.8f,
                            distanceFromInterest,
                            "");

                    m_placeJumpController.JumpTo(WestportHouse);

                    return Seq(WaitMs(WaitMsForInteriorToLoad),
                               Act([=]() { m_interiorSelectionModel.SelectInteriorId(WestportHouseInteriorId); }),
                               WaitMs(MsToWaitForCameraToEnterInterior),
                               Act([=]() {
                                   m_cameraTransitionService.StartTransitionTo(location.ToECEF(), distanceFromInterest, WestportHouseInteriorId, 2, true);
                               }),
                               WaitForCameraTransition(&m_cameraTransitionService),
                               Act([=]() {
                                   m_searchQueryPerformer.PerformSearchQuery("General", true, true);
                               }),
                               WaitMs(8000),
                               Act([=]() {
                                   m_searchQueryPerformer.RequestClear();
                                   m_searchQueryPerformer.RemoveSearchQueryResults();
                               })
                    );
                },

                [this]() {
                    return IsLandscapeLayout(m_screenProperties)
                            ? TabletVASceneSetup(true)
                            : PhoneNYCSceneSetup(true);
                },

                [this]() {
                    return IsLandscapeLayout(m_screenProperties)
                           ? TabletVASceneSetup(false)
                           : PhoneNYCSceneSetup(false);
                },
                
                [this]() {
                    return IsLandscapeLayout(m_screenProperties)
                           ? SelectedPinSceneSetup("Victoria and Albert Museum", 2)
                           : SelectedPinSceneSetup("Empire State Building", 0);
                },

                [this]() {
                    static const std::string LightThemesManifestUrlDefault  = "https://cdn-resources.wrld3d.com/mobile-themes-new/v883/ambientwhite/manifest.bin.gz";
                    const long long MsToWaitForSearchQueryToClear = 3000;
                    const long long MsToWaitForThemeToLoad = 3000;
                    const PlaceJumps::View::PlaceJumpModel SanFran(
                            "SanFran",
                            Eegeo::Space::LatLong::FromDegrees(37.742448, -122.446477),
                            27.2f,
                            1914.3f,
                            "");
                    
                    m_messageBus.Publish(ClosePoiMessage());
                    m_messageBus.Publish(SearchMenu::OpenSearchMenuMessage(false));
                    m_placeJumpController.JumpTo(SanFran);
                    m_cityThemeLoader.LoadThemes(LightThemesManifestUrlDefault, "Summer", "DayDefault");

                    return Seq(WaitMs(MsToWaitForSearchQueryToClear),
                               Act([=]() {
                        m_searchQueryPerformer.RemoveSearchQueryResults(); }),
                               WaitForStreaming(&m_cityThemeLoader),
                               WaitMs(MsToWaitForThemeToLoad));
                },

                [this]() {
                    static const std::string SciFiThemesManifestUrlDefault = "https://cdn-resources.wrld3d.com/mobile-themes-new/v883/scifi/manifest.bin.gz";
                    const long long MsToWaitForSearchResultsToClearAndThemeToLoad = 3000;
                    const PlaceJumps::View::PlaceJumpModel LA(
                            "LA",
                            Eegeo::Space::LatLong::FromDegrees(34.051624, -118.254724),
                            187.6f,
                            1885.8f,
                            "");

                    m_placeJumpController.JumpTo(LA);
                    m_searchQueryPerformer.RemoveSearchQueryResults();
                    m_cityThemeLoader.LoadThemes(SciFiThemesManifestUrlDefault, "Summer", "DayDefault");

                    return Seq(WaitForStreaming(&m_cityThemeLoader),
                               WaitMs(MsToWaitForSearchResultsToClearAndThemeToLoad));
                }
            }};
        }
Exemplo n.º 25
0
 bool JFont::fsamename(FontChar f,FontChar o) {
   return Seq(f.name,o.name);
 }
Exemplo n.º 26
0
void Load::open(const File & in, Image_Io_Info & info) throw (Error)
{
    //DJV_DEBUG("Load::open");
    //DJV_DEBUG_PRINT("in = " << in);

    _close();

    // Open the file.

    CFStringRef cf_string_ref(File_Util::path_absolute(in));

    qt::QTNewMoviePropertyElement prop_list [10];
    qt::ItemCount prop_size = 0;

    prop_list[prop_size].propClass = qt::kQTPropertyClass_DataLocation;
    prop_list[prop_size].propID =
        qt::kQTDataLocationPropertyID_CFStringNativePath;
    //qt::kQTDataLocationPropertyID_CFStringPosixPath;
    prop_list[prop_size].propValueSize = sizeof(cf_string_ref.p);
    prop_list[prop_size].propValueAddress = (void *)&cf_string_ref.p;
    prop_list[prop_size].propStatus = 0;
    ++prop_size;

    qt::Boolean unresolved = true;
    prop_list[prop_size].propClass = qt::kQTPropertyClass_MovieInstantiation;
    prop_list[prop_size].propID =
        qt::kQTMovieInstantiationPropertyID_DontAskUnresolvedDataRefs;
    prop_list[prop_size].propValueSize = sizeof(unresolved);
    prop_list[prop_size].propValueAddress = &unresolved;
    prop_list[prop_size].propStatus = 0;
    ++prop_size;

    qt::Boolean active = true;
    prop_list[prop_size].propClass = qt::kQTPropertyClass_NewMovieProperty;
    prop_list[prop_size].propID = qt::kQTNewMoviePropertyID_Active;
    prop_list[prop_size].propValueSize = sizeof(active);
    prop_list[prop_size].propValueAddress = &active;
    prop_list[prop_size].propStatus = 0;
    ++prop_size;

    qt::Boolean no_interact = true;
    prop_list[prop_size].propClass = qt::kQTPropertyClass_NewMovieProperty;
    prop_list[prop_size].propID =
        qt::kQTNewMoviePropertyID_DontInteractWithUser;
    prop_list[prop_size].propValueSize = sizeof(no_interact);
    prop_list[prop_size].propValueAddress = &no_interact;
    prop_list[prop_size].propStatus = 0;
    ++prop_size;

    qt::QTVisualContextRef visual = 0;
    prop_list[prop_size].propClass = qt::kQTPropertyClass_Context;
    prop_list[prop_size].propID = qt::kQTContextPropertyID_VisualContext;
    prop_list[prop_size].propValueSize = sizeof(qt::QTVisualContextRef);
    prop_list[prop_size].propValueAddress = &visual;
    prop_list[prop_size].propStatus = 0;
    ++prop_size;

    qt::QTAudioContextRef audio = 0;
    prop_list[prop_size].propClass = qt::kQTPropertyClass_Context;
    prop_list[prop_size].propID = qt::kQTContextPropertyID_AudioContext;
    prop_list[prop_size].propValueSize = sizeof(qt::QTAudioContextRef);
    prop_list[prop_size].propValueAddress = &audio;
    prop_list[prop_size].propStatus = 0;
    ++prop_size;

    qt::OSErr err = qt::NewMovieFromProperties(
        prop_size,
        prop_list,
        0,
        0,
        &_movie);

    if (err != qt::noErr)
    {
        throw_error(name(), String_Format(error_open).arg(in).arg(err));
    }

    // Get the file information.

    _info.file_name = in;

    qt::Rect rect;
    qt::GetMovieBox(_movie, &rect);
    _info.size = V2i(rect.right - rect.left, rect.bottom - rect.top);
    _info.mirror.y = true;
    _info.pixel = Pixel::RGBA_U8;
    //_info.bgr = true;

    const qt::TimeScale time_scale = qt::GetMovieTimeScale(_movie);
    const qt::TimeValue time_duration = qt::GetMovieDuration(_movie);
    //const long frame_count = _frame_count(_movie);
    const qt::TimeValue frame_duration = _frame_duration(_movie);
    //const TimeValue frame_duration = time_duration / frame_count;
    _start_frame = _options.start_frame;

    //DJV_DEBUG_PRINT("time scale = " << static_cast<int>(time_scale));
    //DJV_DEBUG_PRINT("time duration = " << static_cast<int>(time_duration));
    //DJV_DEBUG_PRINT("frame count = " << static_cast<int>(frame_count));
    //DJV_DEBUG_PRINT("frame duration = " << static_cast<int>(frame_duration));
    //DJV_DEBUG_PRINT("start frame = " << _start_frame);

    _info.seq = Seq(
        _start_frame,
        frame_duration ?
        (_start_frame + (time_duration / frame_duration - 1)) :
        _start_frame,
        0,
        Speed(time_scale, frame_duration));

    //DJV_DEBUG_PRINT("time = " << _info.seq);

    info = _info;
    
    //! Allocate the temporary buffer.
    
    _tmp.set(_info);

    //! \todo Is this still necessary?

    unsigned long qt_format =
#   if defined(DJV_OSX)
        qt::k32ARGBPixelFormat;
#   else
        qt::k32RGBAPixelFormat;
#   endif

    err = qt::NewGWorldFromPtr(
        &_gworld,
        qt_format,
        &rect,
        0,
        0,
        0,
        (char *)_tmp.data(0, 0),
        _info.size.x * 4);

    if (err != qt::noErr)
    {
        throw_error(name(), String_Format(error_gworld).arg(in).arg(err));
    }

    qt::SetMovieGWorld(_movie, _gworld, 0);
}
Exemplo n.º 27
0
void main(int argc,String *argv) {
  
  String batname=Sconc(JPATH(),"/tmp/forall.bat");

  ArgParser a=ArgParser(argc,argv);
//    a.comment("Syntax: forall <files> do <command>\n");
//    a.comment("    or: forall in <filename> do <command>\n");
    a.comment("  <command> may use %f as the filename,");
    a.comment("    %s as the filename stripped of extensions,");
    a.comment("    %e as the filename's extension,");
    a.comment("    %l as %f in lower case,");
    a.comment("    %L as %w in lower case,");
    a.comment("    %w as the whole path of the filename,");
    a.comment("    %n as the number of the file being processed,");
    a.comment("    %a as & , %p as > , %q as \" ,");
    a.comment("    and : to seperate commands.");
    #ifdef DOS
      a.comment("    For DOS, use $ instead of %");
    #endif
  bool dirsonly=a.argexists("-dirsonly","execute command on directories only");
  bool filesonly=a.argexists("-filesonly","execute command on non-directories only");
  bool linkeddirsok=a.argexists("-followdirs","follow sym linked directories");
  bool linkedfilesok=!a.argexists("-nofollowfiles","don't follow sym linked files");
  bool showprogress=a.argexists("-showprog","show progress");
  bool shell=a.argexists("-shell","run commands through a shell file");
  a.comment("    A forall command in shell mode is not the same in non-shell mode");
  a.comment("    since in the shell program the state will persist between each file.");
  bool ccomments =!a.argexists("-//","[in]: ignore // commenting");
  bool shcomments=!a.argexists("-#"," [in]: ignore # commenting");
  quiet=a.argexists("-stealth","don't print stuff");
  int padzeros=a.intafter("-padzeros","pad %n with this many 0s on left",3);
  String padzeroformat=Sformat("%s0%ii","%",padzeros);
  bool checkforfilename=false;
  if (argc<3 || a.helpon) {
    a.com="forall <files> do <command>   OR\nforall in <filename> do <command>";
    a.helpon=true;
    a.done();
    exit(0);
  }

  // Read files until do
  if (showprogress)
    printf("Files: ");
  List<String> fs;
  if (!Seq(a.arg(1),"in")) { // Files provided as arguments
    String s="";
    while (!Seq(s,"do") && a.argsleft()) {
      s=a.getarg(1);
      if (!Seq(s,"do")) {
        if (showprogress)
          printf("%s ",s);
        boolean okay=true;
//        if (checkforfilename)
//          fs.add(getfiles(s));
//        else
/*        if (!fileexists(s)) {
          if (!quiet)
            printf("Didn't find file %s\n",s);
          okay=false;
        }*/
        if (isdir(s)) {
          if (filesonly)
            okay=false;
          if (islink(s) && !linkeddirsok)
            okay=false;
        } else { // not dir => file
          if (dirsonly)
            okay=false;
          if (islink(s) && !linkedfilesok)
            okay=false;
        }
        if ( (dirsonly || filesonly) &&
             !fileexists(s) )
          okay=false;
        if ((Sinstr(s,"*")>0) || (Sinstr(s,"?")>0)) { // Unresolved wildcard
          okay=false;
          if (!quiet)
            printf("forall: Did not find any \"%s\"\n",s);
        }
        if (Slen(s)==0)
          okay=false;
        if (okay)
          fs.add(s);
      }
    }
  } else { // Points to file containing list of files for forall
    String tmp=a.getarg(1);
    String fname=a.getarg(1);
    tmp=a.getarg(1);
    if (!Seq(tmp,"do"))
      error("Expected do in forall in <fname> do ...");
    fs.add(readlinesfromfile(fname));
    for (int i=1;i<=fs.len;i++) {
      String s=fs.num(i);
      if ( Slen(s)==0
        || (dirsonly && !isdir(s))
        || (filesonly && isdir(s))
        || (ccomments && Sstarts(s,"//"))
        || (shcomments && Sstarts(s,"#")) ) {
        fs.removenumkeeporder(i);
        i--;
      }
    }
    if (showprogress)
      printf("%s ",fs.num(fs.len));
  }
  if (showprogress)
    printf("\n");

  // Read command after do
  if (showprogress)
    printf("Command: ");
  a.com=Sconc(a.com,"do <command> ");
  List<String> ls;
  while (a.argsleft()) {
    ls.add(Ssplitaround(a.getarg(1)," "));
    if (showprogress)
      printf("\"%s\" ",ls.num(ls.len));
  }
  if (showprogress)
    printf("\n");
  if (ls.len==0)
    a.error("You must provide <command>");
  a.done();
  
  FILE *progress=NULL;
  progress=fopen("forall.progress","w");
  List<String> coms;
  for (int i=1;i<=fs.len;i++) {
    String whole=fs.num(i);
    if (Slen(whole)>0) {
      String fname;
      int n=max(Sinstrlast(whole,"/"),Sinstrlast(whole,"\\"));
      if (n==0)
        fname=whole;
      else
        fname=Sfrom(whole,n+1);
      String strlow=Stolower(fname);
      String wholelow=Stolower(whole);
      /* Remove all '.'s
      int k;
      while ((k=Sinstr(str,"."))>0) {
        str=Sleft(str,k-1);
      } */
      int k=Sinstrlast(fname,".");
      String str=( k<=0 ? fname : Sleft(fname,k-1) );
      String ext=( k<=0 ? Snew("") : Sfrom(fname,k+1) );
      // List<String> coms;
      if (!shell)
        coms.clear();
      String com="";
      for (int j=1;j<=ls.len;j++) {
        String arg=ls.num(j);
  //      if (showprogress)
  //        printf("%s -> ",arg);
        #ifdef DOS
        arg=Sreplaceall(arg,"$n",Sformat(padzeroformat,i));
        arg=Sreplaceall(arg,"$a","&");
        arg=Sreplaceall(arg,"$f",fname);
        arg=Sreplaceall(arg,"$w",whole);
        arg=Sreplaceall(arg,"$s",str);
        arg=Sreplaceall(arg,"$e",ext);
        arg=Sreplaceall(arg,"$l",strlow);
        arg=Sreplaceall(arg,"$L",wholelow);
        arg=Sreplaceall(arg,"$p",">");
        arg=Sreplaceall(arg,"$q","\"");
        #else
        arg=Sreplaceall(arg,"\%n",Sformat(padzeroformat,i));
        arg=Sreplaceall(arg,"\%a","&");
        arg=Sreplaceall(arg,"\%f",fname);
        arg=Sreplaceall(arg,"\%w",whole);
        arg=Sreplaceall(arg,"\%s",str);
        arg=Sreplaceall(arg,"\%e",ext);
        arg=Sreplaceall(arg,"\%l",strlow);
        arg=Sreplaceall(arg,"\%L",wholelow);
        arg=Sreplaceall(arg,"\%p",">");
        arg=Sreplaceall(arg,"\%q","\"");
        #endif
  //      if (showprogress)
  //        printf("%s -> ",arg);
        if (Seq(arg,":")) {
          com=Srls(com);
          if (!quiet) {
            // printf("# (%03i/%i) %s\n",i,fs.len,com);
            String output=Sformat("# (%03i/%i) %s",i,fs.len,com);
            if (shell) // Print it later when the shell is being executed
              coms.add(Sconc("echo \"",Stoechoformat(output),"\""));
            else
              printf("%s\n",output);
          }
          if (shell)
            coms.add(com);
          else
            system(com);
          com="";
        } else
          com=Sconc(com," ",arg);
  /*      if (showprogress) {
          printf("%s\n>",com);
          for (int k=1;k<=ls.len;k++)
            printf("%s ",ls.num(k));
          printf("\n");
        }*/
      }
      com=Srls(com);
          if (!quiet) {
            String output=Sformat("# (%03i/%i) %s",i,fs.len,com);
            if (shell) // Print it later when the shell is being executed
              coms.add(Sconc("echo \"",Stoechoformat(output),"\""));
            else
              printf("%s\n",output);
          }
      if (progress!=NULL)
        fprintf(progress,"-%03i/%i- %s\n",i,fs.len,com);
      if (shell)
        coms.add(com);
      else
        system(com);
    }
  }
Exemplo n.º 28
0
void main(int argc,String *argv) {

    randomise();

    ArgParser a=ArgParser(argc,argv);
    String fname=a.argafter("-i","GF lines filename","ls.gf");
    cdclip=a.floatafter("-ed","Maximum end distance of lines",30);
    creepintoline=a.floatafter("-ic","Intersection can creep in this much of the line",0.02);
    dotabove=a.floatafter("-pd","Parallelity: dot product must be above this",0.5);
    minlen=a.floatafter("-ml","Minimum length of a line",20);
    bool displaying=!a.argexists("nod","Don't display");
    String imname=a.argafter("-oi","Original image","none");
    oiscale=a.floatafter("-ois","Scale to original image",2);
    bool overlaylines=a.argexists("-ol","Overlay lines");
    int imwidth=a.intafter("-rqw","width of recovered quad images (pixels)",200);
//  float favourlarge=a.floatafter("-fl","Favour large by",0.8); // old method
    float favourlarge=a.floatafter("-fl","Favour large by",1.2);
    dividebyarea=!a.argexists("-dd","Don't divide V by area");
    oldmethod=a.argexists("-osm","Old stats method (area not sum mags, score reciprocal not -ve)");
    a.done();

    // Specific to my images
    printf("Auto scale? ");
    String tmp=imname;
    if (Sinstrlast(tmp,"/"))
        tmp=Sfrom(tmp,Sinstrlast(tmp,"/")+1);
    if (Sstarts(tmp,"image")) {
        printf("2.5");
        oiscale=2.5;
    }
    if (Sstarts(tmp,"img") || Slen(Sbefore(tmp,"."))==2) {
        printf("2.0");
        oiscale=2.0;
    }
    printf("\n");

    // Read list from file and find quads (looks easy!)
    List<QuadsLine2d> ls=readgfset(fname);
    helloworld();
    printf("Finding quads\n");
    List<Polygon2d> qs=findquads(ls);

    printf("df...");
    JFont coolfont=JFont(0.5);
    printf("fd...\n");

    if (!Seq(imname,"none")) {

        printf("Trying to read original file (%s)...",imname);
        oi=RGBmp::readfile(imname);
        Map2d<float> *gs=oi->getgreyscale();

        jbmp=JBmp(oi->width*0.5,oi->height*0.5);
        jbmp.clear(255);
        for (int i=1; i<=ls.len; i++) {
            QuadsLine2d l=ls.num(i)*oiscale*0.5;
            jbmp.line(l,0);
            //jbmp.thickline(l,1,255);
        }
        jbmp.writefile("lines.bmp");

        // Simple quad map
        Map2d<bool> jb=Map2d<bool>(oi->width*0.5,oi->height*0.5,255);
        for (int i=1; i<=qs.len; i++) {
            // jb.clear();
            Polygon2d p=qs.num(i);
            for (int j=1; j<=p.vs.len; j++) {
                jb.line(p.linefrom(j)*0.5*oiscale,0);
            }
        }
        jb.writefile("quads.bmp");

        // Edge detection
        printf("Doing edge detection\n");
        gs->edgedetection(Map2d<float>::sobel(),&mag,&angs);
        // angs->display();
        // exit(0);

        qs.applycall(&scalepoly); // No need for oiscale after this point

        for (int i=1; i<=qs.len; i++) {
            Polygon2d *quad=qs.p2num(i);
            quad->name=Schr(Sasc("A")+(i-1)%26);
        }

        // Overlay lines on original
        if (overlaylines) {
            RGBmp *linesover=oi->scaledby(0.5);
            for (int i=1; i<=ls.len; i++)
                linesover->thickline(0.5*oiscale*ls.num(i),myRGB(0,0,0),4);
            for (int i=1; i<=ls.len; i++)
                linesover->line(0.5*oiscale*ls.num(i),myRGB(255,255,255));
            linesover->writefile("linesover.bmp");
        }

        // Overlay quads on original
        RGBmp *rgbmp=oi->scaledby(0.5);
        for (int i=1; i<=qs.len; i++) {
            Polygon2d p=qs.num(i);
            for (int j=1; j<=p.vs.len; j++) {
                rgbmp->thickline(0.5*p.linefrom(j),myRGB(0,0,0),4);
            }
        }
        for (int i=1; i<=qs.len; i++) {
            Polygon2d p=qs.num(i);
            for (int j=1; j<=p.vs.len; j++) {
                rgbmp->line(0.5*p.linefrom(j),myRGB(255,255,255));
            }
        }
        rgbmp->writefile("overlay.bmp");

        RGBmp *detailed=new RGBmp(oi->width/2.0,oi->height/2.0,myRGB(255,255,255));//oi->scaledby(1);
        for (int i=1; i<=qs.len; i++) {
            Polygon2d p=qs.num(i);
            for (int j=1; j<=p.vs.len; j++) {
                detailed->line(p.linefrom(j)*0.5,myRGB(0,0,0));
            }
//      V2d t=(p.vs.num(1)+p.vs.num(2)+p.vs.num(3)+p.vs.num(4))/4.0/2.0+V2d::random()*100/2.0;
            V2d t=V2d(myrnd()*detailed->width,myrnd()*detailed->height);
            for (int k=1; k<=4; k++) {
                V2d c=p.vs.num(k)/2.0;
                detailed->line(c,t,myRGB(0,0,0));
            }
            String data=Sformat("%s",p.name);
            coolfont.centerString(data,detailed,t.x,t.y,8,myRGB(0,0,0));
        }
        detailed->writefile("data.bmp");

        List<String> left;
        List<String> right;
        for (int i=1; i<=qs.len; i++) {
            Polygon2d *p=qs.p2num(i);
            String s=Sformat("%s score %.3f, area %.3f",p->name,scorefor(p),p->area());
            if (p->centroid().x<oi->width/2.0)
                left.add(s);
            else
                right.add(s);
        }
        List<String> data;
//    data.add(Sformat("GF %s td=%.2f ti=%.2d tp=%.2f minlen=%.2f Image %s scale=%.2f  widthofrecquad=%.2f favourlarge=%.2f",fname,cdclip,creepintoline,dotabove,minlen,imname,oiscale,favourlarge));
        String tmp="";
        if (dividebyarea)
            tmp=Sconc(tmp,"Dividing V by area.  ");
        data.add(tmp);
        data.add("");
        data.add("-- Left:");
        data.add(left);
        data.add("-- Right:");
        data.add(right);
        writelinestofile(data,"data.txt");

        /* printf("Ordering\n");
           qs=qs.qsort(&offness);
           printf("Done ordering.\n");*/

        printf("Removing overlapping quads (%i) ...\n",qs.len);
        data.add("-- Rejection:");
        // Check all containers first
        for (int i=1; i<=qs.len; i++) {
            Polygon2d *quad=qs.p2num(i);
            bool done=false;
            for (int j=1; j<=qs.len && !done; j++) { // Compare to all others (one-directional)
                printf("Comparing (%i/%i) to %i : ",i,qs.len,j);
                if (i!=j) {

                    Polygon2d *oquad=qs.p2num(j);
                    data.add(Sformat("Comparing %s to %s %i %i",quad->name,oquad->name,i,j));

                    bool overlaps=quad->overlaps(oquad,0.99);
                    if (overlaps==Polygon2d::container) { // quad envelops oquad
                        if (scorefor(quad)>0.8*scorefor(oquad)) {
                            //          data.add(ql(&qs));
                            data.add(Sformat("%s contained %s and rejected it",quad->name,oquad->name));
                            qs.remnum(j);
                            j--;
                            if (i>j) {
                                i--;
                                done=true;
                            }
                            printf("Contained quad rejected");
                            //        data.add(ql(&qs));
                        }
                    }

                }

                printf("\n");
            }
        }
        // Then overlapping in general
        for (int i=1; i<=qs.len; i++) {
            Polygon2d *quad=qs.p2num(i);
            bool done=false;
            for (int j=i+1; j<=qs.len && !done; j++) { // bi-derectional
                printf("Comparing (%i/%i) to %i : ",i,qs.len,j);
                Polygon2d *oquad=qs.p2num(j);

                bool overlaps=quad->overlaps(oquad);
                if (overlaps) {
                    if (scorefor(quad)>scorefor(oquad)) {
                        //      data.add(ql(&qs));
                        data.add(Sformat("%s beat %s.",quad->name,oquad->name));
                        qs.remnum(j);
                        j--;
                        printf("Second quad rejected");
                        //    data.add(ql(&qs));
                    } else {
                        //  data.add(ql(&qs));
                        data.add(Sformat("%s beat %s,",oquad->name,quad->name));
                        qs.remnum(i);
                        i--;
                        done=true;
                        printf("First quad rejected");
                        //data.add(ql(&qs));
                    }
                }

                printf("\n");
            }
        }
        printf("Done: now (%i) quads.\n",qs.len);

        // Overlay again
        RGBmp *rgbmp2=oi->scaledby(0.5);
        for (int i=1; i<=qs.len; i++) {
            Polygon2d p=qs.num(i);
            for (int j=1; j<=p.vs.len; j++) {
                rgbmp2->thickline(0.5*p.linefrom(j),myRGB(0,0,0),4);
            }
        }
        for (int i=1; i<=qs.len; i++) {
            Polygon2d p=qs.num(i);
            for (int j=1; j<=p.vs.len; j++) {
                rgbmp2->line(0.5*p.linefrom(j),myRGB(255,255,255));
            }
            V2d t=0.5*p.centroid();
            // rgbmp2->line(oiscale*p.num(1),t,V3d(1,0,0));
            String data=Sformat("%.3f",scorefor(qs.p2num(i)));
            //coolfont.centerString(data,rgbmp2,t.x,t.y,9,myRGB(255,0,0));
        }
        rgbmp2->writefile("overlay2.bmp");

        // Simple quad map again
        Map2d<bool> jbq=Map2d<bool>(oi->width*0.5,oi->height*0.5,255);
        for (int i=1; i<=qs.len; i++) {
            // jb.clear();
            Polygon2d p=qs.num(i);
            for (int j=1; j<=p.vs.len; j++) {
                jbq.line(p.linefrom(j)*0.5,0);
            }
        }
        jbq.writefile("quads2.bmp");

        // Recover text
        List<RGBmp *> rec;
        // oi->display();
        for (int i=1; i<=qs.len && i<=5; i++) {
            List<V2d> *l=&qs.num(i).vs;
            RGBmp *n=oi->recoverquad(l,1,imwidth);
            n->writefile(getnextfilename("recquad","bmp"));
            rec.add(n);
        }

        if (displaying) {
//      waitforkeypress();
            jbmp.display();
            jb.display();
            for (int i=1; i<=rec.len; i++)
                rec.num(i)->display();
        }

        data.add("-- Final quads:");
        for (int i=1; i<=qs.len; i++) {
            Polygon2d *p=qs.p2num(i);
            String s=Sformat("%s %.3f",p->name,scorefor(p));
            data.add(s);
        }
        writelinestofile(data,"data.txt");

    }

//  allegroexit();
    printf("%i quadrilaterals found\n",qs.len);

}
Exemplo n.º 29
0
void main(int argc,String *argv) {
  
  ArgParser a=ArgParser(argc,argv);  
  String fname=a.argafter("-i","GF lines filename","ls.gf");
  cdclip=a.floatafter("-ed","Maximum end distance of lines",30);
  creepintoline=a.floatafter("-ic","Intersection can creep in this much of a the line",0.02);
  dotabove=a.floatafter("-pd","Parallelity: dot product must be above this",0.5);
  minlen=a.floatafter("-ml","Minimum length of a line",20);
  bool displaying=!a.argexists("nod","Don't display");
  String imname=a.argafter("-oi","Original image","none");
  oiscale=a.floatafter("-ois","Scale to original image",2);
  
  // Read list from file and find quads (looks easy!)
  List<QuadsLine2d> ls=readgfset(fname);
  printf("Finding quads\n");
  List<Polygon2d> qs=findquads(ls);
  
  Map2d<bool> jb=Map2d<bool>(640,480,15);
  for (int i=1;i<=qs.len && !key[KEY_ESC];i++) {
    // jb.clear();
    Polygon2d p=qs.num(i);
    for (int j=1;j<=p.vs.len;j++) {
      jb.line(p.linefrom(j),0);
    }
  }
  jb.writefile("quads.bmp");
  
    if (displaying) {
      jbmp.display();
      jb.display();
      allegroexit();
    }

  if (!Seq(imname,"none")) {
    
    oi=RGBmp::readfile(imname);
    Map2d<float> *gs=oi->getgreyscale();
    
    // Edge detection
    printf("Doing edge detection\n");
    gs->edgedetection(Map2d<float>::sobel(),&mag,&angs);
//    angs->display();
//    exit(0);
    
    printf("Ordering\n");
    qs.orderby(&offness);
    qs.applycall(&scalepoly);
    printf("Done ordering.\n");
    
    // Recover text
    List<RGBmp *> rec;
    // oi->display();
    for (int i=1;i<=qs.len && i<=5;i++) {
      List<V2d> *l=&qs.num(i).vs;
      RGBmp *n=oi->recoverquad(l,1);
      n->writefile(getnextfilename("recquad","bmp"));
      rec.add(n);
    }
    
    if (displaying) {
      waitforkeypress();
      jbmp.display();
      jb.display();
      for (int i=1;i<=rec.len && !key[KEY_ESC];i++)
      rec.num(i)->display();
    }
  }
  
  allegroexit();
  printf("%i quadrilaterals found\n",qs.len);
  
}
Exemplo n.º 30
0
bool startsdate(String s) {
  return Seq(Sleft(s,6),"Date: ");
}