Skip to content

Instantly share code, notes, and snippets.

@monkstone
Created November 17, 2011 20:20
Show Gist options
  • Save monkstone/1374393 to your computer and use it in GitHub Desktop.
Save monkstone/1374393 to your computer and use it in GitHub Desktop.
Testing My Povwriter Library in ruby-processing
# Demonstrates how you can use my povwriter libary
# in Ruby-Processing, to export to PovRAY
load_libraries 'povwriter', 'control_panel'
import 'povexport'
DATA = [-1, 0, 1]
attr_reader :exporter, :precord, :pquality, :type, :pview, :memory, :povfile
def setup
size 300, 300, P3D
@povfile = "balls.pov"
@precord = false
@exporter = PovExporter.new self
control_panel do |c|
c.title = "Render as PovRAY"
c.menu(:quality, ['low', 'medium', 'high', 'highest'], 'high') {|m| load_quality_choice(m) }
c.menu(:image_type, ['png', 'jpeg', 'tga'], 'png') {|m| load_image_type(m) }
c.menu(:memory, ['low', 'default', 'high', 'none'], 'default') {|m| load_memory_choice(m) }
c.checkbox :antialias
c.button :choose_template
c.button :record
c.button :raytrace
c.button :view
c.button :exit!
end
# uncomment next enter the path to povray executable on mac/windows/linux (or possibly jedit linux)
exporter.set_povray_path('/usr/local/bin/povray') # choice is saved in '.povwriter/povwriter.properties'
# uncomment following line to adjust degenerate triangle cut off (area squared)
# export.set_epsilon("0.001")
exporter.store_settings # uncomment this line to save settings
no_stroke
sphere_detail(18)
end
def draw
lights # this needs to be outside the record loop
if (precord)
no_lights # let PovRAY do the lighting
no_loop # don't loop while recording sketch
begin_raw("povexport.RawPovray", data_path(povfile))
end
if pview
background(0) # clear the screen
image(load_image(data_path("balls.png")), 0, 0)
no_loop
else
render
end
if (precord)
end_raw
@precord = false
puts "done recording"
loop
end
end
def exit!
exit 0
end
def render()
background(0)
translate(width*0.7, height/2, -width)
DATA.each do |y|
DATA.each do |x|
DATA.each do |z|
push_matrix
translate(120*x, 120*y, 120*z)
fill(rand * 255, rand * 255, rand * 255) # a nice test for my colorFactory class
exporter.sphere(60) # use a better sphere primitive for ray tracing
pop_matrix
end
end
end
end
################################### Independent of sketch ############################
def record
@precord = true
end
def raytrace
Kernel.system([exporter.get_povray_path, povray_options, povray_scene].join(" "))
end
def choose_template
exporter.choose_template
end
def view
@pview = true
end
def povray_scene
return "+I#{data_path(povfile)}"
end
def povray_options
aa = @antialias ? "+A" : ""
return "+IM#{memory} +W#{width} +H#{height} +Q#{pquality} #{aa} +F#{type}"
end
def load_quality_choice(item)
map = {'low' => 0, 'medium' => 5, 'high' => 9, 'highest' => 11}
@pquality = map[item]
end
def load_memory_choice(item)
map = {'low' => 56, 'default' => 128, 'high' => 1024, 'none' => 0}
@memory = map[item]
end
def load_image_type(item)
map = {'png' => 'N', 'jpeg' => 'J', 'tga' => 'C'}
@type = map[item]
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment