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 */
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; }
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(); }) ); }
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); }
// ----- 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; }
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); } } }
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; }
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; }
//-----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; }
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\">></span><span id=\"click%iopen\" style=\"display:None\"><</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)); }
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; }
static bool fcalled(FontChar *f,String s) { return Seq(f->name,s); }
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" ) ) ) ) ) ) ); }
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 }
static String tail(String dir) { if (!Seq(Sright(dir,1),"\\") && !Seq(Sright(dir,1),"/") && Slen(dir)>0) return Sconc(dir,"/"); else return dir; }
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)",>right.x,>right.y,>right.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)",>down.x,>down.y,>down.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)",>hvp.x,>hvp.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)",>vvp.x,>vvp.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",>U); 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",>V); 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",>W); 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); }
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"); }
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); }
void expect(String a,String b) { if (!Seq(a,b)) error("Got %s expected %s",b,a); }
bool JFont::fcalled(FontChar *f,String s) { return Seq(f->name,s); }
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)); } }}; }
bool JFont::fsamename(FontChar f,FontChar o) { return Seq(f.name,o.name); }
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); }
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); } }
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); }
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); }
bool startsdate(String s) { return Seq(Sleft(s,6),"Date: "); }