20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'lib/polygonfy.rb', line 20
def self.run
if ARGV.length == 0
puts "Use: polygonfy filename [id,x,y] [id,x,y] [..]"
return
end
filename = ARGV[0]
points = ARGV.length > 1 ? ARGV.drop(1) : STDIN.readline.split(' ')
points.map! do |p|
id, x, y = p.split(',')
Point.new(id, x.to_i, y.to_i)
end
xmlns = "http://www.w3.org/2000/svg"
width = points.map(&:x).max + (2 * MARGIN)
height = points.map(&:y).max + (2 * MARGIN)
polygon_points = points.map { |p| "#{p.x},#{p.y}" }.join(' ')
builder = Nokogiri::XML::Builder.new do |xml|
xml.svg(xmlns: xmlns, width: width, height: height) {
xml.polygon(style: STYLES[:polygon], points: polygon_points)
xml.g {
points.each_with_index do |p, i|
xml.circle(style: STYLES[:circle], cx: p.x + MARGIN, cy: p.y + MARGIN, r: "12")
xml.text_(x: p.x + MARGIN, y: p.y + 5 + MARGIN, 'text-anchor': 'middle') {
xml.text(p.id)
xml.title {
xml.text(point_title(points, i))
}
}
end
}
}
end
File.open(filename, 'w') do |f|
f.write(builder.to_xml)
end
end
|