00001 /* $Id: pltick.c 9727 2009-03-12 08:18:31Z smekal $ 00002 00003 Routines for drawing error bars and tick marks. 00004 00005 Copyright (C) 2004 Alan W. Irwin 00006 00007 This file is part of PLplot. 00008 00009 PLplot is free software; you can redistribute it and/or modify 00010 it under the terms of the GNU General Library Public License as published 00011 by the Free Software Foundation; either version 2 of the License, or 00012 (at your option) any later version. 00013 00014 PLplot is distributed in the hope that it will be useful, 00015 but WITHOUT ANY WARRANTY; without even the implied warranty of 00016 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00017 GNU Library General Public License for more details. 00018 00019 You should have received a copy of the GNU Library General Public License 00020 along with PLplot; if not, write to the Free Software 00021 Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 00022 */ 00023 00024 #include "plplotP.h" 00025 00026 /*----------------------------------------------------------------------*\ 00027 * void plxtik() 00028 * 00029 * Draws a tick parallel to x. 00030 \*----------------------------------------------------------------------*/ 00031 00032 void 00033 plxtik(PLINT x, PLINT y, PLINT below, PLINT above) 00034 { 00035 plP_movphy(x, y-below); 00036 plP_draphy(x, y+above); 00037 } 00038 00039 /*----------------------------------------------------------------------*\ 00040 * void plytik() 00041 * 00042 * Draws a tick parallel to y. 00043 \*----------------------------------------------------------------------*/ 00044 00045 void 00046 plytik(PLINT x, PLINT y, PLINT left, PLINT right) 00047 { 00048 plP_movphy(x-left, y); 00049 plP_draphy(x+right, y); 00050 } 00051 00052 /*----------------------------------------------------------------------*\ 00053 * void plstik() 00054 * 00055 * Draws a slanting tick at position (mx,my) (measured in mm) of 00056 * vector length (dx,dy). 00057 \*----------------------------------------------------------------------*/ 00058 00059 void 00060 plstik(PLFLT mx, PLFLT my, PLFLT dx, PLFLT dy) 00061 { 00062 plP_movphy(plP_mmpcx(mx), plP_mmpcy(my)); 00063 plP_draphy(plP_mmpcx((PLFLT) (mx + dx)), plP_mmpcy((PLFLT) (my + dy))); 00064 } 00065 00066 /*----------------------------------------------------------------------*\ 00067 * void plerx1() 00068 * 00069 * Plot single horizontal error bar. 00070 \*----------------------------------------------------------------------*/ 00071 00072 static void 00073 plerx1(PLFLT xmin, PLFLT xmax, PLFLT y) 00074 { 00075 PLINT yminor; 00076 00077 yminor = (PLINT)(MAX(1.0, plsc->minht * plsc->ypmm)); 00078 plxtik(plP_wcpcx(xmin), plP_wcpcy(y), yminor, yminor); 00079 plP_movwor(xmin, y); 00080 plP_drawor(xmax, y); 00081 plxtik(plP_wcpcx(xmax), plP_wcpcy(y), yminor, yminor); 00082 } 00083 00084 /*----------------------------------------------------------------------*\ 00085 * void plery1() 00086 * 00087 * Plot single vertical error bar. 00088 \*----------------------------------------------------------------------*/ 00089 00090 static void 00091 plery1(PLFLT x, PLFLT ymin, PLFLT ymax) 00092 { 00093 PLINT xminor; 00094 00095 xminor = (PLINT)(MAX(1.0, plsc->minht * plsc->xpmm)); 00096 plytik(plP_wcpcx(x), plP_wcpcy(ymin), xminor, xminor); 00097 plP_movwor(x, ymin); 00098 plP_drawor(x, ymax); 00099 plytik(plP_wcpcx(x), plP_wcpcy(ymax), xminor, xminor); 00100 } 00101 00102 /*----------------------------------------------------------------------*\ 00103 * void plerrx() 00104 * 00105 * Plot horizontal error bars (xmin(i),y(i)) to (xmax(i),y(i)). 00106 \*----------------------------------------------------------------------*/ 00107 00108 void 00109 c_plerrx(PLINT n, PLFLT *xmin, PLFLT *xmax, PLFLT *y) 00110 { 00111 PLINT i; 00112 00113 if (plsc->level < 3) { 00114 plabort("plerrx: Please set up window first"); 00115 return; 00116 } 00117 00118 for (i = 0; i < n; i++) 00119 plerx1(xmin[i], xmax[i], y[i]); 00120 } 00121 00122 /*----------------------------------------------------------------------*\ 00123 * void plerry() 00124 * 00125 * Plot vertical error bars (x,ymin(i)) to (x(i),ymax(i)). 00126 \*----------------------------------------------------------------------*/ 00127 00128 void 00129 c_plerry(PLINT n, PLFLT *x, PLFLT *ymin, PLFLT *ymax) 00130 { 00131 PLINT i; 00132 00133 if (plsc->level < 3) { 00134 plabort("plerry: Please set up window first"); 00135 return; 00136 } 00137 00138 for (i = 0; i < n; i++) 00139 plery1(x[i], ymin[i], ymax[i]); 00140 }
1.6.1