static bool step_man(t_manager *man, int *nat) { static int ncount = 0; static bool bWarn = false; bool bEof; const char *warn; if (!man->natom) { fprintf(stderr, "Not initiated yet!"); exit(1); } bEof = read_next_x(man->oenv, man->status, &man->time, man->x, man->box); *nat = man->natom; if (ncount == man->nSkip) { switch (man->molw->boxtype) { case esbTri: put_atoms_in_triclinic_unitcell(ecenterDEF, man->box, man->natom, man->x); break; case esbTrunc: warn = put_atoms_in_compact_unitcell(man->molw->ePBC, ecenterDEF, man->box, man->natom, man->x); if (warn && !bWarn) { fprintf(stderr, "\n%s\n", warn); bWarn = true; } break; case esbRect: case esbNone: default: break; } if (man->bPbc) { gmx_rmpbc(man->gpbc, man->natom, man->box, man->x); reset_mols(&(man->top.mols), man->box, man->x); } ncount = 0; } else { if (man->nSkip > 0) { ncount++; return step_man(man, nat); } } return bEof; }
static bool step_man(t_manager *man, int *nat) { static int ncount = 0; bool bEof; if (!man->natom) { std::fprintf(stderr, "Not initiated yet!"); std::exit(1); } bEof = read_next_x(man->oenv, man->status, &man->time, man->x, man->box); *nat = man->natom; if (ncount == man->nSkip) { auto atomsArrayRef = gmx::arrayRefFromArray(reinterpret_cast<gmx::RVec *>(man->x), man->natom); switch (man->molw->boxtype) { case esbTri: put_atoms_in_triclinic_unitcell(ecenterDEF, man->box, atomsArrayRef); break; case esbTrunc: put_atoms_in_compact_unitcell(man->molw->ePBC, ecenterDEF, man->box, atomsArrayRef); break; case esbRect: case esbNone: default: break; } if (man->bPbc) { gmx_rmpbc(man->gpbc, man->natom, man->box, man->x); reset_mols(&(man->top.mols), man->box, man->x); } ncount = 0; } else { if (man->nSkip > 0) { ncount++; return step_man(man, nat); } } return bEof; }
static void HandleClient(t_x11 *x11,t_manager *man,long data[]) { int ID,button,x,y; bool bPos; real fac; ID=data[0]; button=data[1]; x=data[2]; y=data[3]; bPos=(button==Button1); switch (ID) { case IDROTX: case IDROTY: case IDROTZ: rotate_3d(man->view,ID-IDROTX,bPos); draw_mol(x11,man); break; case IDZOOM: if (bPos) fac=0.8; /* Reduce distance between eye and origin */ else fac=1.25; /* zoom changed to scale by Berk Hess 3-7-96 if (zoom_3d(man->view,fac)) draw_mol(x11,man); */ man->view->sc_x/=fac; man->view->sc_y/=fac; draw_mol(x11,man); break; case IDTRANSX: case IDTRANSY: case IDTRANSZ: translate_view(man->view,ID-IDTRANSX,bPos); draw_mol(x11,man); break; case IDREWIND: if (man->status != -1) { rewind_trj(man->status); read_next_x(man->status,&(man->time),man->natom,man->x,man->box); man->bEof=FALSE; draw_mol(x11,man); } break; case IDSTEP: { int nat; nat=0; if (!step_man(man,&nat)) { man->bEof=TRUE; man->bStop=TRUE; } else { if (nat > 0) { draw_mol(x11,man); usleep(man->nWait*1000); } } break; } case IDFF: man->bStop=FALSE; break; case IDSTOP_ANI: man->bStop=TRUE; break; case IDDRAWMOL: draw_mol(x11,man); break; case IDLABEL: switch (button) { case Button1: case Button2: show_label(x11,man,x,y); break; case Button3: hide_label(x11,man,x,y); break; } break; default: break; } if (man->bAnimate && !man->bEof && !man->bStop) step_message(x11,man); }