4 * This source code is part of
8 * GROningen MAchine for Chemical Simulations
12 * Copyright (c) 1991-2001
13 * BIOSON Research Institute, Dept. of Biophysical Chemistry
14 * University of Groningen, The Netherlands
16 * This program is free software; you can redistribute it and/or
17 * modify it under the terms of the GNU General Public License
18 * as published by the Free Software Foundation; either version 2
19 * of the License, or (at your option) any later version.
21 * If you want to redistribute modifications, please consider that
22 * scientific software is very special. Version control is crucial -
23 * bugs must be traceable. We will be happy to consider code for
24 * inclusion in the official distribution, but derived work must not
25 * be called official GROMACS. Details are found in the README & COPYING
26 * files - if they are missing, get the official version at www.gromacs.org.
28 * To help us fund GROMACS development, we humbly ask that you cite
29 * the papers on the package - you can find them in the top README file.
31 * Do check out http://www.gromacs.org , or mail us at gromacs@gromacs.org .
34 * Good ROcking Metal Altar for Chronical Sinners
40 static char *SRCID_3dview_h = "$Id$";
48 typedef real mat4[4][4];
54 vec4 eye,origin; /* The eye and origin position */
55 mat4 proj; /* Projection matrix */
56 mat4 Rot; /* Total rotation matrix */
57 real sc_x,sc_y; /* Scaling for aspect ratio */
60 extern void print_m4(FILE *fp,char *s,mat4 A);
62 extern void print_v4(FILE *fp,char *s,int dim,real *a);
64 extern void m4_op(mat4 m,rvec x,vec4 v);
66 extern void unity_m4(mat4 m);
68 extern void mult_matrix(mat4 A, mat4 B, mat4 C);
70 extern void rotate(int axis, real angle, mat4 A);
72 extern void translate(real tx, real ty, real tz, mat4 A);
74 extern void m4_op(mat4 m,rvec x,vec4 v);
76 extern void calculate_view(t_3dview *view);
78 extern t_3dview *init_view(matrix box);
79 /* Generate the view matrix from the eye pos and the origin,
80 * applying also the scaling for the aspect ration.
81 * There is no accompanying done_view routine: the struct can simply
85 /* The following options are present on the 3d struct:
87 * rotate around the center of the box
91 extern bool zoom_3d(t_3dview *view,real fac);
92 /* Zoom in or out with factor fac, returns TRUE when zoom succesful,
96 extern void rotate_3d(t_3dview *view,int axis,bool bPositive);
97 /* Rotate the eye around the center of the box, around axis */
99 extern void translate_view(t_3dview *view,int axis,bool bPositive);
100 /* Translate the origin at which one is looking */
102 extern void reset_view(t_3dview *view);
103 /* Reset the viewing to the initial view */