class Petrinet::AnimatedGifBuilder
Public Class Methods
new(net)
click to toggle source
# File lib/petrinet/animated_gif_builder.rb, line 3 def initialize(net) @net = net end
Public Instance Methods
write(transition_names, gif_path)
click to toggle source
# File lib/petrinet/animated_gif_builder.rb, line 7 def write(transition_names, gif_path) @image_number = 0 Dir.mktmpdir('petrinet-animation') do |tmpdir| net = @net write_png(net, tmpdir) transition_names.each do |transition_name| firing = net.prefire(transition_name) write_png(firing, tmpdir) net = net.fire(transition_name) write_png(net, tmpdir) end STDOUT.write "🎬\n" `convert -delay 100 -loop 0 #{tmpdir}/*.png #{gif_path}` end end
Private Instance Methods
write_png(net, tmpdir)
click to toggle source
# File lib/petrinet/animated_gif_builder.rb, line 27 def write_png(net, tmpdir) number_string = '%04d' % @image_number svg_path = "#{tmpdir}/#{number_string}.svg" png_path = "#{tmpdir}/#{number_string}.png" File.open(svg_path, 'w:UTF-8') {|io| io.puts(net.to_svg)} STDOUT.write "👀️" `convert #{svg_path} #{png_path}` @image_number += 1 end