Try moving everything but the "Shoes.app do" block to its own file and then including it. I had what may be a related problem playing with ActiveRecord. It seems Shoes gets confused interpreting classes in the main file besides Shoes inherited ones but if its in a separate included file it works fine. Worth a try.
-Garret Buell On Sat, Jan 3, 2009 at 8:09 PM, Christopher Small <[email protected]> wrote: > Ok, I played with this a bit more. When I try running this simple program > > require "matrix" > > Shoes.app do > Vector[1,2] > end > > I don't get any complaints from the console. However, when I run my actual > program which is for drawing fractals, I get the errors I described. Here is > the code. > > > require "matrix" > > class Vector > def angle_from(v = Vector[1,0]) > ans = Math.atan2(self[1],self[0]) > ans -= v.angle unless v == Vector[1,0] > return ans > end > def rotate(theta) > Matrix.rot_mat(theta) * self > end > end > > class Matrix > def self.rot_mat(theta) > > self[[Math.cos(theta),Math.sin(theta)],[-Math.sin(theta),Math.cos(theta)]] > end > end > > module Fractalizer > def self.fractalize(points,its) > vi, vf = points.first, points.last > theta_l = Math.atan2(yf-yi,xf-xi) > ll = (vf-vi).r > segments = (1..points.length).map { |n| [points[n-1],points[n]] } > answer = [] > segments.each do |seg| > theta_s = seg[1].angle_from seg[0] > ls = (seg[1]-seg[0]).r > newpoints = points.map do |pt| > npt = (pt - points.first)*(ls/ll) > npt = npt.rotate(theta_s - thetal) > npt += points.first > end > newpoints.delete_at -1 > answer += newpoints > end > answer << points.last > end > end > > Shoes.app do > button "Fractalize!" do > @points = Fractalizer.fractalize(@points, @e.text.to_f) > end > para "Number of Iterations" > @e = edit_line :width => 30 > @f = flow > @points = [] > animate do > if self.mouse[0]==1 > pos = Vector[mouse[1], mouse[2]] > @points << pos > if @points.size > 1 > @f.append {line(@points[-2][0],@points[-2][1],*(@points[-1]))} > end > end > end > end > > > > Is there something I'm doing wrong here that is making the code not work? > Can anyone else run this code and see if they get errors? The basic idea is > that this program is intended to let you draw a connected set of line > segments by clicking on the shoes window. Once you click the fractalize > button, it runs takes each segment and replaces it with the whole shape. So, > if things run properly on your machine, when you click at two different > points in the shoes window, you should get a line segment drawn. If not, it > should be because one of the errors that I described earlier. Thanks for the > help. > > Chris > > On Sun, Dec 28, 2008 at 10:39 PM, <[email protected]> wrote: >> >> I did require "matrix" but had no luck with that. >> >> Chris >> Sent from my BlackBerry Smartphone provided by Alltel >> >> -----Original Message----- >> From: Ernest Prabhakar <[email protected]> >> >> Date: Mon, 29 Dec 2008 12:06:38 >> To: <[email protected]> >> Subject: Re: Vector class >> >> >> Hi Christopher, >> >> > There seems to be a bug with the Vector class in the shoes version >> > of ruby. I'm making vectors of coordinates using this line: >> >> That sounds like the same problem I had with tankspank. Did you: >> >> require 'matrix' >> >> ? >> >> I don't think I needed to do that in pure Ruby, but I did in Shoes. >> >> -- Ernie P. >> On Dec 29, 2008, at 3:23 AM, Christopher Small wrote: >> >> > There seems to be a bug with the Vector class in the shoes version >> > of ruby. I'm making vectors of coordinates using this line: >> > >> > pos = Vector[mouse[1], mouse[2]] >> > >> > Before I was doing this with arrays, but realized that using vectors >> > would help me out in the long run. Once I switched to vectors, I got >> > this error in the shoes console: >> > >> > undefined method '[]' for #<Class:0x1249a54>::Vector >> > >> > Has anyone come across this? It seems like this should work just >> > fine. I'm using the latest .dmg release of Raisins on Leopard. >> > >> > Thanks >> > >> > Chris >> > >
