1 /* 2 * This file is part of the GROMACS molecular simulation package. 3 * 4 * Copyright (c) 1991-2000, University of Groningen, The Netherlands. 5 * Copyright (c) 2001-2004, The GROMACS development team. 6 * Copyright (c) 2010,2014,2015,2019, by the GROMACS development team, led by 7 * Mark Abraham, David van der Spoel, Berk Hess, and Erik Lindahl, 8 * and including many others, as listed in the AUTHORS file in the 9 * top-level source directory and at http://www.gromacs.org. 10 * 11 * GROMACS is free software; you can redistribute it and/or 12 * modify it under the terms of the GNU Lesser General Public License 13 * as published by the Free Software Foundation; either version 2.1 14 * of the License, or (at your option) any later version. 15 * 16 * GROMACS is distributed in the hope that it will be useful, 17 * but WITHOUT ANY WARRANTY; without even the implied warranty of 18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 19 * Lesser General Public License for more details. 20 * 21 * You should have received a copy of the GNU Lesser General Public 22 * License along with GROMACS; if not, see 23 * http://www.gnu.org/licenses, or write to the Free Software Foundation, 24 * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. 25 * 26 * If you want to redistribute modifications to GROMACS, please 27 * consider that scientific software is very special. Version 28 * control is crucial - bugs must be traceable. We will be happy to 29 * consider code for inclusion in the official distribution, but 30 * derived work must not be called official GROMACS. Details are found 31 * in the README & COPYING files - if they are missing, get the 32 * official version at http://www.gromacs.org. 33 * 34 * To help us fund GROMACS development, we humbly ask that you cite 35 * the research papers on the package. Check out http://www.gromacs.org. 36 */ 37 #ifndef GMX_FILEIO_WRITEPS_H 38 #define GMX_FILEIO_WRITEPS_H 39 40 #include <cstdio> 41 42 #include <string> 43 #include <vector> 44 45 #include "gromacs/fileio/rgb.h" 46 #include "gromacs/utility/basedefinitions.h" 47 #include "gromacs/utility/real.h" 48 49 /* TODO: These two enums are used also in xutil.h in src/programs/view/. 50 * The Y position enum doesn't seem to be actually used in this header... 51 */ 52 typedef enum 53 { 54 eXCenter, 55 eXLeft, 56 eXRight 57 } eXPos; 58 59 typedef enum 60 { 61 eYCenter, 62 eYTop, 63 eYBottom 64 } eYPos; 65 66 enum 67 { 68 efontTIMES, 69 efontTIMESITALIC, 70 efontTIMESBOLD, 71 efontTIMESBOLDITALIC, 72 efontHELV, 73 efontHELVITALIC, 74 efontHELVBOLD, 75 efontHELVBOLDITALIC, 76 efontCOUR, 77 efontCOURITALIC, 78 efontCOURBOLD, 79 efontCOURBOLDITALIC, 80 efontNR 81 }; 82 83 84 struct t_psdata 85 { 86 FILE* fp = nullptr; 87 int maxrgb = 0; 88 std::vector<t_rgb> rgb; 89 real gen_ybox = 0; 90 int ostack = 0; 91 }; 92 93 94 extern const char* fontnm[efontNR]; 95 96 t_psdata ps_open(const char* fn, real x1, real y1, real x2, real y2); 97 98 void ps_linewidth(t_psdata* ps, int lw); 99 void ps_color(t_psdata* ps, real r, real g, real b); 100 void ps_rgb(t_psdata* ps, const t_rgb* rgb); 101 102 void ps_rgb_box(t_psdata* ps, t_rgb* rgb); 103 void ps_rgb_nbox(t_psdata* ps, t_rgb* rgb, real n); 104 void ps_init_rgb_box(t_psdata* ps, real xbox, real ybox); 105 void ps_init_rgb_nbox(t_psdata* ps, real xbox, real ybox); 106 107 void ps_lineto(t_psdata* ps, real x, real y); 108 void ps_linerel(t_psdata* ps, real dx, real dy); 109 110 void ps_moveto(t_psdata* ps, real x, real y); 111 void ps_moverel(t_psdata* ps, real dx, real dy); 112 113 void ps_line(t_psdata* ps, real x1, real y1, real x2, real y2); 114 115 void ps_box(t_psdata* ps, real x1, real y1, real x2, real y2); 116 void ps_fillbox(t_psdata* ps, real x1, real y1, real x2, real y2); 117 118 void ps_arc(t_psdata* ps, real x1, real y1, real rad, real a0, real a1); 119 void ps_fillarc(t_psdata* ps, real x1, real y1, real rad, real a0, real a1); 120 void ps_arcslice(t_psdata* ps, real xc, real yc, real rad1, real rad2, real a0, real a1); 121 void ps_fillarcslice(t_psdata* ps, real xc, real yc, real rad1, real rad2, real a0, real a1); 122 123 void ps_circle(t_psdata* ps, real x1, real y1, real rad); 124 125 void ps_font(t_psdata* ps, int font, real size); 126 void ps_strfont(t_psdata* ps, char* font, real size); 127 128 void ps_text(t_psdata* ps, real x1, real y1, const std::string& str); 129 void ps_ctext(t_psdata* ps, real x1, real y1, const std::string& str, int expos); 130 131 void ps_close(t_psdata* ps); 132 133 void ps_flip(t_psdata* ps, gmx_bool bPlus); 134 /* Rotate over 90 (bPlus) or -90 (!bPlus) degrees */ 135 136 void ps_rotate(t_psdata* ps, real angle); 137 138 void ps_translate(t_psdata* ps, real x, real y); 139 140 void ps_setorigin(t_psdata* ps); 141 void ps_unsetorigin(t_psdata* ps); 142 143 void ps_comment(t_psdata* ps, const char* s); 144 145 #endif 146