PATCH: cairo-www: add ellipses cookbook example

Lawrence D'Oliveiro <[email protected]>
Newsgroups gmane.comp.lib.cairo
Organization Geek Central
Message-ID <[email protected]>
-- 
cairo mailing list
[email protected]
http://lists.cairographics.org/mailman/listinfo/cairo
0001-add-ellipses-cookbook-example.patch (text/x-patch, 18.8 KB)
From ef369fe63ffaf504ca66496047e667e39e17bc2c Mon Sep 17 00:00:00 2001
From: Lawrence D'Oliveiro <[email protected]>
Date: Wed, 23 Dec 2015 03:11:00 +0000
Subject: [PATCH] add ellipses cookbook example

---
 src/cookbook.mdwn                       |   1 +
 src/cookbook/ellipses.mdwn              | 114 ++++++++++++++++++++++++++++++++
 src/cookbook/ellipses/ellipse_right.png | Bin 0 -> 5649 bytes
 src/cookbook/ellipses/ellipse_wrong.png | Bin 0 -> 5685 bytes
 4 files changed, 115 insertions(+)
 create mode 100644 src/cookbook/ellipses.mdwn
 create mode 100644 src/cookbook/ellipses/ellipse_right.png
 create mode 100644 src/cookbook/ellipses/ellipse_wrong.png

diff --git a/src/cookbook.mdwn b/src/cookbook.mdwn
index f164bca..9e5471b 100644
--- a/src/cookbook.mdwn
+++ b/src/cookbook.mdwn
@@ -4,6 +4,7 @@
 
 + General Drawing
     * [[Rounded_rectangles|roundedrectangles]]
+    * [[Ellipses With Uniform Stroke Width|ellipses]]
     * [[A_description_of_compositing_operators_in_Cairo|operators]]
 
 + Matrix Transformations
diff --git a/src/cookbook/ellipses.mdwn b/src/cookbook/ellipses.mdwn
new file mode 100644
index 0000000..8779e47
--- /dev/null
+++ b/src/cookbook/ellipses.mdwn
@@ -0,0 +1,114 @@
+[[!meta title="Ellipses With Uniform Stroke Width"]]
+
+Cairo has built-in calls for drawing arcs of circles. The following discusses how to use them
+to draw ellipses.
+
+##Common Setup
+
+The following examples will be drawing an ellipse within an image area defined as follows:
+
+    const int img_width = 256;
+    const int img_height = 256;
+    cairo_surface_t * const pix = cairo_image_surface_create
+      (
+        /*format =*/ CAIRO_FORMAT_RGB24,
+        /*width =*/ img_width,
+        /*height =*/ img_height
+      );
+    cairo_t * const cr = cairo_create(pix);
+
+The ellipse will be drawn as a circle centred within the drawing area. Before the circle
+is drawn, the following scaling is applied:
+
+    cairo_translate(cr, img_width / 2.0, img_height / 2.0);
+    cairo_scale(cr, 0.5, 1);
+    cairo_translate(cr, - img_width / 2.0, - img_height / 2.0);
+
+This shrinks subsequent drawing operations (including path
+construction) horizontally by a factor of 0.5 [about the
+image centre](../transform_about_point), to turn the circle into an
+ellipse. The ellipse itself is then constructed very simply:
+
+    cairo_arc
+      (
+        /*cr =*/ cr,
+        /*xc =*/ img_width / 2.0,
+        /*yc =*/ img_height / 2.0,
+        /*radius =*/ img_width / 3.0,
+        /*angle1 =*/ 0,
+        /*angle2 =*/ 2 * M_PI
+      );
+
+The following examples use a thick line width (20 units) to make the problem
+(and its solution) clearer.
+
+##The Wrong Way
+
+The obvious way to turn a circle into an ellipse is to apply non-uniform scaling to it.
+This works, but is prone to an interesting side-effect:
+
+    cairo_set_source_rgb(cr, 1, 1, 1);
+    cairo_paint(cr);
+    cairo_set_source_rgb(cr, 0, 0, 0);
+    cairo_translate(cr, img_width / 2.0, img_height / 2.0);
+    cairo_scale(cr, 0.5, 1);
+    cairo_translate(cr, - img_width / 2.0, - img_height / 2.0);
+    cairo_new_path(cr);
+    cairo_arc
+      (
+        /*cr =*/ cr,
+        /*xc =*/ img_width / 2.0,
+        /*yc =*/ img_height / 2.0,
+        /*radius =*/ img_width / 3.0,
+        /*angle1 =*/ 0,
+        /*angle2 =*/ 2 * M_PI
+      );
+    cairo_set_line_width(cr, 20.0);
+    cairo_stroke(cr);
+
+Example output:
+
+[[!img "ellipse_wrong.png" link="no"]]
+
+The problem is that the CTM also affects the `cairo_stroke` call. Thus, where the
+curve is narrow, the stroke gets narrow as well. This is probably not what you want.
+
+##The Right Way
+
+The answer is to apply the non-uniform scaling *only during the path construction*,
+and remove it before calling `cairo_stroke`. Here the CTM is saved before path
+construction, and restored after it:
+
+    cairo_set_source_rgb(cr, 1, 1, 1);
+    cairo_paint(cr);
+    cairo_set_source_rgb(cr, 0, 0, 0);
+      {
+        cairo_matrix_t save_matrix;
+        cairo_get_matrix(cr, &save_matrix);
+        cairo_translate(cr, img_width / 2.0, img_height / 2.0);
+        cairo_scale(cr, 0.5, 1);
+        cairo_translate(cr, - img_width / 2.0, - img_height / 2.0);
+        cairo_new_path(cr);
+        cairo_arc
+          (
+            /*cr =*/ cr,
+            /*xc =*/ img_width / 2.0,
+            /*yc =*/ img_height / 2.0,
+            /*radius =*/ img_width / 3.0,
+            /*angle1 =*/ 0,
+            /*angle2 =*/ 2 * M_PI
+          );
+        cairo_set_matrix(cr, &save_matrix);
+      }
+    cairo_set_line_width(cr, 20.0);
+    cairo_stroke(cr);
+
+Example output:
+
+[[!img "ellipse_right.png" link="no"]]
+
+Much better, don’t you think?
+
+Alternatively you may call `cairo_save` to save the entire graphics state before
+the path construction, and `cairo_restore` afterwards, before the `cairo_stroke`
+call. Cairo’s saved graphics state includes the CTM, but not the current path itself.
diff --git a/src/cookbook/ellipses/ellipse_right.png b/src/cookbook/ellipses/ellipse_right.png
new file mode 100644
index 0000000000000000000000000000000000000000..e2041bfc7b0481d1a23732b7d03c14d61696b5ae
GIT binary patch
literal 5649
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

literal 0
HcmV?d00001

diff --git a/src/cookbook/ellipses/ellipse_wrong.png b/src/cookbook/ellipses/ellipse_wrong.png
new file mode 100644
index 0000000000000000000000000000000000000000..720eaf860886cb5cf4503db733eb25e10fcff02d
GIT binary patch
literal 5685
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

literal 0
HcmV?d00001

-- 
2.6.0
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.