Skip to content
Snippets Groups Projects
partiview.cc 31.1 KiB
Newer Older
	    sprintf(tfname, "data/record/%s%s", argv[1],
		strstr(argv[1], ".wf") ? "" : ".wf");
	    realfile = findfile( NULL, tfname+12 );
	}
	if(realfile == NULL)
	    realfile = findfile( fromfname, tfname );
	if(realfile)
	    parti_readpath( realfile );
	else
	    msg("%s: can't find \"%s\" nor data/record/... nor ...wf",
		argv[0],argv[1]);

  } else if(!strcmp( argv[0], "play" )) {
	parti_play( argc>1 ? rejoinargs(1, argc, argv) : NULL );

  } else if(!strcmp( argv[0], "frame" )) {
	CONST struct wfpath *pp;
	i = parti_frame( argv[1], &pp );
	msg("frame %d (of %d..%d)", pp->curframe,
		pp->frame0, pp->nframes + pp->frame0 - 1);

  } else if(!strcmp( argv[0], "interest") || !strcmp( argv[0], "int" ) ||
		!strcmp( argv[0], "center" ) ||
		!strcmp( argv[0], "cen" )) {
	Point cen;
	float censize = parti_getcensize();
	parti_getcenter( &cen );
	if(argc > 1) {
	    sscanf(argv[1], "%f%*c%f%*c%f%*c%f",
		&cen.x[0],&cen.x[1],&cen.x[2], &censize);
	    if(argc > 3)
		for(i=0;i<3;i++)
		    cen.x[i] = getfloat(argv[i+1], cen.x[i]);
	    if(argc == 3 || argc == 5)
		sscanf(argv[argc-1], "%f", &censize);
	    parti_center( &cen );
	    if(censize != parti_getcensize())
		parti_censize( censize );
	}
	msg("center %g %g %g  %g(radius)", cen.x[0],cen.x[1],cen.x[2], censize);
  } else if(!strcmp( argv[0], "censize" )) {
	if(argc>1)
	    parti_censize( getfloat(argv[1], parti_getcensize()));
	msg("censize %g  (interest-marker size)", parti_getcensize());

  } else if(!strcmp( argv[0], "detach" )) {  /* "detach" or "detach f" or "detach f +50+100" */
	parti_detachview( rejoinargs( (argc>1 ? 1 : 0), argc, argv ));
slevy's avatar
slevy committed
	msg("detached");

slevy's avatar
slevy committed
int pp_read( struct stuff **, int argc, char *argv[], char *fromfname, void * ) {
    if(!strcmp( argv[0], "subcam")) {
	if(argc >= 9) {
	    parti_make_subcam( argv[1], argc-2, argv+2 );
	} else {
	    msg("subcam: expected name az el rol L R B T, not %s",
		rejoinargs( 1, argc, argv ));
	}
	return 1;
    }
    return 0;
}


int main(int argc, char *argv[])
{
  static GLuint pickbuffer[20480];
  extern char partiview_version[];
slevy's avatar
 
slevy committed
  pp_clk_init();
  make_window();

  static Point black = {0,0,0};
  ppui.view->bgcolor( &black );

  char title[64];
  sprintf(title, "partiview %.10s", partiview_version);
  ppui.mainwin->label( title );

  /* make_window() sets ppui.view, etc. */

  parti_add_commands( pp_parse_args, "partiview", NULL );
  parti_add_reader( pp_read, "partiview", NULL );
  pp_ui_init();
  ppui.view->add_drawer( drawjunk, NULL, NULL, NULL, 0 );
  ppui.view->pickbuffer( COUNT(pickbuffer), pickbuffer );

  ppui.view->zspeed = 5;
  ppui.view->farclip( 2500 );
  ppui.censize = 1.0;
slevy's avatar
slevy committed
  ppui.pickrange = 3.5;

  ppui.view->movingtarget( 0 );
  ppui.view->msg = msg;

  if(ppui.hrdiag) {
    ppui.hrdiag->msg = msg;
    ppui.hrdiag->bgcolor( &black );
  ppui.playspeed = 1;
  ppui.playframe->lstep(10);

  parti_object( "g1", NULL, 1 );

  int i = 0;
  if(Fl::args(argc, argv, i, cmdargs) == 0) {
    fprintf(stderr, "Unrecognized option: %s\n", argv[i]);
    exit(1);
  }
  for( ; i < argc; i++) {
    specks_read( &ppui.st, argv[i] );
  }

slevy's avatar
 
slevy committed
  pp_ui_postinit();

  ppui.view->notifier( pp_viewchanged, ppui.st );
  ppui_refresh( ppui.st );

slevy's avatar
slevy committed
  if(ppui.detached == 'h')
      ppui.mainwin->hide();
  else
      ppui.mainwin->show(argc, argv);

#ifdef GLUT_MULTISAMPLE			// if multisampling known to FLTK
  parti_stereo( parti_stereo(NULL) );	// side effect: enables multisampling
#endif

  ppui.view->show();
  //marx version 0.7.03 process any pending events followed by simulation user pressing enter key
  //this appears to properly initialize the steprow group
  /*  
  for(i = 1; i < 11; i++) //11 is arbitrary probably only need 5
     Fl::wait(.1);
  pp_cmd_cb( ppui.cmd, NULL );
  */

  //replaces the above in release because the above seemed to stop working in 0.7.06
  //in effect i am replacing a software emulation of pressing the enter key with software simulation of a mouse click
  int cnt = 0; 
  while(double v = Fl::wait(.1)){
    if(v < 0)      //error
      break;
    if(cnt++ > 5) //because in windows wait(time) will not return 0 if time > 0
      break;
  }
  ppui_refresh(NULL);
  //end of replaces the above ...

#ifdef __APPLE__
  Fl_Window* mw = ppui.mainwin;
  Fl::wait(.1);
  ppui.mainwin->resize(mw->x()+1, mw->y()+1, mw->w()+1, mw->h()+1); //marx: version 0.7.04
  //the resize compensates for bug that appears under os x only - damage to widgets does not cause redraw but resize seems to cause the needed redraw
#endif
  if(ppui.reqwinsize != NULL) {
    parti_update();
    parti_winsize( ppui.reqwinsize );
    ppui.reqwinsize = NULL;
  }
  Fl::visible_focus(0);            //marx: version 0.7.02 - keep the pre fltk-1.1.x old style of only text widgets to get keyboard focus

  Fl_Tooltip::delay(.5);               //marx: version 0.7.02
  Fl_Tooltip::font(FL_HELVETICA_BOLD); //marx: version 0.7.02
  Fl_Tooltip::color(68);               //marx: version 0.7.02