diff --git a/sch2fig/TODO b/sch2fig/TODO index fa411fb..0ae97d3 100644 --- a/sch2fig/TODO +++ b/sch2fig/TODO @@ -1,4 +1,3 @@ -- arcs aren't quite right yet - comment text orientation ? - better text size guessing - hierarchical labels diff --git a/sch2fig/fig.c b/sch2fig/fig.c index 23d4531..d160e6a 100644 --- a/sch2fig/fig.c +++ b/sch2fig/fig.c @@ -376,14 +376,13 @@ void fig_arc(int x, int y, int r, int sa, int ea, // Type Thick Depth StyleV FwdAr // SubTy Color Pen Cap BwdAr // Style FillCol AreaFil Dir points - printf("5 1 0 %d %d %d %d -1 %d 0.0 1 0 0 0 %d %d %d %d %d %d %d %d\n", + printf("5 1 0 %d %d %d %d -1 %d 0.0 1 1 0 0 %d %d %d %d %d %d %d %d\n", color == -1 ? 0 : WIDTH_COMP_DWG, color, fill_color, layer, fill_color == -1 ? -1 : 20, cx(x), cy(y), ax(x, y, r, sa), ay(x, y, r, sa), ax(x, y, r, ma), ay(x, y, r, ma), ax(x, y, r, ea), ay(x, y, r, ea)); - /* @@@ Note: with y flipped, we counter-clockwise becomes clockwise */ } diff --git a/sch2fig/lib.c b/sch2fig/lib.c index 8c0d2c4..ecc7578 100644 --- a/sch2fig/lib.c +++ b/sch2fig/lib.c @@ -461,8 +461,26 @@ static bool parse_arc(struct obj *obj, const char *line) &arc->thick, &arc->fill) != 9) return 0; - arc->start_a = a1 / 10; - arc->end_a = a2 / 10; + /* + * KiCad arcs can be clockwise or counter-clockwise. They must always + * be smaller than 180 degrees. + */ + + while (a1 < 0) + a1 += 3600; + while (a2 < 0) + a2 += 3600; + a1 %= 3600; + a2 %= 3600; + if (a2 < a1) + a2 += 3600; + assert(a2 - a1 != 1800); + if (a2 - a1 > 1800) + swap(a1, a2); + + arc->start_a = (a1 % 3600) / 10; + arc->end_a = (a2 % 3600) / 10; + return 1; }