void draw_test (int id, ps_context* gc) { ps_color col = {0, 0, 1, 1}; ps_color sol = {1, 0, 0, 1}; ps_rect cr = {2.7f , 3.4f, 272.4f, 261.3f}; ps_point s = {50.1f, 50.3f}; ps_point e = {200.7f, 50.3f}; ps_point p[3] = {{100,100},{200, 300},{ 300, 40}}; ps_point cp = {128, 128}; ps_point sc = {10, 228}; ps_rect br = {50, 50, 120, 100}; ps_set_line_width(gc, 1); ps_set_stroke_color(gc, &sol); // ps_set_line_dash(gc, dashs[0].s, dashs[0].d, 4); ps_set_source_color(gc, &col); ps_arc (gc, &cp, 10 , 0, 6.28f, True); ps_stroke(gc); // ps_set_line_dash(gc, dashs[1].s, dashs[1].d, 4); ps_tangent_arc(gc, &br, 0, 1.254f); ps_stroke(gc); ps_move_to(gc, &sc); ps_bezier_curve_to(gc, &p[0], &p[1], &p[2]); ps_arc (gc, &cp, 100 , 0.785f, 3.140f, False); ps_bezier_curve_to(gc, &p[0], &p[1], &p[2]); // ps_set_line_dash(gc, dashs[2].s, dashs[2].d, 4); ps_quad_curve_to(gc, &p[1], &p[2]); ps_stroke(gc); // ps_set_line_dash(gc, dashs[3].s, dashs[3].d, 4); ps_rectangle(gc, &cr); ps_rounded_rect(gc, >, 45.2f, 35.2f, 25.2f, 25.2f, 35.2f, 55.2f, 65.2f, 85.2f); ps_ellipse(gc, &gr); ps_stroke(gc); // ps_reset_line_dash(gc); ps_move_to(gc, &s); ps_line_to(gc, &e); ps_stroke(gc); }
void draw_test (int id, ps_context* gc) { // int i; // double w; ps_font* old; // ps_size ts; // ps_font_info info; // ps_glyph g[5]; ps_glyph tg; // ps_point s1; // ps_point e1; ps_color c1= {1, 0, 0, 0.8f}; ps_color c2= {0, 0, 1, 0.8f}; //ps_color x = {0, 0, 0, 1}; ps_rect r = {150, 150, 400, 250}; /* ps_rect er = {150, 50, 100, 100}; ps_reset_clip(gc); ps_ellipse(gc, &er); ps_clip(gc); */ ps_point s = {100, 100}; ps_point e = {250, 100}; // ps_set_shadow(gc, 1, 1, 0.15f); // ps_set_shadow_color(gc, &x); ps_translate(gc, -200, -200); ps_rotate(gc, 0.02f); ps_translate(gc, 200, 200); // ps_set_text_antialias(gc, False); // double ds[] = {5, 3.1, 1.2, 5.5}; // ps_set_line_dash(gc, 0, ds, 4); ps_move_to(gc, &s); ps_line_to(gc, &e); ps_stroke(gc); // ps_set_text_render_type(gc, TEXT_TYPE_MONO); ps_set_text_matrix(gc, pn); ps_text_out_length(gc, 100, 100, text, strlen(text)); /* if (a) { // ps_font_set_size(pf, 16); ps_set_text_color(gc, &c1); a = 0; } else { // ps_font_set_size(pf, 26); ps_set_text_color(gc, &c2); a = 1; } */ //ps_matrix_rotate(pm, 0.13); ps_set_text_matrix(gc, pm); //ps_font_set_weight(pf, w); ps_set_text_color(gc, &c1); ps_set_text_stroke_color(gc, &c2); ps_rectangle(gc, &r); ps_stroke(gc); // ps_wide_text_out_length(gc, 200, 100, wtext, 5); old = ps_set_font(gc, pf); //ts = ps_text_extent(gc, wtext, 5); //fprintf(stderr, "w: %.2f - h: %.2f \n", ts.w, ts.h); /// s1.x = s1.y = 150; // e1.y = 150; // e1.x = 150 + ts.w; // ps_move_to(gc, &s1); // ps_line_to(gc, &e1); // ps_stroke(gc); ps_draw_text(gc, &r, wtext, 5, DRAW_TEXT_STROKE, TEXT_ALIGN_LEFT | TEXT_ALIGN_TOP); //ps_set_source_gradient(gc, gr); //ps_set_source_image(gc, pi); ps_set_source_pattern(gc, pt); ps_get_glyph(gc, 0x56fe, &tg); // ts = ps_glyph_extent(&tg); //fprintf(stderr, "w: %.2f - h: %.2f \n", ts.w, ts.h); ps_get_path_from_glyph(gc, &tg, pa); ps_set_path(gc, pa); ps_fill(gc); // ps_get_font_info(gc, &info); //fprintf(stderr, "h: %.2f - a: %.2f - d: %.2f - l: %.2f \n", info.size, info.ascent, info.descent, info.leading); ps_set_font(gc, old); ps_set_text_render_type(gc, TEXT_TYPE_STROKE); /* for (i=0; i<5; i++) ps_get_glyph(gc, gtext[i], &g[i]); ps_show_glyphs(gc, 200, 200, g, 5); */ }
int to_eps (const GEN_PAR *pg, const OUT_PAR *po) { PlotCmd cmd; HPGL_Pt pt1 = {0,0}; FILE *md; int pen_no=0, pencolor=0, err; PEN_W pensize; err = 0; if (!pg->quiet) Eprintf ("\n\n- Writing EPS code to \"%s\"\n", *po->outfile == '-' ? "stdout" : po->outfile); /* Init. of PostScript file: */ if (*po->outfile != '-') { if ((md = fopen(po->outfile, "w")) == NULL) { PError("hp2xx (eps)"); return ERROR; } } else md = stdout; /* PS header */ pensize = pt.width[DEFAULT_PEN_NO]; /* Default pen */ ps_init (pg, po, md, pensize); if (pensize > 0.05) fprintf(md," %6.3f W\n", pensize); /* Factor for transformation of HP coordinates to mm */ xcoord2mm = po->width / (po->xmax - po->xmin); ycoord2mm = po->height / (po->ymax - po->ymin); xmin = po->xmin; ymin = po->ymin; /** ** Command loop: While temporary file not empty: process command. **/ while ((cmd = PlotCmd_from_tmpfile()) != CMD_EOF) { switch (cmd) { case NOP: break; case SET_PEN: if ((pen_no = fgetc(pg->td)) == EOF) { PError("Unexpected end of temp. file: "); err = ERROR; goto EPS_exit; } pensize = pt.width[pen_no]; pencolor = pt.color[pen_no]; break; case DEF_PW: if(!load_pen_width_table(pg->td)) { PError("Unexpected end of temp. file"); err = ERROR; goto EPS_exit; } pensize=pt.width[pen_no]; break; case DEF_PC: err=load_pen_color_table(pg->td); if (err<0) { PError("Unexpected end of temp. file"); err = ERROR; goto EPS_exit; } if (err==pencolor) pencolor *=-1; /*current pen changed*/ break; case DEF_LA: if(load_line_attr(pg->td) <0) { PError("Unexpected end of temp. file"); err = ERROR; goto EPS_exit; } break; case MOVE_TO: ps_set_linewidth(pensize, &pt1, md); ps_set_linecap(CurrentLineAttr.End, pensize, &pt1, md); if(pencolor <0) { pencolor=pt.color[pen_no]; ps_set_color ( pt.clut[pencolor][0]/255.0, pt.clut[pencolor][1]/255.0, pt.clut[pencolor][2]/255.0, &pt1, md); } HPGL_Pt_from_tmpfile (&pt1); if (pensize > 0.05) ps_stroke_and_move_to (&pt1, md); break; case DRAW_TO: ps_set_linewidth(pensize, &pt1, md); ps_set_linecap(CurrentLineAttr.End, pensize, &pt1, md); if(pencolor <0) { pencolor=pt.color[pen_no]; ps_set_color ( pt.clut[pencolor][0]/255.0, pt.clut[pencolor][1]/255.0, pt.clut[pencolor][2]/255.0, &pt1, md); } HPGL_Pt_from_tmpfile (&pt1); if (pensize > 0.05) ps_line_to (&pt1, 'D', md); break; case PLOT_AT: ps_set_linewidth(pensize, &pt1, md); ps_set_linecap(CurrentLineAttr.End, pensize, &pt1, md); if(pencolor<0) { pencolor=pt.color[pen_no]; ps_set_color ( pt.clut[pencolor][0]/255.0, pt.clut[pencolor][1]/255.0, pt.clut[pencolor][2]/255.0, &pt1, md); } HPGL_Pt_from_tmpfile (&pt1); if (pensize > 0.05) { ps_line_to (&pt1, 'M', md); ps_line_to (&pt1, 'D', md); /* not sure whether this is needed */ ps_draw_dot(&pt1,pensize/2,md); } break; default: Eprintf ("Illegal cmd in temp. file!"); err = ERROR; goto EPS_exit; } } /* Finish up */ ps_end (md); EPS_exit: if (md != stdout) fclose (md); if (!pg->quiet) Eprintf ("\n"); return err; }