PLplot 5.15.0
Loading...
Searching...
No Matches
pltick.c
Go to the documentation of this file.
1// Routines for drawing error bars and tick marks.
2//
3// Copyright (C) 2004-2014 Alan W. Irwin
4//
5// This file is part of PLplot.
6//
7// PLplot is free software; you can redistribute it and/or modify
8// it under the terms of the GNU Library General Public License as published
9// by the Free Software Foundation; either version 2 of the License, or
10// (at your option) any later version.
11//
12// PLplot is distributed in the hope that it will be useful,
13// but WITHOUT ANY WARRANTY; without even the implied warranty of
14// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15// GNU Library General Public License for more details.
16//
17// You should have received a copy of the GNU Library General Public License
18// along with PLplot; if not, write to the Free Software
19// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
20//
21
22#include "plplotP.h"
23
24//--------------------------------------------------------------------------
25// void plwxtik()
26//
27// Draws a tick parallel to x, using world coordinates
28//--------------------------------------------------------------------------
29void
30plwxtik( PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert )
31{
32 PLINT length, below, above;
33 PLFLT height;
34 if ( minor )
35 {
36 // Minor tick
37 height = plsc->minht;
38 }
39 else
40 {
41 // Major tick
42 height = plsc->majht;
43 }
44 length = MAX( ROUND( height * plsc->ypmm ), 1 );
45
46 if ( invert )
47 {
48 below = 0;
49 above = length;
50 }
51 else
52 {
53 below = length;
54 above = 0;
55 }
56 // Actually draw the tick
57 plxtik( plP_wcpcx( x ), plP_wcpcy( y ), below, above );
58}
59
60//--------------------------------------------------------------------------
61// void plwytik()
62//
63// Draws a tick parallel to y, using world coordinates
64//--------------------------------------------------------------------------
65void
66plwytik( PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert )
67{
68 PLINT length, below, above;
69 PLFLT height;
70 if ( minor )
71 {
72 // Minor tick
73 height = plsc->minht;
74 }
75 else
76 {
77 // Major tick
78 height = plsc->majht;
79 }
80 length = MAX( ROUND( height * plsc->xpmm ), 1 );
81
82 if ( invert )
83 {
84 below = 0;
85 above = length;
86 }
87 else
88 {
89 below = length;
90 above = 0;
91 }
92 // Actually draw the tick
93 plytik( plP_wcpcx( x ), plP_wcpcy( y ), below, above );
94}
95
96//--------------------------------------------------------------------------
97// void plxtik()
98//
99// Draws a tick parallel to x.
100//--------------------------------------------------------------------------
101
102void
103plxtik( PLINT x, PLINT y, PLINT below, PLINT above )
104{
105 plP_movphy( x, y - below );
106 plP_draphy( x, y + above );
107}
108
109//--------------------------------------------------------------------------
110// void plytik()
111//
112// Draws a tick parallel to y.
113//--------------------------------------------------------------------------
114
115void
116plytik( PLINT x, PLINT y, PLINT left, PLINT right )
117{
118 plP_movphy( x - left, y );
119 plP_draphy( x + right, y );
120}
121
122//--------------------------------------------------------------------------
123// void plstik()
124//
125// Draws a slanting tick at position (mx,my) (measured in mm) of
126// vector length (dx,dy).
127//--------------------------------------------------------------------------
128
129void
130plstik( PLFLT mx, PLFLT my, PLFLT dx, PLFLT dy )
131{
132 plP_movphy( plP_mmpcx( mx ), plP_mmpcy( my ) );
133 plP_draphy( plP_mmpcx( (PLFLT) ( mx + dx ) ), plP_mmpcy( (PLFLT) ( my + dy ) ) );
134}
135
136//--------------------------------------------------------------------------
137// void plerx1()
138//
139// Plot single horizontal error bar.
140//--------------------------------------------------------------------------
141
142static void
143plerx1( PLFLT xmin, PLFLT xmax, PLFLT y )
144{
145 PLINT yminor;
146
147 yminor = (PLINT) ( MAX( 1.0, plsc->minht * plsc->ypmm ) );
148 plxtik( plP_wcpcx( xmin ), plP_wcpcy( y ), yminor, yminor );
149 plP_movwor( xmin, y );
150 plP_drawor( xmax, y );
151 plxtik( plP_wcpcx( xmax ), plP_wcpcy( y ), yminor, yminor );
152}
153
154//--------------------------------------------------------------------------
155// void plery1()
156//
157// Plot single vertical error bar.
158//--------------------------------------------------------------------------
159
160static void
161plery1( PLFLT x, PLFLT ymin, PLFLT ymax )
162{
163 PLINT xminor;
164
165 xminor = (PLINT) ( MAX( 1.0, plsc->minht * plsc->xpmm ) );
166 plytik( plP_wcpcx( x ), plP_wcpcy( ymin ), xminor, xminor );
167 plP_movwor( x, ymin );
168 plP_drawor( x, ymax );
169 plytik( plP_wcpcx( x ), plP_wcpcy( ymax ), xminor, xminor );
170}
171
172//--------------------------------------------------------------------------
173// void plerrx()
174//
175// Plot horizontal error bars (xmin(i),y(i)) to (xmax(i),y(i)).
176//--------------------------------------------------------------------------
177
178void
180{
181 PLINT i;
182
183 if ( plsc->level < 3 )
184 {
185 plabort( "plerrx: Please set up window first" );
186 return;
187 }
188
189 for ( i = 0; i < n; i++ )
190 plerx1( xmin[i], xmax[i], y[i] );
191}
192
193//--------------------------------------------------------------------------
194// void plerry()
195//
196// Plot vertical error bars (x,ymin(i)) to (x(i),ymax(i)).
197//--------------------------------------------------------------------------
198
199void
201{
202 PLINT i;
203
204 if ( plsc->level < 3 )
205 {
206 plabort( "plerry: Please set up window first" );
207 return;
208 }
209
210 for ( i = 0; i < n; i++ )
211 plery1( x[i], ymin[i], ymax[i] );
212}
#define MAX(a, b)
Definition dsplint.c:28
void plabort(PLCHAR_VECTOR errormsg)
Definition plctrl.c:1894
PLINT plP_wcpcy(PLFLT y)
Definition plcvt.c:73
PLINT plP_mmpcx(PLFLT x)
Definition plcvt.c:47
PLINT plP_wcpcx(PLFLT x)
Definition plcvt.c:63
PLINT plP_mmpcy(PLFLT y)
Definition plcvt.c:55
void plP_drawor(PLFLT x, PLFLT y)
Definition plline.c:505
void plP_movwor(PLFLT x, PLFLT y)
Definition plline.c:489
void plP_movphy(PLINT x, PLINT y)
Definition plline.c:459
void plP_draphy(PLINT x, PLINT y)
Definition plline.c:472
#define ROUND(a)
Definition plplotP.h:202
float PLFLT
Definition plplot.h:163
const PLFLT * PLFLT_VECTOR
Definition plplot.h:244
int PLINT
Definition plplot.h:181
PLINT PLBOOL
Definition plplot.h:204
static void plerx1(PLFLT xmin, PLFLT xmax, PLFLT y)
Definition pltick.c:143
void plwytik(PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert)
Definition pltick.c:66
void plxtik(PLINT x, PLINT y, PLINT below, PLINT above)
Definition pltick.c:103
void c_plerry(PLINT n, PLFLT_VECTOR x, PLFLT_VECTOR ymin, PLFLT_VECTOR ymax)
Definition pltick.c:200
void c_plerrx(PLINT n, PLFLT_VECTOR xmin, PLFLT_VECTOR xmax, PLFLT_VECTOR y)
Definition pltick.c:179
void plytik(PLINT x, PLINT y, PLINT left, PLINT right)
Definition pltick.c:116
void plwxtik(PLFLT x, PLFLT y, PLBOOL minor, PLBOOL invert)
Definition pltick.c:30
void plstik(PLFLT mx, PLFLT my, PLFLT dx, PLFLT dy)
Definition pltick.c:130
static void plery1(PLFLT x, PLFLT ymin, PLFLT ymax)
Definition pltick.c:161