I've put up a summary of the refinement of this code at:

http://www.inspiredlogic.com/beautiful/clockface.html

I had to make a modification to the below "final" version, both to use the split command and because I realized that sometimes

  450 - (30 * T[1]) - trunc(T[2] / 2)

won't fall into the range 0-359. If it doesn't the value returned by the angle of the graphic the next time won't match (because it is always in 0-359) and so the hour hand's position will be set every second, which we're trying to avoid.

The posted version is now:

on openCard
  setTime
end openCard

on setTime
  put word 1 of the long time into T --8:13:15
  put T & char 2 to 5 of (the long seconds mod 1) into fld "Time"
  split T using ":"
  get (450 - (30 * T[1]) - trunc(T[2] / 2)) mod 360
if (the angle of grc "Hour") <> it then set the angle of grc "Hour" to it
  get (450 - (6 * T[2]) - trunc(T[3] / 10)) mod 360
if (the angle of grc "Minute") <> it then set the angle of grc "Minute" to it
  set the angle of grc "Second" to 360+90-(6 * item 3 of T)
  send "setTime" to me in 1-(the long seconds mod 1) seconds
end setTime

Let me know if you see an issue with that.

gc


On May 30, 2005, at 4:37 PM, Dennis Brown wrote:

That is a good point. I tested it out, and the useless "set angle" results in about 70ms of wasted time every second (7% CPU). I am surprised it is so high. Doing the test and skipping it is a thousand times faster. I fixed up the script as my own exercise for the student. You can see the time lag slightly when the computer is busy with something else, like loading a web page.

Note: the angle calculations had to be changed to match what the angle returned for these graphics. The clock is in my user space (see3d). It takes a licking, but keeps on ticking...

on openCard
  setTime
end openCard

on setTime
  set the itemDelimiter to ":"
  put word 1 of the long time into T --8:13:15
  put T & char 2 to 5 of (the long seconds mod 1) into fld "Time"
  get 360+90-(30 * item 1 of T) - trunc((item 2 of T) / 2)
if (the angle of grc "Hour") <> it then set the angle of grc "Hour" to it
  get 360+90-(6 * item 2 of T) - trunc((item 3 of T) / 10)
if (the angle of grc "Minute") <> it then set the angle of grc "Minute" to it
  set the angle of grc "Second" to 360+90-(6 * item 3 of T)
  send "setTime" to me in 1-(the long seconds mod 1) seconds
end setTime


Dennis

On May 30, 2005, at 2:21 PM, Geoff Canyon wrote:


On May 30, 2005, at 10:04 AM, Dennis Brown wrote:



Nice! I learn something every minute on this list --four heads are better than one. I do believe that the clock is down to its essence now. Every line does something essential, except displaying the "Time" field to check its accuracy. I put the latest version in my user space also (see3d).



re: down to its essence -- obviously for this demo it doesn't matter, but in practice, I would want to put in code to only change the minute and hour hands when they actually need it, rather than setting them to the same startAngle (except when they actually move) each second. I haven't timed this to see whether it's actually a concern.

And multiple heads are definitely better than one. That's why I plan to grow additional heads as soon as possible. ;-)
_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
http://lists.runrev.com/mailman/listinfo/use-revolution



_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
http://lists.runrev.com/mailman/listinfo/use-revolution


_______________________________________________
use-revolution mailing list
use-revolution@lists.runrev.com
http://lists.runrev.com/mailman/listinfo/use-revolution

Reply via email to