dyi 0.0.0 → 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/lib/dyi/formatter/svg_formatter.rb +1 -2
- data/lib/dyi/shape.rb +33 -13
- metadata +4 -4
@@ -119,8 +119,7 @@ module DYI #:nodoc:
|
|
119
119
|
end
|
120
120
|
|
121
121
|
def write_path(shape, io)
|
122
|
-
|
123
|
-
attrs = {:d => shape.compatible_path_data.to_concise_syntax}
|
122
|
+
attrs = {:d => shape.concise_path_data}
|
124
123
|
attrs.merge!(common_attributes(shape))
|
125
124
|
create_leaf_node(io, 'path', attrs)
|
126
125
|
end
|
data/lib/dyi/shape.rb
CHANGED
@@ -117,7 +117,7 @@ module DYI #:nodoc:
|
|
117
117
|
end
|
118
118
|
|
119
119
|
def set_clipping_shapes(*shapes)
|
120
|
-
@clipping = Drawing::
|
120
|
+
@clipping = Drawing::Clipping.new(*shapes)
|
121
121
|
end
|
122
122
|
|
123
123
|
private
|
@@ -852,7 +852,7 @@ module DYI #:nodoc:
|
|
852
852
|
end
|
853
853
|
|
854
854
|
def last_point
|
855
|
-
(relative? && preceding_command.nil?) ?
|
855
|
+
(relative? && preceding_command.nil?) ? point : super
|
856
856
|
end
|
857
857
|
|
858
858
|
def relative?
|
@@ -1135,11 +1135,16 @@ module DYI #:nodoc:
|
|
1135
1135
|
@relative = relative
|
1136
1136
|
@preceding_command = preceding_command
|
1137
1137
|
@point = Coordinate.new(point)
|
1138
|
-
@rx = Length.new(rx)
|
1139
|
-
@ry = Length.new(ry)
|
1140
1138
|
@rotation = rotation
|
1141
1139
|
@is_large_arc = is_large_arc
|
1142
1140
|
@is_clockwise = is_clockwise
|
1141
|
+
@rx = Length.new(rx).abs
|
1142
|
+
@ry = Length.new(ry).abs
|
1143
|
+
l = (modified_mid_point.x.to_f / @rx.to_f) ** 2 + (modified_mid_point.y.to_f / @ry.to_f) ** 2
|
1144
|
+
if 1 < l
|
1145
|
+
@rx *= Math.sqrt(l)
|
1146
|
+
@ry *= Math.sqrt(l)
|
1147
|
+
end
|
1143
1148
|
end
|
1144
1149
|
|
1145
1150
|
def large_arc?
|
@@ -1151,6 +1156,7 @@ module DYI #:nodoc:
|
|
1151
1156
|
end
|
1152
1157
|
|
1153
1158
|
def to_compatible_commands(preceding_command)
|
1159
|
+
return LineCommand.new(relative?, preceding_command, point) if rx.zero? || ry.zero?
|
1154
1160
|
division_count = (center_angle / 30.0).ceil
|
1155
1161
|
division_angle = center_angle / division_count * (clockwise? ? 1 : -1)
|
1156
1162
|
current_point = start_angle_point
|
@@ -1163,12 +1169,16 @@ module DYI #:nodoc:
|
|
1163
1169
|
end
|
1164
1170
|
control_point1 = control_point_of_curve(current_point, division_angle, true)
|
1165
1171
|
control_point2 = control_point_of_curve(end_point, division_angle, false)
|
1166
|
-
|
1167
|
-
|
1168
|
-
|
1169
|
-
|
1170
|
-
|
1171
|
-
|
1172
|
+
path_point = (i == division_count - 1) ? point : transform_orginal_shape(end_point)
|
1173
|
+
if relative?
|
1174
|
+
control_point1 += preceding_point
|
1175
|
+
control_point2 += preceding_point
|
1176
|
+
path_point += preceding_point
|
1177
|
+
end
|
1178
|
+
preceding_command = CurveCommand.absolute_commands(preceding_command,
|
1179
|
+
control_point1,
|
1180
|
+
control_point2,
|
1181
|
+
path_point).first
|
1172
1182
|
compat_commands << preceding_command
|
1173
1183
|
current_point = end_point
|
1174
1184
|
end
|
@@ -1185,13 +1195,15 @@ module DYI #:nodoc:
|
|
1185
1195
|
end
|
1186
1196
|
|
1187
1197
|
def center_point
|
1188
|
-
|
1198
|
+
st_pt = relative? ? Coordinate::ZERO : preceding_point
|
1199
|
+
Matrix.rotate(rotation).transform(modified_center_point) + (st_pt + point) * 0.5
|
1189
1200
|
end
|
1190
1201
|
|
1191
1202
|
private
|
1192
1203
|
|
1193
1204
|
def modified_mid_point
|
1194
|
-
|
1205
|
+
st_pt = relative? ? Coordinate::ZERO : preceding_point
|
1206
|
+
Matrix.rotate(-rotation).transform((st_pt - point) * 0.5)
|
1195
1207
|
end
|
1196
1208
|
|
1197
1209
|
def modified_center_point
|
@@ -1234,7 +1246,15 @@ module DYI #:nodoc:
|
|
1234
1246
|
|
1235
1247
|
class << self
|
1236
1248
|
def commands(relative, preceding_command, *args)
|
1237
|
-
|
1249
|
+
raise ArgumentError, "number of arguments must be a multipule of 6" if args.size % 6 != 0
|
1250
|
+
cmd = preceding_command
|
1251
|
+
args.each_slice(6).inject([]) do |cmds, ars|
|
1252
|
+
if ars[0].zero? || ars[1].zero?
|
1253
|
+
cmds << (cmd = LineCommand.new(relative, cmd, ars.last))
|
1254
|
+
else
|
1255
|
+
cmds << (cmd = new(relative, cmd, *ars))
|
1256
|
+
end
|
1257
|
+
end
|
1238
1258
|
end
|
1239
1259
|
end
|
1240
1260
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dyi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 29
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 1
|
10
|
+
version: 0.0.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Yuo
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-
|
18
|
+
date: 2011-07-15 00:00:00 Z
|
19
19
|
dependencies: []
|
20
20
|
|
21
21
|
description: " DYI is a 2D graphics library, very rich and expressive.\n DYI have been optimized for SVG format, but it is also possible\n to output other format; for example, EPS.\n"
|