rmagick 1.7.4 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rmagick might be problematic. Click here for more details.

Files changed (130) hide show
  1. data/ChangeLog +10 -2
  2. data/README.html +284 -290
  3. data/README.txt +298 -307
  4. data/configure +180 -11
  5. data/configure.ac +18 -2
  6. data/doc/comtasks.html +1 -1
  7. data/doc/constants.html +15 -10
  8. data/doc/css/ref.css +67 -0
  9. data/doc/draw.html +1 -1
  10. data/doc/ex/InitialCoords.rb +24 -0
  11. data/doc/ex/NewCoordSys.rb +33 -0
  12. data/doc/ex/OrigCoordSys.rb +19 -0
  13. data/doc/ex/PreserveAspectRatio.rb +206 -0
  14. data/doc/ex/RotateScale.rb +38 -0
  15. data/doc/ex/Skew.rb +39 -0
  16. data/doc/ex/Use01.rb +17 -0
  17. data/doc/ex/Use02.rb +22 -0
  18. data/doc/ex/Use03.rb +17 -0
  19. data/doc/ex/ViewBox.rb +34 -0
  20. data/doc/ex/arcs01.rb +29 -0
  21. data/doc/ex/arcs02.rb +62 -0
  22. data/doc/ex/baseline_shift01.rb +19 -0
  23. data/doc/ex/bounding_box.rb +31 -37
  24. data/doc/ex/circle01.rb +18 -0
  25. data/doc/ex/cubic01.rb +46 -0
  26. data/doc/ex/cubic02.rb +95 -0
  27. data/doc/ex/drop_shadow.rb +1 -1
  28. data/doc/ex/ellipse01.rb +23 -0
  29. data/doc/ex/evenodd.rb +44 -0
  30. data/doc/ex/font_styles.rb +29 -0
  31. data/doc/ex/group.rb +27 -0
  32. data/doc/ex/image.rb +47 -0
  33. data/doc/ex/images/big-duck.gif +0 -0
  34. data/doc/ex/images/duck.gif +0 -0
  35. data/doc/ex/images/duck0.gif +0 -0
  36. data/doc/ex/images/duck1.gif +0 -0
  37. data/doc/ex/images/duck10.gif +0 -0
  38. data/doc/ex/images/duck11.gif +0 -0
  39. data/doc/ex/images/duck12.gif +0 -0
  40. data/doc/ex/images/duck13.gif +0 -0
  41. data/doc/ex/images/duck14.gif +0 -0
  42. data/doc/ex/images/duck15.gif +0 -0
  43. data/doc/ex/images/duck2.gif +0 -0
  44. data/doc/ex/images/duck3.gif +0 -0
  45. data/doc/ex/images/duck4.gif +0 -0
  46. data/doc/ex/images/duck5.gif +0 -0
  47. data/doc/ex/images/duck6.gif +0 -0
  48. data/doc/ex/images/duck7.gif +0 -0
  49. data/doc/ex/images/duck8.gif +0 -0
  50. data/doc/ex/images/duck9.gif +0 -0
  51. data/doc/ex/line01.rb +24 -0
  52. data/doc/ex/nested_rvg.rb +22 -0
  53. data/doc/ex/nonzero.rb +44 -0
  54. data/doc/ex/polygon01.rb +24 -0
  55. data/doc/ex/polyline01.rb +24 -0
  56. data/doc/ex/quad01.rb +37 -0
  57. data/doc/ex/rect01.rb +16 -0
  58. data/doc/ex/rect02.rb +23 -0
  59. data/doc/ex/rvg_clippath.rb +15 -0
  60. data/doc/ex/rvg_linecap.rb +44 -0
  61. data/doc/ex/rvg_linejoin.rb +42 -0
  62. data/doc/ex/rvg_opacity.rb +20 -0
  63. data/doc/ex/rvg_pattern.rb +27 -0
  64. data/doc/ex/rvg_stroke_dasharray.rb +13 -0
  65. data/doc/ex/sepiatone.rb +15 -0
  66. data/doc/ex/shadow.rb +37 -0
  67. data/doc/ex/smile.rb +9 -9
  68. data/doc/ex/stroke_fill.rb +12 -0
  69. data/doc/ex/text01.rb +18 -0
  70. data/doc/ex/text_styles.rb +22 -0
  71. data/doc/ex/texture_fill_to_border.rb +3 -3
  72. data/doc/ex/texture_floodfill.rb +3 -2
  73. data/doc/ex/tref01.rb +26 -0
  74. data/doc/ex/triangle01.rb +17 -0
  75. data/doc/ex/tspan01.rb +19 -0
  76. data/doc/ex/tspan02.rb +20 -0
  77. data/doc/ex/tspan03.rb +22 -0
  78. data/doc/ex/writing_mode01.rb +28 -0
  79. data/doc/ex/writing_mode02.rb +27 -0
  80. data/doc/ilist.html +1 -1
  81. data/doc/image1.html +66 -30
  82. data/doc/image2.html +1 -1
  83. data/doc/image3.html +274 -49
  84. data/doc/imageattrs.html +87 -10
  85. data/doc/imusage.html +1 -1
  86. data/doc/index.html +80 -39
  87. data/doc/info.html +149 -13
  88. data/doc/magick.html +1 -1
  89. data/doc/rvg.html +890 -0
  90. data/doc/rvgclip.html +249 -0
  91. data/doc/rvggroup.html +305 -0
  92. data/doc/rvgimage.html +288 -0
  93. data/doc/rvgpattern.html +456 -0
  94. data/doc/rvgshape.html +376 -0
  95. data/doc/rvgstyle.html +269 -0
  96. data/doc/rvgtext.html +464 -0
  97. data/doc/rvgtspan.html +237 -0
  98. data/doc/rvgtut.html +512 -0
  99. data/doc/rvguse.html +145 -0
  100. data/doc/rvgxform.html +294 -0
  101. data/doc/struct.html +9 -71
  102. data/doc/usage.html +22 -7
  103. data/ext/RMagick/MANIFEST +94 -2
  104. data/ext/RMagick/rmagick.h +10 -4
  105. data/ext/RMagick/rmagick_config.h.in +8 -2
  106. data/ext/RMagick/rmdraw.c +2 -2
  107. data/ext/RMagick/rmfill.c +2 -2
  108. data/ext/RMagick/rmilist.c +3 -3
  109. data/ext/RMagick/rmimage.c +152 -5
  110. data/ext/RMagick/rminfo.c +208 -2
  111. data/ext/RMagick/rmmain.c +14 -5
  112. data/ext/RMagick/rmutil.c +83 -22
  113. data/lib/RMagick.rb +2 -2
  114. data/lib/rvg/clippath.rb +46 -0
  115. data/lib/rvg/container.rb +129 -0
  116. data/lib/rvg/deep_equal.rb +54 -0
  117. data/lib/rvg/describable.rb +51 -0
  118. data/lib/rvg/embellishable.rb +395 -0
  119. data/lib/rvg/misc.rb +729 -0
  120. data/lib/rvg/paint.rb +48 -0
  121. data/lib/rvg/pathdata.rb +129 -0
  122. data/lib/rvg/rvg.rb +279 -0
  123. data/lib/rvg/stretchable.rb +150 -0
  124. data/lib/rvg/stylable.rb +116 -0
  125. data/lib/rvg/text.rb +185 -0
  126. data/lib/rvg/transformable.rb +131 -0
  127. data/lib/rvg/units.rb +64 -0
  128. data/rmagick.gemspec +1 -1
  129. data/uninstall.rb +3 -2
  130. metadata +96 -3
@@ -0,0 +1,29 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ RVG.dpi = 90
5
+
6
+ rvg = RVG.new(12.cm, 5.25.cm).viewbox(0, 0, 1200, 400) do |canvas|
7
+ canvas.title = "Example arcs01 - arc commands in path data"
8
+ canvas.desc = <<-END_DESC
9
+ Picture of a pie chart with two pie wedges and a picture
10
+ of a line with arc blips
11
+ END_DESC
12
+ canvas.background_fill = 'white'
13
+ canvas.rect(1196, 395, 1, 1).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>1)
14
+
15
+ canvas.path("M300,200 h-150 a150,150 0 1,0 150,-150 z").
16
+ styles(:fill=>'red', :stroke=>'blue', :stroke_width=>5)
17
+ canvas.path("M275,175 v-150 a150,150 0 0,0 -150,150 z").
18
+ styles(:fill=>'yellow', :stroke=>'blue', :stroke_width=>5)
19
+ canvas.path(<<-END_PATH
20
+ M600,350 l 50,-25
21
+ a25,25 -30 0,1 50,-25 l 50,-25
22
+ a25,50 -30 0,1 50,-25 l 50,-25
23
+ a25,75 -30 0,1 50,-25 l 50,-25
24
+ a25,100 -30 0,1 50,-25 l 50,-25
25
+ END_PATH
26
+ ).styles(:fill=>'none', :stroke=>'red', :stroke_width=>5)
27
+ end
28
+
29
+ rvg.draw.write('arcs01.gif')
@@ -0,0 +1,62 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ RVG.dpi = 90
5
+
6
+ PathStyles = {:fill=>'none', :stroke=>'red', :stroke_width=>6}
7
+ BaseEllipsesStyles = {:font_size=>20, :font_family=>'Verdana',:fill=>'none', :stroke=>'#888', :stroke_width=>2}
8
+
9
+ rvg = RVG.new(12.cm, (5.25).cm).viewbox(0, 0, 1200, 525) do |canvas|
10
+ canvas.title = "Example arcs02 - arc options in paths"
11
+ canvas.desc = <<-END_DESC
12
+ Pictures showing the result of setting
13
+ large-arc-flag and sweep-flag to the four
14
+ possible combinations of 0 and 1.
15
+ END_DESC
16
+ canvas.background_fill = 'white'
17
+
18
+ base_ellipses = RVG::Group.new.styles(BaseEllipsesStyles) do |base|
19
+ base.ellipse(100, 50, 125, 125)
20
+ base.ellipse(100, 50, 225, 75)
21
+ base.text(35, 70, "Arc start")
22
+ base.text(225, 145, "Arc end")
23
+ end
24
+
25
+ canvas.rect(1196, 522, 1, 1).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>1)
26
+
27
+ canvas.g.styles(:font_size=>30, :font_family=>'Verdana') do |grp|
28
+
29
+ grp.use(base_ellipses)
30
+
31
+ grp.g.translate(400,0) do |grp2|
32
+ grp2.text(50, 210, 'large-arc-flag=0')
33
+ grp2.text(50, 250, 'sweep-flag=0')
34
+ grp2.use(base_ellipses)
35
+ grp2.path("M 125,75 a100,50 0 0,0 100,50").styles(PathStyles)
36
+ end
37
+
38
+ grp.g.translate(800,0) do |grp2|
39
+ grp2.text(50, 210, 'large-arc-flag=0')
40
+ grp2.text(50, 250, 'sweep-flag=1')
41
+ grp2.use(base_ellipses)
42
+ grp2.path("M 125,75 a100,50 0 0,1 100,50").styles(PathStyles)
43
+ end
44
+
45
+ grp.g.translate(400, 250) do |grp2|
46
+ grp2.text(50, 210, 'large-arc-flag=1')
47
+ grp2.text(50, 250, 'sweep-flag=0')
48
+ grp2.use(base_ellipses)
49
+ grp2.path("M 125,75 a100,50 0 1,0 100,50").styles(PathStyles)
50
+ end
51
+
52
+ grp.g.translate(800, 250) do |grp2|
53
+ grp2.text(50, 210, 'large-arc-flag=1')
54
+ grp2.text(50, 250, 'sweep-flag=1')
55
+ grp2.use(base_ellipses)
56
+ grp2.path("M 125,75 a100,50 0 1,1 100,50").styles(PathStyles)
57
+ end
58
+
59
+ end
60
+ end
61
+
62
+ rvg.draw.write('arcs02.gif')
@@ -0,0 +1,19 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ rvg = RVG.new(150, 100) do |canvas|
5
+ canvas.background_fill = 'white'
6
+ canvas.text(40, 35).styles(:font_weight=>'bold', :font_size=>28) do |txt|
7
+ txt.tspan('H')
8
+ txt.tspan('2').styles(:font_size=>20, :fill=>'red', :baseline_shift=>'sub')
9
+ txt.tspan('O')
10
+ end
11
+ canvas.text(40, 80).styles(:font_style=>'italic', :font_size=>28) do |txt|
12
+ txt.tspan('e=mc')
13
+ txt.tspan('2').styles(:font_size=>20, :fill=>'red', :baseline_shift=>'super')
14
+ end
15
+ canvas.rect(149, 99).styles(:fill=>'none', :stroke=>'blue')
16
+ end
17
+
18
+ rvg.draw.write('baseline_shift01.gif')
19
+
@@ -1,48 +1,42 @@
1
1
  #! /usr/local/bin/ruby -w
2
2
  require 'RMagick'
3
+ include Magick
3
4
 
4
- i = Magick::ImageList.new
5
- i.new_image(200, 200) { self.background_color = "#ffffcc" }
5
+ img = Image.new(200,200) { self.background_color = "#ffffcc" }
6
6
 
7
7
  # Draw a blue circle.
8
- primitives = Magick::Draw.new
9
- primitives.stroke_width 5
10
- primitives.stroke "blue"
11
- primitives.fill_opacity 0
12
- primitives.circle 100,100, 100,150
13
- primitives.draw i
8
+ gc = Draw.new
9
+ gc.stroke_width(5)
10
+ gc.stroke("blue")
11
+ gc.fill_opacity(0)
12
+ gc.circle(100,100, 100,150)
13
+ gc.draw(img)
14
14
 
15
15
  # Get the bounding box. Use the values to draw
16
16
  # a gray square surrounding the circle. Highlight
17
17
  # the corners with tiny red circles.
18
18
 
19
- bb = i.bounding_box
20
- primitives = Magick::Draw.new
21
- primitives.stroke "gray50"
22
- primitives.fill_opacity 0
23
- primitives.rectangle bb.x, bb.y, bb.x+bb.width, bb.y+bb.height
24
- primitives.stroke "red"
25
- primitives.circle bb.x, bb.y, bb.x+2, bb.y+2
26
- primitives.circle bb.x+bb.width, bb.y, bb.x+bb.width+2, bb.y+2
27
- primitives.circle bb.x, bb.y+bb.height, bb.x+2, bb.y+bb.height+2
28
- primitives.circle bb.x+bb.width, bb.y+bb.height, bb.x+bb.width+2, bb.y+bb.height+2
29
-
30
-
31
- primitives.pointsize 10
32
- primitives.fill "black"
33
- primitives.stroke "transparent"
34
- primitives.gravity Magick::NorthWestGravity
35
- primitives.text bb.x-15, bb.y-5, "\'#{bb.x},#{bb.y}\'"
36
- primitives.gravity Magick::NorthEastGravity
37
- primitives.text bb.x-15, bb.y-5, "\'#{bb.x+bb.width},#{bb.y}\'"
38
- primitives.gravity Magick::SouthWestGravity
39
- primitives.text bb.x-15, bb.y-12, "\'#{bb.x},#{bb.y+bb.height}\'"
40
- primitives.gravity Magick::SouthEastGravity
41
- primitives.text bb.x-15, bb.y-12, "\'#{bb.x+bb.width},#{bb.y+bb.height}\'"
42
-
43
-
44
- primitives.draw i
45
-
46
- #i.display
47
- i.write "bounding_box.gif"
19
+ bb = img.bounding_box
20
+ gc = Draw.new
21
+ gc.stroke("gray50")
22
+ gc.fill_opacity(0)
23
+ gc.rectangle(bb.x, bb.y, bb.x+bb.width, bb.y+bb.height)
24
+ gc.stroke("red")
25
+ gc.circle(bb.x, bb.y, bb.x+2, bb.y+2)
26
+ gc.circle(bb.x+bb.width, bb.y, bb.x+bb.width+2, bb.y+2)
27
+ gc.circle(bb.x, bb.y+bb.height, bb.x+2, bb.y+bb.height+2)
28
+ gc.circle(bb.x+bb.width, bb.y+bb.height, bb.x+bb.width+2, bb.y+bb.height+2)
29
+
30
+
31
+ gc.fill("black")
32
+ gc.stroke("transparent")
33
+ gc.text(bb.x-15, bb.y-5, "\'#{bb.x},#{bb.y}\'")
34
+ gc.text(bb.x+bb.width-15, bb.y-5, "\'#{bb.x+bb.width},#{bb.y}\'")
35
+ gc.text(bb.x-15, bb.y+bb.height+15, "\'#{bb.x},#{bb.y+bb.height}\'")
36
+ gc.text(bb.x+bb.width-15, bb.y+bb.height+15, "\'#{bb.x+bb.width},#{bb.y+bb.height}\'")
37
+
38
+
39
+ gc.draw(img)
40
+
41
+ img.write("bounding_box.gif")
48
42
  exit
@@ -0,0 +1,18 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ RVG.dpi = 90
5
+
6
+ rvg = RVG.new(12.cm, 4.cm) do |canvas|
7
+ canvas.viewbox(0, 0, 1200, 400)
8
+ canvas.background_fill = 'white'
9
+ canvas.desc = "Example circle01 - circle filled with red and stroked with blue"
10
+
11
+ # Show outline of canvas using the 'rect' method
12
+ canvas.rect(1195, 395, 1, 1).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>2)
13
+
14
+ canvas.circle(100, 600, 200).styles(:fill=>'red', :stroke=>'blue', :stroke_width=>10)
15
+ end
16
+
17
+ rvg.draw.write('circle01.gif')
18
+
@@ -0,0 +1,46 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ RVG.dpi = 90
5
+
6
+ Border = {:fill=>'none', :stroke=>'blue', :stroke_width=>1}
7
+ Connect = {:fill=>'none', :stroke=>'#888', :stroke_width=>2}
8
+ SamplePath = {:fill=>'none', :stroke=>'red', :stroke_width=>5}
9
+ EndPoint = {:fill=>'none', :stroke=>'#888', :stroke_width=>2}
10
+ CtlPoint = {:fill=>'#888', :stroke=>'none'}
11
+ AutoCtlPoint = {:fill=>'none', :stroke=>'blue', :stroke_width=>4}
12
+ Label = {:font_size=>22, :font_family=>'Verdana'}
13
+
14
+ rvg = RVG.new(5.cm, 4.cm).viewbox(0, 0, 500, 400) do |canvas|
15
+ canvas.title = "Example cubic01 - cubic Bezier commands in path data"
16
+ canvas.desc = <<-END_DESC
17
+ Picture showing a simple example of path data using both a
18
+ "C" and an "S" command, along with annotations showing the
19
+ control points and end points.
20
+ END_DESC
21
+
22
+ canvas.background_fill = 'white'
23
+ canvas.rect(496, 395, 1, 1).styles(Border)
24
+
25
+ canvas.polyline(100,200, 100,100).styles(Connect)
26
+ canvas.polyline(250,100, 250,200).styles(Connect)
27
+ canvas.polyline(250,200, 250,300).styles(Connect)
28
+ canvas.polyline(400,300, 400,200).styles(Connect)
29
+
30
+ canvas.path("M100,200 C100,100 250,100 250,200 S400,300 400,200").styles(SamplePath)
31
+
32
+ canvas.circle(10, 100, 200).styles(EndPoint)
33
+ canvas.circle(10, 250, 200).styles(EndPoint)
34
+ canvas.circle(10, 400, 200).styles(EndPoint)
35
+ canvas.circle(10, 100, 100).styles(CtlPoint)
36
+ canvas.circle(10, 250, 100).styles(CtlPoint)
37
+ canvas.circle(10, 400, 300).styles(CtlPoint)
38
+ canvas.circle(9, 250, 300).styles(AutoCtlPoint)
39
+
40
+ canvas.text(25, 70, 'M100,200 C100,100 250,100 250,200').styles(Label)
41
+ canvas.text(225, 350, 'S400,300 400,200').styles(Label)
42
+
43
+ end
44
+
45
+ rvg.draw.write('cubic01.gif')
46
+
@@ -0,0 +1,95 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ RVG.dpi = 90
5
+
6
+ Border = { :fill=>'none', :stroke=>'blue', :stroke_width=>1 }
7
+ Connect = { :fill=>'none', :stroke=>'#888888', :stroke_width=>2 }
8
+ SamplePath = { :fill=>'none', :stroke=>'red', :stroke_width=>5 }
9
+ EndPoint = { :fill=>'none', :stroke=>'#888888', :stroke_width=>2 }
10
+ CtlPoint = { :fill=>'#888888', :stroke=>'none' }
11
+ AutoCtlPoint = { :fill=>'none', :stroke=>'blue', :stroke_width=>4 }
12
+ Label = { :text_anchor=>'middle', :font_size=>22, :font_family=>'Verdana' }
13
+
14
+ rvg = RVG.new(10.cm, 10.cm).viewbox(0, 0, 1000, 1000) do |canvas|
15
+ canvas.title = 'Example cubic02 - cubic Bezier commands in path data'
16
+ canvas.desc = <<-END_DESC
17
+ Picture showing examples of "C" and "S" commands,
18
+ along with annotations showing the control points
19
+ and end points
20
+ END_DESC
21
+
22
+ canvas.background_fill = 'white'
23
+ canvas.rect(996, 996, 1, 1).styles(Border)
24
+
25
+ # Path 1
26
+ canvas.polyline(100,200, 100,100).styles(Connect)
27
+ canvas.polyline(400,100, 400,200).styles(Connect)
28
+ canvas.path('M100,200 C100,100 400,100 400,200').styles(SamplePath)
29
+ canvas.circle(10, 100, 200).styles(EndPoint)
30
+ canvas.circle(10, 400, 200).styles(EndPoint)
31
+ canvas.circle(10, 100, 100).styles(CtlPoint)
32
+ canvas.circle(10, 400, 100).styles(CtlPoint)
33
+ canvas.text(250, 275, 'M100,200 C100,100 400,100 400,200').styles(Label)
34
+
35
+ # Path 2
36
+ canvas.polyline(100,500, 25,400).styles(Connect)
37
+ canvas.polyline(475,400, 400,500).styles(Connect)
38
+ canvas.path("M100,500 C25,400 475,400 400,500").styles(SamplePath)
39
+ canvas.circle(10, 100, 500).styles(EndPoint)
40
+ canvas.circle(10, 400, 500).styles(EndPoint)
41
+ canvas.circle(10, 25, 400).styles(CtlPoint)
42
+ canvas.circle(10, 475, 400).styles(CtlPoint)
43
+ canvas.text(250, 575, "M100,500 C25,400 475,400 400,500").styles(Label)
44
+
45
+ # Path 3
46
+ canvas.polyline(100,800, 175,700).styles(Connect)
47
+ canvas.polyline(325,700, 400,800).styles(Connect)
48
+ canvas.path("M100,800 C175,700 325,700 400,800").styles(SamplePath)
49
+ canvas.circle(10, 100, 800).styles(EndPoint)
50
+ canvas.circle(10, 400, 800).styles(EndPoint)
51
+ canvas.circle(10, 175, 700).styles(CtlPoint)
52
+ canvas.circle(10, 325, 700).styles(CtlPoint)
53
+ canvas.text(250, 875, "M100,800 C175,700 325,700 400,800").styles(Label)
54
+
55
+ # Path 4
56
+ canvas.polyline(600,200, 675,100).styles(Connect)
57
+ canvas.polyline(975,100, 900,200).styles(Connect)
58
+ canvas.path("M600,200 C675,100 975,100 900,200").styles(SamplePath)
59
+ canvas.circle(10, 600, 200).styles(EndPoint)
60
+ canvas.circle(10, 900, 200).styles(EndPoint)
61
+ canvas.circle(10, 675, 100).styles(CtlPoint)
62
+ canvas.circle(10, 975, 100).styles(CtlPoint)
63
+ canvas.text(750, 275, "M600,200 C675,100 975,100 900,200").styles(Label)
64
+
65
+ # Path 5
66
+ canvas.polyline(600,500, 600,350).styles(Connect)
67
+ canvas.polyline(900,650, 900,500).styles(Connect)
68
+ canvas.path("M600,500 C600,350 900,650 900,500").styles(SamplePath)
69
+ canvas.circle(10, 600, 500).styles(EndPoint)
70
+ canvas.circle(10, 900, 500).styles(EndPoint)
71
+ canvas.circle(10, 600, 350).styles(CtlPoint)
72
+ canvas.circle(10, 900, 650).styles(CtlPoint)
73
+ canvas.text(750, 575, "M600,500 C600,350 900,650 900,500").styles(Label)
74
+
75
+ # Path 6 (C and S command)
76
+ canvas.polyline(600,800, 625,700).styles(Connect)
77
+ canvas.polyline(725,700, 750,800).styles(Connect)
78
+ canvas.polyline(750,800, 775,900).styles(Connect)
79
+ canvas.polyline(875,900, 900,800).styles(Connect)
80
+ canvas.path("M600,800 C625,700 725,700 750,800 S875,900 900,800").styles(SamplePath)
81
+ canvas.circle(10, 600, 800).styles(EndPoint)
82
+ canvas.circle(10, 750, 800).styles(EndPoint)
83
+ canvas.circle(10, 900, 800).styles(EndPoint)
84
+ canvas.circle(10, 625, 700).styles(CtlPoint)
85
+ canvas.circle(10, 725, 700).styles(CtlPoint)
86
+ canvas.circle(10, 875, 900).styles(CtlPoint)
87
+ canvas.circle(10, 775, 900).styles(AutoCtlPoint)
88
+ canvas.text(750, 945, "M600,800 C625,700 725,700 750,800").styles(Label)
89
+ canvas.text(750, 975, "S875,900 900,800").styles(Label)
90
+
91
+ end
92
+
93
+ rvg.draw.write('cubic02.gif')
94
+
95
+
@@ -49,7 +49,7 @@ anim << ex.copy
49
49
  # Set the delay between frames to 1 second.
50
50
  anim.delay = 100
51
51
 
52
- # Set the delay after the last frame to 2 seconds.
52
+ # Set the delay after the last frame to 3 seconds.
53
53
  anim.cur_image.delay = 300
54
54
 
55
55
  # Iterate forever.
@@ -0,0 +1,23 @@
1
+ require 'rvg/rvg'
2
+ include Magick
3
+
4
+ RVG.dpi = 90
5
+
6
+ rvg = RVG.new(12.cm, 4.cm).viewbox(0, 0, 1200, 400) do |canvas|
7
+ canvas.background_fill = 'white'
8
+ canvas.desc = "Example ellipse01 - examples of ellipses"
9
+
10
+ # Show outline of canvas using rect method
11
+ canvas.rect(1195, 395, 1, 1).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>2)
12
+
13
+ canvas.g.translate(300, 200) do |grp|
14
+ grp.ellipse(250, 100).styles(:fill=>'red')
15
+ end
16
+
17
+ canvas.g.translate(900, 200).rotate(-30) do |grp|
18
+ grp.ellipse(250, 100).styles(:fill=>'none', :stroke=>'blue', :stroke_width=>20)
19
+ end
20
+ end
21
+
22
+ rvg.draw.write('ellipse01.gif')
23
+
@@ -0,0 +1,44 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'rvg/rvg'
3
+ include Magick
4
+
5
+ RVG.dpi = 90
6
+
7
+ rvg = RVG.new(12.cm, 4.cm).viewbox(0, 0, 1200, 400) do |canvas|
8
+ canvas.background_fill = 'white'
9
+ canvas.desc = "Example fillrule - nonzero - demonstrates fill_rule=>'nonzero'"
10
+
11
+ canvas.rect(1195, 393, 1, 1).styles(:fill=>'none', :stroke=>'blue')
12
+
13
+ triangle = RVG::Group.new do |defs|
14
+ defs.path("M 16,0 L -8,9 v-18 z").styles(:fill=>'black', :stroke=>'none')
15
+ end
16
+
17
+ canvas.g.styles(:clip_rule=>'evenodd', :fill=>'red', :stroke=>'black', :stroke_width=>3) do |grp|
18
+ grp.path("M 250,75 L 323,301 131,161 369,161 177,301 z")
19
+ grp.use(triangle).translate(306.21, 249).rotate(72)
20
+ grp.use(triangle).translate(175.16,193.2).rotate(216)
21
+ grp.use(triangle).translate(314.26,161).rotate(0)
22
+ grp.use(triangle).translate(221.16,268.8).rotate(144)
23
+ grp.use(triangle).translate(233.21,126.98).rotate(288)
24
+ grp.path("M 600,81 A 107,107 0 0,1 600,295 A 107,107 0 0,1 600,81 z" +
25
+ "M 600,139 A 49,49 0 0,1 600,237 A 49,49 0 0,1 600,139 z")
26
+ grp.use(triangle).translate(600,188).rotate(0).translate(107,0).rotate(90)
27
+ grp.use(triangle).translate(600,188).rotate(120).translate(107,0).rotate(90)
28
+ grp.use(triangle).translate(600,188).rotate(240).translate(107,0).rotate(90)
29
+ grp.use(triangle).translate(600,188).rotate(60).translate(49,0).rotate(90)
30
+ grp.use(triangle).translate(600,188).rotate(180).translate(49,0).rotate(90)
31
+ grp.use(triangle).translate(600,188).rotate(300).translate(49,0).rotate(90)
32
+ grp.path("M 950,81 A 107,107 0 0,1 950,295 A 107,107 0 0,1 950,81 z" +
33
+ "M 950,139 A 49,49 0 0,0 950,237 A 49,49 0 0,0 950,139 z")
34
+ grp.use(triangle).translate(950,188).rotate(0).translate(107,0).rotate(90)
35
+ grp.use(triangle).translate(950,188).rotate(120).translate(107,0).rotate(90)
36
+ grp.use(triangle).translate(950,188).rotate(240).translate(107,0).rotate(90)
37
+ grp.use(triangle).translate(950,188).rotate(60).translate(49,0).rotate(-90)
38
+ grp.use(triangle).translate(950,188).rotate(180).translate(49,0).rotate(-90)
39
+ grp.use(triangle).translate(950,188).rotate(300).translate(49,0).rotate(-90)
40
+ end
41
+ end
42
+
43
+ rvg.draw.write('evenodd.gif')
44
+
@@ -0,0 +1,29 @@
1
+ #! /usr/local/bin/ruby -w
2
+ require 'rvg/rvg'
3
+ include Magick
4
+
5
+
6
+ rvg = RVG.new(200, 250) do |canvas|
7
+ canvas.background_fill = 'white'
8
+
9
+ canvas.g do |grp|
10
+ grp.text(10, 30, "default size")
11
+ grp.text(10, 50, ":font_size=>14").styles(:font_size=>14)
12
+ grp.text(10, 70, ":font_size=>16").styles(:font_size=>16)
13
+ grp.text(10,100, ":font_size=>24").styles(:font_size=>24)
14
+ end
15
+
16
+ canvas.g.styles(:font_size=>14) do |grp|
17
+ grp.text( 8, 120, ":font_family=>'Courier'").styles(:font_family=>'Courier')
18
+ grp.text(10, 140, ":font_weight=>'bold'").styles(:font_weight=>'bold')
19
+ grp.text(10, 160, ":font_stretch=>'normal'").styles(:font_stretch=>'normal')
20
+ grp.text(10, 180, ":font_stretch=>'condensed'").styles(:font_stretch=>'condensed')
21
+ grp.text(10, 200, ":font_style=>'italic'").styles(:font_style=>'italic')
22
+ grp.text(10, 220, ":font_weight=>900").styles(:font_weight=>900)
23
+ end
24
+
25
+ canvas.rect(199, 249).styles(:fill=>'none', :stroke=>'blue')
26
+ end
27
+
28
+ rvg.draw.write('font_styles.gif')
29
+