From 053a00f4ccb4f5793d3bff3fc85f505108fef3bc Mon Sep 17 00:00:00 2001
From: Ivan Radic <ivnrdc@gmail.com>
Date: Wed, 29 May 2013 21:44:48 +0200
Subject: [PATCH] Correct svg arc output.

---
 examples/testSVG.c |   21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/examples/testSVG.c b/examples/testSVG.c
index 00d99fe..7cc15fc 100644
--- a/examples/testSVG.c
+++ b/examples/testSVG.c
@@ -114,12 +114,33 @@ output_ARC(Dwg_Object* obj)
   double y_start = arc->center.y + arc->radius * sin(arc->start_angle);
   double x_end = arc->center.x + arc->radius * cos(arc->end_angle);
   double y_end = arc->center.y + arc->radius * sin(arc->end_angle);
+#if 0
   //Assuming clockwise arcs.
   int large_arc = (arc->end_angle - arc->start_angle < 3.1415) ? 0 : 1;
+
   printf(
       "\t<path id=\"dwg-object-%d\" d=\"M %f,%f A %f,%f 0 %d 0 %f,%f\" fill=\"none\" stroke=\"blue\" stroke-width=\"%f\" />\n",
       obj->index, transform_X(x_start), transform_Y(y_start), arc->radius, arc->radius,
       large_arc, transform_X(x_end), transform_Y(y_end), 0.1);
+#else
+  double angle;
+
+  int large_arc = 0, sweep = 1;
+
+  if (arc->end_angle < arc->start_angle) {
+    angle = 2 * M_PI - arc->start_angle + arc->end_angle;
+  } else {
+    angle = arc->end_angle - arc->start_angle;
+  }
+  if (angle > M_PI) {
+    large_arc = 1;
+  }
+
+  printf(
+      "\t<path id=\"dwg-object-%d\" d=\"M %f,%f A %f,%f 0 %d,%d %f,%f\" fill=\"none\" stroke=\"blue\" stroke-width=\"%f\" />\n",
+      obj->index, transform_X(x_end), transform_Y(y_end), arc->radius, arc->radius,
+      large_arc, sweep, transform_X(x_start), transform_Y(y_start), 0.1);
+#endif
 }
 
 void
-- 
1.7.9.5

