From 9bb36b3ffd0247a97d34d118a01518e887d0f013 Mon Sep 17 00:00:00 2001 From: Vladimir Zhbanov Date: Fri, 27 Jan 2012 16:52:28 +0400 Subject: [PATCH 3/4] Printing using capstyle corresponding to object line end Use correct capstyle for each object instead of using one capstyle for all objects. Changed printing functions for of different objects. Added reasonable defaults in some cases: square caps for buses (as used for line ends displaying) butt caps for solid circles and for hatches default caps (from output-capstyle option) for nets and pins default caps (from line ends) for arcs, boxes, circles, and lines Additionally fixed lines' capstyle of placeholder for missing picture. --- libgeda/include/prototype_priv.h | 40 ++++++++++++------------ libgeda/share/prolog.ps | 15 ++++++--- libgeda/src/f_print.c | 9 ----- libgeda/src/o_arc_basic.c | 64 ++++++++++++++++++++----------------- libgeda/src/o_box_basic.c | 63 ++++++++++++++++++++---------------- libgeda/src/o_bus_basic.c | 4 +- libgeda/src/o_circle_basic.c | 34 ++++++++++++-------- libgeda/src/o_line_basic.c | 42 ++++++++++++++---------- libgeda/src/o_net_basic.c | 2 +- libgeda/src/o_picture.c | 6 ++-- libgeda/src/o_pin_basic.c | 4 +- 11 files changed, 152 insertions(+), 131 deletions(-) diff --git a/libgeda/include/prototype_priv.h b/libgeda/include/prototype_priv.h index 00d00f0..87f58b8 100644 --- a/libgeda/include/prototype_priv.h +++ b/libgeda/include/prototype_priv.h @@ -73,11 +73,11 @@ void m_transform_translate(TRANSFORM *transform, gdouble dx, gdouble dy); OBJECT *o_arc_read(TOPLEVEL *toplevel, const char buf[], unsigned int release_ver, unsigned int fileformat_ver, GError **err); char *o_arc_save(TOPLEVEL *toplevel, OBJECT *object); void o_arc_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, int origin_x, int origin_y); -void o_arc_print_solid(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, int arc_width, int length, int space, int origin_x, int origin_y); -void o_arc_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, int arc_width, int length, int space, int origin_x, int origin_y); -void o_arc_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, int arc_width, int length, int space, int origin_x, int origin_y); -void o_arc_print_center(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, int arc_width, int length, int space, int origin_x, int origin_y); -void o_arc_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, int arc_width, int length, int space, int origin_x, int origin_y); +void o_arc_print_solid(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, int arc_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_arc_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, int arc_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_arc_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, int arc_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_arc_print_center(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, int arc_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_arc_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, int arc_width, int capstyle, int length, int space, int origin_x, int origin_y); double o_arc_shortest_distance(OBJECT *object, int x, int y, int force_soild); gboolean o_arc_within_sweep(ARC *arc, gint x, gint y); void world_get_arc_bounds(TOPLEVEL *toplevel, OBJECT *object, int *left, int *top, int *right, int *bottom); @@ -103,11 +103,11 @@ void o_emit_change_notify(TOPLEVEL *toplevel, OBJECT *object); OBJECT *o_box_read(TOPLEVEL *toplevel, const char buf[], unsigned int release_ver, unsigned int fileformat_ver, GError **err); char *o_box_save(TOPLEVEL *toplevel, OBJECT *object); void o_box_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, int origin_x, int origin_y); -void o_box_print_solid(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int line_width, int length, int space, int origin_x, int origin_y); -void o_box_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int line_width, int length, int space, int origin_x, int origin_y); -void o_box_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int line_width, int length, int space, int origin_x, int origin_y); -void o_box_print_center(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int line_width, int length, int space, int origin_x, int origin_y); -void o_box_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int line_width, int length, int space, int origin_x, int origin_y); +void o_box_print_solid(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int line_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_box_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int line_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_box_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int line_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_box_print_center(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int line_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_box_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int line_width, int capstyle, int length, int space, int origin_x, int origin_y); void o_box_print_filled(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int fill_width, int angle1, int pitch1, int angle2, int pitch2, int origin_x, int origin_y); void o_box_print_mesh(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int fill_width, int angle1, int pitch1, int angle2, int pitch2, int origin_x, int origin_y); void o_box_print_hatch(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, int fill_width, int angle1, int pitch1, int angle2, int pitch2, int origin_x, int origin_y); @@ -128,11 +128,11 @@ void o_bus_recalc(TOPLEVEL *toplevel, OBJECT *o_current); OBJECT *o_circle_read(TOPLEVEL *toplevel, const char buf[], unsigned int release_ver, unsigned int fileformat_ver, GError **err); char *o_circle_save(TOPLEVEL *toplevel, OBJECT *object); void o_circle_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, int origin_x, int origin_y); -void o_circle_print_solid(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int circle_width, int length, int space, int origin_x, int origin_y); -void o_circle_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int circle_width, int length, int space, int origin_x, int origin_y); -void o_circle_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int circle_width, int length, int space, int origin_x, int origin_y); -void o_circle_print_center(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int circle_width, int length, int space, int origin_x, int origin_y); -void o_circle_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int circle_width, int length, int space, int origin_x, int origin_y); +void o_circle_print_solid(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int circle_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_circle_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int circle_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_circle_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int circle_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_circle_print_center(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int circle_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_circle_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int circle_width, int capstyle, int length, int space, int origin_x, int origin_y); void o_circle_print_filled(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int fill_width, int angle1, int pitch1, int angle2, int pitch2, int origin_x, int origin_y); void o_circle_print_mesh(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int fill_width, int angle1, int pitch1, int angle2, int pitch2, int origin_x, int origin_y); void o_circle_print_hatch(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, int fill_width, int angle1, int pitch1, int angle2, int pitch2, int origin_x, int origin_y); @@ -154,11 +154,11 @@ GList *o_complex_get_promotable (TOPLEVEL *toplevel, OBJECT *object, int detach) OBJECT *o_line_read(TOPLEVEL *toplevel, const const char buf[], unsigned int release_ver, unsigned int fileformat_ver, GError **err); char *o_line_save(TOPLEVEL *toplevel, OBJECT *object); void o_line_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, int origin_x, int origin_y); -void o_line_print_solid(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, int line_width, int length, int space, int origin_x, int origin_y); -void o_line_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, int line_width, int length, int space, int origin_x, int origin_y); -void o_line_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, int line_width, int length, int space, int origin_x, int origin_y); -void o_line_print_center(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, int line_width, int length, int space, int origin_x, int origin_y); -void o_line_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, int line_width, int length, int space, int origin_x, int origin_y); +void o_line_print_solid(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, int line_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_line_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, int line_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_line_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, int line_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_line_print_center(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, int line_width, int capstyle, int length, int space, int origin_x, int origin_y); +void o_line_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, int line_width, int capstyle, int length, int space, int origin_x, int origin_y); double o_line_shortest_distance(OBJECT *object, int x, int y, int force_soild); void world_get_line_bounds(TOPLEVEL *toplevel, OBJECT *object, int *left, int *top, int *right, int *bottom); gboolean o_line_get_position(TOPLEVEL *toplevel, gint *x, gint *y, OBJECT *object); diff --git a/libgeda/share/prolog.ps b/libgeda/share/prolog.ps index b8bb242..5acfd46 100644 --- a/libgeda/share/prolog.ps +++ b/libgeda/share/prolog.ps @@ -3,8 +3,9 @@ % Draw a line from the second coordinate to the first -% x2 y2 x1 y1 width line - +% x2 y2 x1 y1 width capstyle line - /line { + setlinecap setlinewidth % pop off first element and moveto moveto @@ -23,9 +24,10 @@ % Draw a dot-dashed line, a bunch of lined segments, % if the array element only has length two, draw a dot. -% [ [x2 y2 x1 y1] [x4 y4 x3 y3] [x5 y5] ... ] width dashed - +% [ [x2 y2 x1 y1] [x4 y4 x3 y3] [x5 y5] ... ] width capstyle dashed - /width 0 def /dashed { + setlinecap dup 2.0 div /width exch def setlinewidth % pop off each line segment and draw it as a dot or as a line @@ -37,18 +39,20 @@ } bind def % Draw an arc segment -% x y r ang1 ang2 width darc - +% x y r ang1 ang2 width capstyle darc - /darc { + setlinecap setlinewidth arc stroke } bind def % Draw a series of arc segment bits, if the array element only has a single % element in it, draw a dot. -% [ [sa1 ea1] [sa2 ea2] ... ] x y r width dashedarc - +% [ [sa1 ea1] [sa2 ea2] ... ] x y r width capstyle dashedarc - /x 0 def /y 0 def /dashedarc { + setlinecap dup /width exch def setlinewidth /r exch def @@ -84,8 +88,9 @@ } bind def % Draw a box -% width height x y linethickness box - +% width height x y linethickness capstyle box - /box { + setlinecap setlinewidth moveto exch dup 0 rlineto % w h, h w w 0 -- Draw bottom line diff --git a/libgeda/src/f_print.c b/libgeda/src/f_print.c index a8a8261..473b3a0 100644 --- a/libgeda/src/f_print.c +++ b/libgeda/src/f_print.c @@ -561,15 +561,6 @@ int f_print_stream(TOPLEVEL *toplevel, PAGE *page, FILE *fp) } - /* Set line end style */ - if (toplevel->print_output_capstyle == BUTT_CAP) { - fprintf(fp, "0 setlinecap\n"); - } else if (toplevel->print_output_capstyle == SQUARE_CAP) { - fprintf(fp, "2 setlinecap\n"); - } else if (toplevel->print_output_capstyle == ROUND_CAP) { - fprintf(fp, "1 setlinecap\n"); - } - /* Apply mils to postscript native units scaling to CTM */ fprintf(fp,"%f %f scale\n", 72.0 / 1000.0 , 72.0 / 1000.0); diff --git a/libgeda/src/o_arc_basic.c b/libgeda/src/o_arc_basic.c index 7586e1c..2655912 100644 --- a/libgeda/src/o_arc_basic.c +++ b/libgeda/src/o_arc_basic.c @@ -103,7 +103,7 @@ OBJECT *o_arc_new(TOPLEVEL *toplevel, o_get_line_end(toplevel->print_output_capstyle), TYPE_SOLID, 0, -1, -1); o_set_fill_options(toplevel, new_node, FILLING_HOLLOW, -1, -1, -1, -1, -1); - + o_arc_recalc(toplevel, new_node); /* new_node->graphical = arc; eventually */ @@ -609,6 +609,7 @@ void o_arc_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, { int x, y, radius, start_angle, end_angle; int color; + int capstyle; int arc_width, space, length; void (*outl_func)() = NULL; @@ -616,13 +617,14 @@ void o_arc_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, printf("got null in o_arc_print\n"); return; } - + x = o_current->arc->x; y = o_current->arc->y; radius = o_current->arc->width / 2; start_angle = o_current->arc->start_angle; end_angle = o_current->arc->end_angle; color = o_current->color; + capstyle = o_get_capstyle (o_current->line_end); /*! \note * Depending on the type of the line for this particular arc, the @@ -694,7 +696,7 @@ void o_arc_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, (*outl_func)(toplevel, fp, x - origin_x, y - origin_x, radius, start_angle, end_angle, - color, arc_width, length, space, origin_x, origin_y); + color, arc_width, capstyle, length, space, origin_x, origin_y); } @@ -719,6 +721,7 @@ void o_arc_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, * \param [in] angle2 * \param [in] color * \param [in] arc_width + * \param [in] capstyle * \param [in] length * \param [in] space * \param [in] origin_x @@ -728,7 +731,7 @@ void o_arc_print_solid(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, - int arc_width, int length, int space, + int arc_width, int capstyle, int length, int space, int origin_x, int origin_y) { f_print_set_color(toplevel, fp, color); @@ -739,9 +742,9 @@ void o_arc_print_solid(TOPLEVEL *toplevel, FILE *fp, angle2 = -angle2; } - fprintf(fp, "%d %d %d %d %d %d darc\n", + fprintf(fp, "%d %d %d %d %d %d %d darc\n", x,y, radius, angle1, angle1 + angle2, - arc_width); + arc_width, capstyle); } @@ -770,6 +773,7 @@ void o_arc_print_solid(TOPLEVEL *toplevel, FILE *fp, * \param [in] angle2 * \param [in] color * \param [in] arc_width + * \param [in] capstyle * \param [in] length * \param [in] space * \param [in] origin_x @@ -779,7 +783,7 @@ void o_arc_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, - int arc_width, int length, int space, + int arc_width, int capstyle, int length, int space, int origin_x, int origin_y) { int da, d; @@ -813,7 +817,7 @@ void o_arc_print_dotted(TOPLEVEL *toplevel, FILE *fp, x, y, radius, angle1, angle2, color, - arc_width, length, space, origin_x, origin_y); + arc_width, capstyle, length, space, origin_x, origin_y); return; } @@ -827,8 +831,8 @@ void o_arc_print_dotted(TOPLEVEL *toplevel, FILE *fp, d = d + da; } - fprintf(fp,"] %d %d %d %d dashedarc %% dotted\n", - x,y, radius, arc_width); + fprintf(fp,"] %d %d %d %d %d dashedarc %% dotted\n", + x,y, radius, arc_width, capstyle); } /*! \brief @@ -854,6 +858,7 @@ void o_arc_print_dotted(TOPLEVEL *toplevel, FILE *fp, * \param [in] angle2 * \param [in] color * \param [in] arc_width + * \param [in] capstyle * \param [in] length * \param [in] space * \param [in] origin_x @@ -863,13 +868,13 @@ void o_arc_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, - int arc_width, int length, int space, + int arc_width, int capstyle, int length, int space, int origin_x, int origin_y) { int da, db, a1, d; f_print_set_color(toplevel, fp, color); - + /*! \note * Depending on the radius of the arc, the space (resp. length) * parameter is changed into a small angle da (resp. db). @@ -900,10 +905,10 @@ void o_arc_print_dashed(TOPLEVEL *toplevel, FILE *fp, x, y, radius, angle1, angle2, color, - arc_width, length, space, origin_x, origin_y); + arc_width, capstyle, length, space, origin_x, origin_y); return; } - + fprintf(fp,"["); d = angle1; while ((d + da + db) < (angle1 + angle2)) { @@ -931,8 +936,8 @@ void o_arc_print_dashed(TOPLEVEL *toplevel, FILE *fp, a1, a1+da); - fprintf(fp,"] %d %d %d %d dashedarc %% dashed\n", - x,y, radius, arc_width); + fprintf(fp,"] %d %d %d %d %d dashedarc %% dashed\n", + x,y, radius, arc_width, capstyle); } @@ -959,6 +964,7 @@ void o_arc_print_dashed(TOPLEVEL *toplevel, FILE *fp, * \param [in] angle2 * \param [in] color * \param [in] arc_width + * \param [in] capstyle * \param [in] length * \param [in] space * \param [in] origin_x @@ -968,7 +974,7 @@ void o_arc_print_center(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, - int arc_width, int length, int space, + int arc_width, int capstyle, int length, int space, int origin_x, int origin_y) { int da, db, a1, d; @@ -1005,10 +1011,10 @@ void o_arc_print_center(TOPLEVEL *toplevel, FILE *fp, x, y, radius, angle1, angle2, color, - arc_width, length, space, origin_x, origin_y); + arc_width, capstyle, length, space, origin_x, origin_y); return; } - + fprintf(fp, "["); d = angle1; while ((d + da + 2 * db) < (angle1 + angle2)) { @@ -1054,9 +1060,9 @@ void o_arc_print_center(TOPLEVEL *toplevel, FILE *fp, fprintf(fp,"[%d] ",d); } - - fprintf(fp,"] %d %d %d %d dashedarc %% center\n", - x,y, radius, arc_width); + + fprintf(fp,"] %d %d %d %d %d dashedarc %% center\n", + x,y, radius, arc_width, capstyle); } /*! \note @@ -1087,6 +1093,7 @@ void o_arc_print_center(TOPLEVEL *toplevel, FILE *fp, * \param [in] angle2 * \param [in] color * \param [in] arc_width + * \param [in] capstyle * \param [in] length * \param [in] space * \param [in] origin_x @@ -1096,7 +1103,7 @@ void o_arc_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int angle1, int angle2, int color, - int arc_width, int length, int space, + int arc_width, int capstyle, int length, int space, int origin_x, int origin_y) { int da, db, a1, d; @@ -1133,7 +1140,7 @@ void o_arc_print_phantom(TOPLEVEL *toplevel, FILE *fp, x, y, radius, angle1, angle2, color, - arc_width, length, space, origin_x, origin_y); + arc_width, capstyle, length, space, origin_x, origin_y); return; } @@ -1205,12 +1212,11 @@ void o_arc_print_phantom(TOPLEVEL *toplevel, FILE *fp, */ fprintf(fp,"[%d] ",d); - - + } - - fprintf(fp,"] %d %d %d %d dashedarc %% phantom\n", - x,y, radius, arc_width); + + fprintf(fp,"] %d %d %d %d %d dashedarc %% phantom\n", + x,y, radius, arc_width, capstyle); } /*! \brief Calculates the distance between the given point and the closest diff --git a/libgeda/src/o_box_basic.c b/libgeda/src/o_box_basic.c index c956441..05ca5f6 100644 --- a/libgeda/src/o_box_basic.c +++ b/libgeda/src/o_box_basic.c @@ -672,7 +672,7 @@ void o_box_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, { int x, y, width, height; int color; - int line_width, length, space; + int line_width, capstyle, length, space; int fill_width, angle1, pitch1, angle2, pitch2; void (*outl_func)() = NULL; void (*fill_func)() = NULL; @@ -687,6 +687,7 @@ void o_box_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, width = abs(o_current->box->lower_x - o_current->box->upper_x); height = abs(o_current->box->lower_y - o_current->box->upper_y); color = o_current->color; + capstyle = o_get_capstyle (o_current->line_end); /*! \note * Depending on the type of the line for this particular box, the @@ -753,6 +754,7 @@ void o_box_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, x, y, width, height, color, line_width, + capstyle, length, space, origin_x, origin_y); @@ -841,6 +843,7 @@ void o_box_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, * \param [in] height Height of BOX. * \param [in] color BOX color. * \param [in] line_width BOX Line width. + * \param [in] capstyle BOX Line capstyle. * \param [in] length Dashed line length. * \param [in] space Amount of space between dashes. * \param [in] origin_x Page x coordinate to place BOX OBJECT. @@ -851,7 +854,7 @@ o_box_print_solid(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, - int line_width, int length, int space, + int line_width, int capstyle, int length, int space, int origin_x, int origin_y) { int x1, y1; @@ -864,22 +867,22 @@ o_box_print_solid(TOPLEVEL *toplevel, FILE *fp, o_line_print_solid(toplevel, fp, x1, y1, x1 + width, y1, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_solid(toplevel, fp, x1 + width, y1, x1 + width, y1 + height, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_solid(toplevel, fp, x1 + width, y1 + height, x1, y1 + height, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_solid(toplevel, fp, x1, y1 + height, x1, y1, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); } @@ -905,6 +908,7 @@ o_box_print_solid(TOPLEVEL *toplevel, FILE *fp, * \param [in] height Height of BOX. * \param [in] color BOX color. * \param [in] line_width BOX Line width. + * \param [in] capstyle BOX Line capstyle. * \param [in] length Dashed line length. * \param [in] space Amount of space between dashes. * \param [in] origin_x Page x coordinate to place BOX OBJECT. @@ -914,7 +918,7 @@ void o_box_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, - int line_width, int length, int space, + int line_width, int capstyle, int length, int space, int origin_x, int origin_y) { int x1, y1; @@ -927,22 +931,22 @@ void o_box_print_dotted(TOPLEVEL *toplevel, FILE *fp, o_line_print_dotted(toplevel, fp, x1, y1, x1 + width, y1, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_dotted(toplevel, fp, x1 + width, y1, x1 + width, y1 + height, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_dotted(toplevel, fp, x1 + width, y1 + height, x1, y1 + height, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_dotted(toplevel, fp, x1, y1 + height, x1, y1, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); } @@ -967,6 +971,7 @@ void o_box_print_dotted(TOPLEVEL *toplevel, FILE *fp, * \param [in] height Height of BOX. * \param [in] color BOX color. * \param [in] line_width BOX Line width. + * \param [in] capstyle BOX Line capstyle. * \param [in] length Dashed line length. * \param [in] space Amount of space between dashes. * \param [in] origin_x Page x coordinate to place BOX OBJECT. @@ -976,7 +981,7 @@ void o_box_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, - int line_width, int length, int space, + int line_width, int capstyle, int length, int space, int origin_x, int origin_y) { int x1, y1; @@ -990,22 +995,22 @@ void o_box_print_dashed(TOPLEVEL *toplevel, FILE *fp, o_line_print_dashed(toplevel, fp, x1, y1, x1 + width, y1, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_dashed(toplevel, fp, x1 + width, y1, x1 + width, y1 + height, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_dashed(toplevel, fp, x1 + width, y1 + height, x1, y1 + height, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_dashed(toplevel, fp, x1, y1 + height, x1, y1, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); } @@ -1030,6 +1035,7 @@ void o_box_print_dashed(TOPLEVEL *toplevel, FILE *fp, * \param [in] height Height of BOX. * \param [in] color BOX color. * \param [in] line_width BOX Line width. + * \param [in] capstyle BOX Line capstyle. * \param [in] length Dashed line length. * \param [in] space Amount of space between dashes. * \param [in] origin_x Page x coordinate to place BOX OBJECT. @@ -1039,7 +1045,7 @@ void o_box_print_center(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, - int line_width, int length, int space, + int line_width, int capstyle, int length, int space, int origin_x, int origin_y) { int x1, y1; @@ -1052,22 +1058,22 @@ void o_box_print_center(TOPLEVEL *toplevel, FILE *fp, o_line_print_center(toplevel, fp, x1, y1, x1 + width, y1, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_center(toplevel, fp, x1 + width, y1, x1 + width, y1 + height, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_center(toplevel, fp, x1 + width, y1 + height, x1, y1 + height, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_center(toplevel, fp, x1, y1 + height, x1, y1, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); } @@ -1092,6 +1098,7 @@ void o_box_print_center(TOPLEVEL *toplevel, FILE *fp, * \param [in] height Height of BOX. * \param [in] color BOX color. * \param [in] line_width BOX Line width. + * \param [in] capstyle BOX Line capstyle. * \param [in] length Dashed line length. * \param [in] space Amount of space between dashes. * \param [in] origin_x Page x coordinate to place BOX OBJECT. @@ -1101,7 +1108,7 @@ void o_box_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x, int y, int width, int height, int color, - int line_width, int length, int space, + int line_width, int capstyle, int length, int space, int origin_x, int origin_y) { int x1, y1; @@ -1114,22 +1121,22 @@ void o_box_print_phantom(TOPLEVEL *toplevel, FILE *fp, o_line_print_phantom(toplevel, fp, x1, y1, x1 + width, y1, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_phantom(toplevel, fp, x1 + width, y1, x1 + width, y1 + height, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_phantom(toplevel, fp, x1 + width, y1 + height, x1, y1 + height, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); o_line_print_phantom(toplevel, fp, x1, y1 + height, x1, y1, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); } @@ -1305,10 +1312,10 @@ void o_box_print_hatch(TOPLEVEL *toplevel, FILE *fp, for(index=0; indexlen; index++) { LINE *line = &g_array_index(lines, LINE, index); - fprintf(fp,"%d %d %d %d %d line\n", + fprintf(fp,"%d %d %d %d %d %d line\n", line->x[0], line->y[0], line->x[1], line->y[1], - fill_width); + fill_width, BUTT_CAP); } g_array_free(lines, TRUE); diff --git a/libgeda/src/o_bus_basic.c b/libgeda/src/o_bus_basic.c index 58d4db6..ac0682c 100644 --- a/libgeda/src/o_bus_basic.c +++ b/libgeda/src/o_bus_basic.c @@ -304,8 +304,8 @@ void o_bus_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, x2 = o_current->line->x[1]-origin_x, y2 = o_current->line->y[1]-origin_y; - fprintf(fp, "%d %d %d %d %d line\n", - x1,y1,x2,y2,bus_width); + fprintf(fp, "%d %d %d %d %d %d line\n", + x1,y1,x2,y2,bus_width,SQUARE_CAP); } diff --git a/libgeda/src/o_circle_basic.c b/libgeda/src/o_circle_basic.c index faba12c..497c967 100644 --- a/libgeda/src/o_circle_basic.c +++ b/libgeda/src/o_circle_basic.c @@ -580,7 +580,7 @@ void o_circle_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, { int x, y, radius; int color; - int circle_width, length, space; + int circle_width, capstyle, length, space; int fill_width, angle1, pitch1, angle2, pitch2; void (*outl_func)() = NULL; void (*fill_func)() = NULL; @@ -595,6 +595,7 @@ void o_circle_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, radius = o_current->circle->radius; color = o_current->color; + capstyle = o_get_capstyle (o_current->line_end); /* * Depending on the type of the line for this particular circle, the @@ -660,7 +661,7 @@ void o_circle_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, x - origin_x, y - origin_y, radius, color, - circle_width, length, space, + circle_width, capstyle, length, space, origin_x, origin_y); /* @@ -747,6 +748,7 @@ void o_circle_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, * \param [in] radius Circle radius. * \param [in] color Circle color. * \param [in] circle_width Width of circle. + * \param [in] capstyle Capstyle of circle lines. * \param [in] length (unused). * \param [in] space (unused). * \param [in] origin_x Page x coordinate to place circle OBJECT. @@ -755,7 +757,7 @@ void o_circle_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, void o_circle_print_solid(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, - int circle_width, int length, int space, + int circle_width, int capstyle, int length, int space, int origin_x, int origin_y) { @@ -763,7 +765,7 @@ void o_circle_print_solid(TOPLEVEL *toplevel, FILE *fp, x, y, radius, 0, FULL_CIRCLE / 64, color, - circle_width, -1, -1, + circle_width, BUTT_CAP, -1, -1, origin_x, origin_y); } @@ -790,6 +792,7 @@ void o_circle_print_solid(TOPLEVEL *toplevel, FILE *fp, * \param [in] radius Circle radius. * \param [in] color Circle color. * \param [in] circle_width Width of circle. + * \param [in] capstyle Capstyle of circle lines. * \param [in] length (unused). * \param [in] space Space between dots. * \param [in] origin_x Page x coordinate to place circle OBJECT. @@ -798,7 +801,7 @@ void o_circle_print_solid(TOPLEVEL *toplevel, FILE *fp, void o_circle_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, - int circle_width, int length, int space, + int circle_width, int capstyle, int length, int space, int origin_x, int origin_y) { @@ -806,7 +809,7 @@ void o_circle_print_dotted(TOPLEVEL *toplevel, FILE *fp, x, y, radius, 0, FULL_CIRCLE / 64, color, - circle_width, -1, space, + circle_width, capstyle, -1, space, origin_x, origin_y); } @@ -831,6 +834,7 @@ void o_circle_print_dotted(TOPLEVEL *toplevel, FILE *fp, * \param [in] radius Circle radius. * \param [in] color Circle color. * \param [in] circle_width Width of circle. + * \param [in] capstyle Capstyle of circle lines. * \param [in] length Length of dashed lines. * \param [in] space Space between dashes. * \param [in] origin_x Page x coordinate to place circle OBJECT. @@ -840,7 +844,7 @@ void o_circle_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, - int circle_width, int length, int space, + int circle_width, int capstyle, int length, int space, int origin_x, int origin_y) { @@ -848,7 +852,7 @@ void o_circle_print_dashed(TOPLEVEL *toplevel, FILE *fp, x, y, radius, 0, FULL_CIRCLE / 64, color, - circle_width, length, space, + circle_width, capstyle, length, space, origin_x, origin_y); } @@ -873,6 +877,7 @@ void o_circle_print_dashed(TOPLEVEL *toplevel, FILE *fp, * \param [in] radius Circle radius. * \param [in] color Circle color. * \param [in] circle_width Width of circle. + * \param [in] capstyle Capstyle of circle lines. * \param [in] length Length of dashed lines. * \param [in] space Space between dashes. * \param [in] origin_x Page x coordinate to place circle OBJECT. @@ -882,7 +887,7 @@ void o_circle_print_center(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, - int circle_width, int length, int space, + int circle_width, int capstyle, int length, int space, int origin_x, int origin_y) { @@ -890,7 +895,7 @@ void o_circle_print_center(TOPLEVEL *toplevel, FILE *fp, x, y, radius, 0, FULL_CIRCLE / 64, color, - circle_width, length, space, + circle_width, capstyle, length, space, origin_x, origin_y); } @@ -915,6 +920,7 @@ void o_circle_print_center(TOPLEVEL *toplevel, FILE *fp, * \param [in] radius Circle radius. * \param [in] color Circle color. * \param [in] circle_width Width of circle. + * \param [in] capstyle Capstyle of circle lines. * \param [in] length Length of dashed lines. * \param [in] space Space between dashes. * \param [in] origin_x Page x coordinate to place circle OBJECT. @@ -924,7 +930,7 @@ void o_circle_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x, int y, int radius, int color, - int circle_width, int length, int space, + int circle_width, int capstyle, int length, int space, int origin_x, int origin_y) { @@ -932,7 +938,7 @@ void o_circle_print_phantom(TOPLEVEL *toplevel, FILE *fp, x, y, radius, 0, FULL_CIRCLE / 64, color, - circle_width, length, space, + circle_width, capstyle, length, space, origin_x, origin_y); } @@ -1096,10 +1102,10 @@ void o_circle_print_hatch(TOPLEVEL *toplevel, FILE *fp, for(index=0; indexlen; index++) { LINE *line = &g_array_index(lines, LINE, index); - fprintf(fp,"%d %d %d %d %d line\n", + fprintf(fp,"%d %d %d %d %d %d line\n", line->x[0], line->y[0], line->x[1], line->y[1], - fill_width); + fill_width, BUTT_CAP); } g_array_free(lines, TRUE); diff --git a/libgeda/src/o_line_basic.c b/libgeda/src/o_line_basic.c index 950d505..5a16054 100644 --- a/libgeda/src/o_line_basic.c +++ b/libgeda/src/o_line_basic.c @@ -532,9 +532,10 @@ void o_line_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, { int x1, y1, x2, y2; int color; + int capstyle; int line_width, length, space; void (*outl_func)() = NULL; - + if (o_current == NULL) { printf("got null in o_line_print\n"); return; @@ -545,6 +546,7 @@ void o_line_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, x2 = o_current->line->x[1]; y2 = o_current->line->y[1]; color = o_current->color; + capstyle = o_get_capstyle (o_current->line_end); /* * Depending on the type of the line for this particular line, the @@ -610,7 +612,7 @@ void o_line_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, x1 - origin_x, y1 - origin_y, x2 - origin_x, y2 - origin_y, color, - line_width, length, space, + line_width, capstyle, length, space, origin_x, origin_y); } @@ -631,6 +633,7 @@ void o_line_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, * \param [in] y2 Lower y coordinate. * \param [in] color Line color. * \param [in] line_width Width of line. + * \param [in] capstyle Capstyle of line. * \param [in] length (unused). * \param [in] space (unused). * \param [in] origin_x Page x coordinate to place line OBJECT. @@ -639,13 +642,13 @@ void o_line_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, void o_line_print_solid(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, - int line_width, int length, int space, + int line_width, int capstyle, int length, int space, int origin_x, int origin_y) { f_print_set_color(toplevel, fp, color); - - fprintf(fp,"%d %d %d %d %d line\n", - x1,y1,x2,y2, line_width); + + fprintf(fp,"%d %d %d %d %d %d line\n", + x1,y1,x2,y2, line_width, capstyle); } /*! \brief Print a dotted line to Postscript document. @@ -672,6 +675,7 @@ void o_line_print_solid(TOPLEVEL *toplevel, FILE *fp, * \param [in] y2 Lower y coordinate. * \param [in] color Line color. * \param [in] line_width Width of line. + * \param [in] capstyle Capstyle of circle lines. * \param [in] length (unused). * \param [in] space Space between dots. * \param [in] origin_x Page x coordinate to place line OBJECT. @@ -680,7 +684,7 @@ void o_line_print_solid(TOPLEVEL *toplevel, FILE *fp, void o_line_print_dotted(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, - int line_width, int length, int space, + int line_width, int capstyle, int length, int space, int origin_x, int origin_y) { double dx, dy, l, d; @@ -724,9 +728,8 @@ void o_line_print_dotted(TOPLEVEL *toplevel, FILE *fp, xa = xa + dx1; ya = ya + dy1; } - - fprintf(fp,"] %d dashed\n",line_width); - + + fprintf(fp,"] %d %d dashed\n", line_width, capstyle); } @@ -753,6 +756,7 @@ void o_line_print_dotted(TOPLEVEL *toplevel, FILE *fp, * \param [in] y2 Lower y coordinate. * \param [in] color Line color. * \param [in] line_width Width of line. + * \param [in] capstyle Capstyle of line. * \param [in] length Length of a dash. * \param [in] space Space between dashes. * \param [in] origin_x Page x coordinate to place line OBJECT. @@ -761,7 +765,7 @@ void o_line_print_dotted(TOPLEVEL *toplevel, FILE *fp, void o_line_print_dashed(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, - int line_width, int length, int space, + int line_width, int capstyle, int length, int space, int origin_x, int origin_y) { double dx, dy, l, d; @@ -828,7 +832,7 @@ void o_line_print_dashed(TOPLEVEL *toplevel, FILE *fp, (int) xa, (int) ya, (int) xb, (int) yb); - fprintf(fp,"] %d dashed\n", line_width); + fprintf(fp,"] %d %d dashed\n", line_width, capstyle); } @@ -856,6 +860,7 @@ void o_line_print_dashed(TOPLEVEL *toplevel, FILE *fp, * \param [in] y2 Lower y coordinate. * \param [in] color Line color. * \param [in] line_width Width of line. + * \param [in] capstyle Capstyle of line. * \param [in] length Length of a dash. * \param [in] space Space between dashes. * \param [in] origin_x Page x coordinate to place line OBJECT. @@ -864,7 +869,7 @@ void o_line_print_dashed(TOPLEVEL *toplevel, FILE *fp, void o_line_print_center(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, - int line_width, int length, int space, + int line_width, int capstyle, int length, int space, int origin_x, int origin_y) { double dx, dy, l, d; @@ -955,8 +960,8 @@ void o_line_print_center(TOPLEVEL *toplevel, FILE *fp, (int) xb, (int) yb); } - - fprintf(fp,"] %d dashed\n", line_width); + + fprintf(fp,"] %d %d dashed\n", line_width, capstyle); /* * A dot is represented by a filled circle. Position of the circle is @@ -988,6 +993,7 @@ void o_line_print_center(TOPLEVEL *toplevel, FILE *fp, * \param [in] y2 Lower y coordinate. * \param [in] color Line color. * \param [in] line_width Width of line. + * \param [in] capstyle Capstyle of line. * \param [in] length Length of a dash. * \param [in] space Space between dashes. * \param [in] origin_x Page x coordinate to place line OBJECT. @@ -996,7 +1002,7 @@ void o_line_print_center(TOPLEVEL *toplevel, FILE *fp, void o_line_print_phantom(TOPLEVEL *toplevel, FILE *fp, int x1, int y1, int x2, int y2, int color, - int line_width, int length, int space, + int line_width, int capstyle, int length, int space, int origin_x, int origin_y) { double dx, dy, l, d; @@ -1117,8 +1123,8 @@ void o_line_print_phantom(TOPLEVEL *toplevel, FILE *fp, } } - - fprintf(fp,"] %d dashed\n", line_width); + + fprintf(fp,"] %d %d dashed\n", line_width, capstyle); } diff --git a/libgeda/src/o_net_basic.c b/libgeda/src/o_net_basic.c index 96f0638..b6b4412 100644 --- a/libgeda/src/o_net_basic.c +++ b/libgeda/src/o_net_basic.c @@ -287,7 +287,7 @@ void o_net_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, x2 = o_current->line->x[1] - origin_x, y2 = o_current->line->y[1] - origin_y; - fprintf(fp, "%d %d %d %d %d line\n", x1,y1,x2,y2,net_width); + fprintf(fp, "%d %d %d %d %d %d line\n", x1,y1,x2,y2,net_width,toplevel->print_output_capstyle); } diff --git a/libgeda/src/o_picture.c b/libgeda/src/o_picture.c index b9c8899..33def94 100644 --- a/libgeda/src/o_picture.c +++ b/libgeda/src/o_picture.c @@ -881,11 +881,11 @@ void o_picture_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, if (image == NULL) { int line_width = (toplevel->line_style == THICK) ? LINE_WIDTH : 2; o_box_print_solid (toplevel, fp, x1, y1, width, height, - DEFAULT_COLOR, line_width, -1, -1, -1, -1); + DEFAULT_COLOR, line_width, SQUARE_CAP, -1, -1, -1, -1); o_line_print_solid (toplevel, fp, x1, y1, x1+width, y1+height, - DEFAULT_COLOR, line_width, -1, -1, -1, -1); + DEFAULT_COLOR, line_width, ROUND_CAP, -1, -1, -1, -1); o_line_print_solid (toplevel, fp, x1+width, y1, x1, y1+height, - DEFAULT_COLOR, line_width, -1, -1, -1, -1); + DEFAULT_COLOR, line_width, ROUND_CAP, -1, -1, -1, -1); return; } diff --git a/libgeda/src/o_pin_basic.c b/libgeda/src/o_pin_basic.c index a1e1c2c..22bef1c 100644 --- a/libgeda/src/o_pin_basic.c +++ b/libgeda/src/o_pin_basic.c @@ -303,8 +303,8 @@ void o_pin_print(TOPLEVEL *toplevel, FILE *fp, OBJECT *o_current, pin_width = o_current->line_width; } - fprintf(fp, "%d %d %d %d %d line\n",x1,y1,x2,y2,pin_width); - + fprintf(fp, "%d %d %d %d %d %d line\n",x1,y1,x2,y2,pin_width,toplevel->print_output_capstyle); + } /*! \brief rotate a pin object around a centerpoint -- 1.7.7.3