107 double x1, x2, y1, y2;
108 double dx1, dx2, dy1, dy2;
114 Curve * this_curve = this_proj -> analysis[rid] -> curves[cid];
117 for ( i=0 ; i < points; i++ )
125 x = (i+1) * this_proj -> analysis[rid] -> num_delta * this_proj -> analysis[rid] -> delta * pow(10,
dxlog);
126 x = log(
x) / log(pow(10,
xlog));
135 y = this_curve -> data[1][i] * pow(10,
dylog);
136 y = log(
y) / log(pow(10,
ylog));
146 cairo_set_dash(cr, dasht -> a, dasht -> b, 0.0);
147 cairo_set_line_width (cr, thick);
152 cairo_set_line_width (cr, 0.0);
154 cairo_set_source_rgba (cr, withcolor.
red,
156 withcolor.
blue, 1.0);
162 if (rid ==
RIN) j = 2;
163 for ( i = j ; i < points - k ; i ++)
167 slope = (plotdata[i+k][1] - plotdata[i][1])/ (plotdata[i+k][0] - plotdata[i][0]);
168 bval = plotdata[i][1] - slope*plotdata[i][0];
169 dy1 = slope*
x_min + bval;
170 dy2 = slope*
x_max + bval;
173 dx1 = (
y_min - bval) / slope;
174 dx2 = (
y_max - bval) / slope;
178 dx1 = (
y_max - bval) / slope;
179 dx2 = (
y_min - bval) / slope;
181 if (plotdata[i][0] <
x_min && plotdata[i+k][0] <
x_min)
185 else if (plotdata[i][0] >
x_max && plotdata[i+k][0] >
x_max)
189 if (plotdata[i][1] <
y_max && plotdata[i+k][1] <
y_max)
193 else if (plotdata[i][1] >
y_min && plotdata[i+k][1] >
y_min)
199 if (plotdata[i][0] >=
x_min && plotdata[i][0] <=
x_max)
201 if(plotdata[i][1] >=
y_max && plotdata[i][1] <=
y_min)
218 if (plotdata[i+k][0] >=
x_min && plotdata[i+k][0] <=
x_max)
220 if (plotdata[i+k][1] >=
y_max && plotdata[i+k][1] <=
y_min)
222 x2 = plotdata[i+k][0];
223 y2 = plotdata[i+k][1];
236 cairo_move_to (cr, x1, y1);
237 cairo_line_to (cr, x2, y2);
239 if (i % freq == 0 && dglyp)
draw_glyph (cr, glyp, x1, y1, withcolor, gize);
240 if (i == points - 2 && (i+k) % freq == 0 && dglyp)
242 draw_glyph (cr, glyp, x2, y2, withcolor, gize);
251 if (rid ==
RIN) j = 2;
253 for ( i = j ; i < points ; i ++)
255 if (this_curve -> data[1][i] != 0.0)
257 if (plotdata[i][0] >=
x_min && plotdata[i][0] <=
x_max)
259 if (plotdata[i][1] <=
y_min || (
cxy[1] <= 0.0 && plotdata[i][1] >
y_min))
261 x1 = plotdata[i][0] - hwidth * 0.5 *
XDRAW /
xmax;
262 if (pid) x1 -= hwidth * 0.5 * ((float)pid / (float)extra) *
XDRAW /
xmax;
274 if (plotdata[i][1] >
y_min)
278 else if (plotdata[i][1] <
y_max)
289 cairo_set_source_rgba (cr, 1.0, 1.0, 1.0, 1.0);
290 cairo_rectangle (cr, x1, y1, x2, y2);
293 cairo_set_source_rgba (cr, withcolor.
red,
295 withcolor.
blue, hopac);
296 cairo_rectangle (cr, x1, y1, x2, y2);
298 cairo_set_source_rgba (cr, withcolor.
red,
300 withcolor.
blue, 1.0);
306 cairo_move_to (cr, x1, y2);
307 cairo_line_to (cr, x1, y1);
308 cairo_move_to (cr, x1, y1);
309 x2 = plotdata[i][0] + hwidth * 0.5 *
XDRAW /
xmax;
310 if (pid) x2 -= hwidth * 0.5 * ((float)pid / (float)extra) *
XDRAW /
xmax;
314 cairo_line_to(cr, x2, y1);
315 cairo_move_to(cr, x2, y1);
319 cairo_line_to(cr, x2, y1);
320 cairo_move_to(cr, x2, y1);
321 cairo_line_to(cr, x2, y2);
void draw_curve(cairo_t *cr, int cid, int rid, project *this_proj, int points, ColRGBA withcolor, int xscale, int yscale, int asp, int vdash, double thick, int glyp, double gize, int freq, double hwidth, double hopac, int hpos, int extra, int pid)
draw target curve to the cairo drawing context