#!/usr/bin/env python

import pygtk
pygtk.require("2.0")
import gtk

import paraxial

n_Glass = 1.5
n_Air = 1.0008

system = [ # LTR
	(paraxial.translate(20, n_Air), n_Air),
	(paraxial.refract(paraxial.refraction_factor(n_Air, n_Glass, 20)), n_Glass),
]

rays = [
	(0, n_Air, 0),
]

def repaint(widget, event):
	context = widget.window.cairo_create()
	context.translate(10, 100)
	print dir(context)
	context.set_source_rgb(0, 0, 0.5)
	#context.set_matrix
	context.move_to(-1000, 0)
	context.line_to(1000, 0)
	context.stroke()
	Z = 0
	old_n = n_Air
	for item, n in system:
		if paraxial.translate_P(item):
			distance = item[1][0] * n # FIXME
			print "distance", distance
			Z = Z + distance
		elif paraxial.refract_P(item):
			refraction_factor_1 = item[0][1]
			radius = (n - old_n) / refraction_factor_1
			print "radius", radius
			context.set_source_rgb(0.5, 0, 0)
			context.move_to(Z, -radius)
			context.line_to(Z, radius)
			context.stroke()
		old_n = n
	for ray in rays:
		point_1 = paraxial.point(*ray)
		print ray, point_1

if __name__ == "__main__":
	drawing_area_1 = gtk.DrawingArea()
	drawing_area_1.connect("expose-event", repaint)
	drawing_area_1.show()
	window_1 = gtk.Window()
	window_1.add(drawing_area_1)
	window_1.connect("delete-event", gtk.main_quit)
	window_1.show()
	gtk.main()
