int get3d_dst(int *x,int *y,int *z,int shift,int sizex,int sizey,int sizez) { float cx,cy,cz; float nx=*x,ny=*y,nz=*z; float a,b,c,r; cx=sizex/2; cy=sizey/2; cz=sizez/2; r=3.14/64.; a=nx-cx; b=ny-cy; c=nz-cz; rotate_3d(&a,&b,&c,r,r,r); a=a+cx; b=b+cy; c=c+cz; *x=a; *y=b; *z=c; }
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); }